diff --git a/.gitignore b/.gitignore
index 7677d22..fbb5a7e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/libvirt-6.0.0.tar.xz
+SOURCES/libvirt-8.0.0.tar.xz
diff --git a/.libvirt.metadata b/.libvirt.metadata
index 4a2f940..76dff0f 100644
--- a/.libvirt.metadata
+++ b/.libvirt.metadata
@@ -1 +1 @@
-9939a559e652d44b27e3404a26bcabe58988e4b4 SOURCES/libvirt-6.0.0.tar.xz
+e440412e9b45d7e24f0ef492d8edf5cf2cbd3f4c SOURCES/libvirt-8.0.0.tar.xz
diff --git a/SOURCES/libvirt-Add-testdata-for-AMD-EPYC-7502.patch b/SOURCES/libvirt-Add-testdata-for-AMD-EPYC-7502.patch
deleted file mode 100644
index 1530f4e..0000000
--- a/SOURCES/libvirt-Add-testdata-for-AMD-EPYC-7502.patch
+++ /dev/null
@@ -1,2173 +0,0 @@
-From a2f2e97422de810517a77d8f098564e3b6c0f7c2 Mon Sep 17 00:00:00 2001
-Message-Id: <a2f2e97422de810517a77d8f098564e3b6c0f7c2@dist-git>
-From: Markus Schade <markus.schade@hetzner.com>
-Date: Thu, 8 Oct 2020 18:01:24 +0200
-Subject: [PATCH] Add testdata for AMD EPYC 7502
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Markus Schade <markus.schade@hetzner.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit e06590f1708a599286f3ee3690b3dc50ee525d40)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861506
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <2efe44ce5c929916c92656803d39635ae7c189b9.1602172344.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/cputest.c                               |    1 +
- ...86_64-cpuid-EPYC-7502-32-Core-disabled.xml |    9 +
- ...x86_64-cpuid-EPYC-7502-32-Core-enabled.xml |   11 +
- .../x86_64-cpuid-EPYC-7502-32-Core-guest.xml  |   42 +
- .../x86_64-cpuid-EPYC-7502-32-Core-host.xml   |   43 +
- .../x86_64-cpuid-EPYC-7502-32-Core-json.xml   |   31 +
- .../x86_64-cpuid-EPYC-7502-32-Core.json       | 1866 +++++++++++++++++
- .../x86_64-cpuid-EPYC-7502-32-Core.sig        |    4 +
- .../x86_64-cpuid-EPYC-7502-32-Core.xml        |   66 +
- 9 files changed, 2073 insertions(+)
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
- create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml
-
-diff --git a/tests/cputest.c b/tests/cputest.c
-index 68e8eb0290..388174eba7 100644
---- a/tests/cputest.c
-+++ b/tests/cputest.c
-@@ -1242,6 +1242,7 @@ mymain(void)
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Hygon-C86-7185-32-core", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7601-32-Core", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7601-32-Core-ibpb", JSON_MODELS_REQUIRED);
-+    DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7502-32-Core", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "FX-8150", JSON_NONE);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-1352", JSON_NONE);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-2350", JSON_HOST);
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
-new file mode 100644
-index 0000000000..ca71b9efb5
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-disabled.xml
-@@ -0,0 +1,9 @@
-+<!-- Features disabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x08000008' edx='0x10000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01423408' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
-new file mode 100644
-index 0000000000..09a9952c27
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-enabled.xml
-@@ -0,0 +1,11 @@
-+<!-- Features enabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7f83203' edx='0x078bfbff'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x219c01ab' ecx='0x00400004' edx='0xac000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x008003f7' edx='0x2e500800'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x03009205' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000069'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-new file mode 100644
-index 0000000000..1320f65a58
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-@@ -0,0 +1,42 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>EPYC-IBPB</model>
-+  <vendor>AMD</vendor>
-+  <feature policy='require' name='ht'/>
-+  <feature policy='require' name='osxsave'/>
-+  <feature policy='require' name='cmt'/>
-+  <feature policy='require' name='clwb'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='rdpid'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='mbm_total'/>
-+  <feature policy='require' name='mbm_local'/>
-+  <feature policy='require' name='cmp_legacy'/>
-+  <feature policy='require' name='extapic'/>
-+  <feature policy='require' name='ibs'/>
-+  <feature policy='require' name='skinit'/>
-+  <feature policy='require' name='wdt'/>
-+  <feature policy='require' name='tce'/>
-+  <feature policy='require' name='topoext'/>
-+  <feature policy='require' name='perfctr_core'/>
-+  <feature policy='require' name='perfctr_nb'/>
-+  <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='clzero'/>
-+  <feature policy='require' name='xsaveerptr'/>
-+  <feature policy='require' name='wbnoinvd'/>
-+  <feature policy='require' name='amd-stibp'/>
-+  <feature policy='require' name='amd-ssbd'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-new file mode 100644
-index 0000000000..37905ec812
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-@@ -0,0 +1,43 @@
-+<cpu>
-+  <arch>x86_64</arch>
-+  <model>EPYC-IBPB</model>
-+  <vendor>AMD</vendor>
-+  <feature name='ht'/>
-+  <feature name='osxsave'/>
-+  <feature name='cmt'/>
-+  <feature name='clwb'/>
-+  <feature name='umip'/>
-+  <feature name='rdpid'/>
-+  <feature name='xsaves'/>
-+  <feature name='mbm_total'/>
-+  <feature name='mbm_local'/>
-+  <feature name='cmp_legacy'/>
-+  <feature name='extapic'/>
-+  <feature name='ibs'/>
-+  <feature name='skinit'/>
-+  <feature name='wdt'/>
-+  <feature name='tce'/>
-+  <feature name='topoext'/>
-+  <feature name='perfctr_core'/>
-+  <feature name='perfctr_nb'/>
-+  <feature name='invtsc'/>
-+  <feature name='clzero'/>
-+  <feature name='xsaveerptr'/>
-+  <feature name='wbnoinvd'/>
-+  <feature name='amd-stibp'/>
-+  <feature name='amd-ssbd'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
-+  <feature name='rdctl-no'/>
-+  <feature name='skip-l1dfl-vmentry'/>
-+  <feature name='mds-no'/>
-+  <feature name='pschange-mc-no'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-new file mode 100644
-index 0000000000..225cf63852
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-@@ -0,0 +1,31 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>EPYC-IBPB</model>
-+  <vendor>AMD</vendor>
-+  <feature policy='require' name='x2apic'/>
-+  <feature policy='require' name='tsc-deadline'/>
-+  <feature policy='require' name='hypervisor'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='clwb'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='rdpid'/>
-+  <feature policy='require' name='spec-ctrl'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='ssbd'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='cmp_legacy'/>
-+  <feature policy='require' name='perfctr_core'/>
-+  <feature policy='require' name='clzero'/>
-+  <feature policy='require' name='xsaveerptr'/>
-+  <feature policy='require' name='wbnoinvd'/>
-+  <feature policy='require' name='amd-stibp'/>
-+  <feature policy='require' name='amd-ssbd'/>
-+  <feature policy='require' name='virt-ssbd'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-+  <feature policy='disable' name='monitor'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
-new file mode 100644
-index 0000000000..06c265d829
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.json
-@@ -0,0 +1,1866 @@
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "phys-bits": 0,
-+        "core-id": -1,
-+        "xlevel": 2147483679,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": false,
-+        "mmx": true,
-+        "arat": true,
-+        "rdpid": true,
-+        "vmx-page-walk-5": false,
-+        "vmx-page-walk-4": false,
-+        "vmx-desc-exit": false,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": false,
-+        "hv-frequencies": false,
-+        "tsc-frequency": 0,
-+        "vmx-rdseed-exit": false,
-+        "xd": true,
-+        "x-intel-pt-auto-level": true,
-+        "hv-vendor-id": "",
-+        "vmx-eptp-switching": false,
-+        "kvm_asyncpf": true,
-+        "kvm-asyncpf": true,
-+        "perfctr_core": true,
-+        "perfctr-core": true,
-+        "mpx": false,
-+        "avx512cd": false,
-+        "pbe": false,
-+        "decodeassists": false,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "vmx-exit-load-efer": false,
-+        "sse4_1": true,
-+        "sse4-1": true,
-+        "sse4.1": true,
-+        "family": 23,
-+        "legacy-cache": true,
-+        "vmx-vmwrite-vmexit-fields": false,
-+        "vmx-vnmi": false,
-+        "vmx-true-ctls": false,
-+        "host-phys-bits-limit": 0,
-+        "vmx-ept-execonly": false,
-+        "vmx-exit-save-efer": false,
-+        "vmx-invept-all-context": false,
-+        "vmware-cpuid-freq": true,
-+        "wbnoinvd": true,
-+        "avx512f": false,
-+        "xcrypt": false,
-+        "hv-runtime": false,
-+        "hv-stimer-direct": false,
-+        "mce": true,
-+        "mca": true,
-+        "msr": true,
-+        "thread-id": -1,
-+        "vmx-exit-load-pat": false,
-+        "vmx-intr-exit": false,
-+        "min-level": 16,
-+        "vmx-flexpriority": false,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "hv-relaxed": false,
-+        "avx512-bf16": false,
-+        "ds": false,
-+        "hv-crash": false,
-+        "fxsr": true,
-+        "vmx-cr8-load-exit": false,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": false,
-+        "vmx-exit-save-pat": false,
-+        "tsx-ctrl": false,
-+        "xtpr": false,
-+        "vmx-ple": false,
-+        "hv-evmcs": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "avx512vl": false,
-+        "extapic": false,
-+        "vmx-vmfunc": false,
-+        "3dnowprefetch": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "cr8legacy": true,
-+        "vmx-encls-exit": false,
-+        "stibp": true,
-+        "vmx-msr-bitmap": false,
-+        "cpuid-0xb": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": false,
-+        "kvm_pv_eoi": true,
-+        "vmx-pml": false,
-+        "apic-id": 4294967295,
-+        "vmx-nmi-exit": false,
-+        "vmx-invept-single-context-noglobals": false,
-+        "pn": false,
-+        "rsba": false,
-+        "dca": false,
-+        "vmx-unrestricted-guest": false,
-+        "vendor": "AuthenticAMD",
-+        "hv-ipi": false,
-+        "vmx-cr3-store-noexit": false,
-+        "pku": false,
-+        "smx": false,
-+        "cmp-legacy": true,
-+        "cmp_legacy": true,
-+        "node-id": -1,
-+        "avx512-4fmaps": false,
-+        "vmcb_clean": false,
-+        "vmcb-clean": false,
-+        "hle": false,
-+        "amd-no-ssb": false,
-+        "3dnowext": false,
-+        "npt": true,
-+        "rdctl-no": true,
-+        "vmx-invvpid": false,
-+        "memory": "/machine/unattached/system[0]",
-+        "clwb": true,
-+        "lbrv": false,
-+        "adx": true,
-+        "ss": false,
-+        "pni": true,
-+        "svm_lock": false,
-+        "svm-lock": false,
-+        "pfthreshold": false,
-+        "smap": true,
-+        "smep": true,
-+        "vmx-invpcid-exit": false,
-+        "x2apic": true,
-+        "avx512vnni": false,
-+        "avx512vbmi": false,
-+        "vmx-apicv-x2apic": false,
-+        "hv-stimer": false,
-+        "kvm-pv-sched-yield": true,
-+        "vmx-invlpg-exit": false,
-+        "x-hv-synic-kvm-only": false,
-+        "vmx-invvpid-all-context": false,
-+        "i64": true,
-+        "vmx-activity-hlt": false,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "vmx-exit-ack-intr": false,
-+        "ace2-en": false,
-+        "pae": true,
-+        "pat": true,
-+        "sse": true,
-+        "die-id": -1,
-+        "vmx-tsc-offset": false,
-+        "phe-en": false,
-+        "kvm_nopiodelay": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": false,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": false,
-+        "socket-id": -1,
-+        "mds-no": true,
-+        "pcommit": false,
-+        "vmx-vpid": false,
-+        "syscall": true,
-+        "level": 16,
-+        "avx512dq": false,
-+        "x-migrate-smi-count": true,
-+        "svm": true,
-+        "full-cpuid-auto-level": true,
-+        "hv-reset": false,
-+        "invtsc": false,
-+        "vmx-monitor-exit": false,
-+        "sse3": true,
-+        "sse2": true,
-+        "ssbd": true,
-+        "vmx-wbinvd-exit": false,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "kvm_poll_control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-eoi": true,
-+        "kvm-pv-ipi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": false,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": 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,
-+        "vmx-entry-load-bndcfgs": false,
-+        "nodeid_msr": false,
-+        "pdcm": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "model": 49,
-+        "movbe": true,
-+        "nrip_save": true,
-+        "nrip-save": true,
-+        "vmx-pause-exit": false,
-+        "ssse3": true,
-+        "kvm_pv_unhalt": true,
-+        "sse4a": true,
-+        "invpcid": false,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "fma": true,
-+        "cx16": true,
-+        "de": true,
-+        "enforce": false,
-+        "stepping": 0,
-+        "xsave": true,
-+        "clflush": true,
-+        "skinit": false,
-+        "tsc": true,
-+        "tce": false,
-+        "fpu": true,
-+        "ds-cpl": false,
-+        "ds_cpl": false,
-+        "ibs": false,
-+        "fma4": false,
-+        "host-phys-bits": false,
-+        "vmx-exit-nosave-debugctl": false,
-+        "vmx-invept": false,
-+        "la57": false,
-+        "osvw": true,
-+        "check": true,
-+        "hv-spinlocks": 4294967295,
-+        "vmx-eptad": false,
-+        "pmu": false,
-+        "vmx-entry-noload-debugctl": false,
-+        "pmm": false,
-+        "apic": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": false,
-+        "vmx-apicv-register": false,
-+        "min-xlevel2": 0,
-+        "tsc-adjust": true,
-+        "tsc_adjust": true,
-+        "kvm-steal-time": true,
-+        "kvm_steal_time": true,
-+        "kvmclock": true,
-+        "vmx-zero-len-inject": false,
-+        "l3-cache": true,
-+        "pschange-mc-no": true,
-+        "vmx-rdrand-exit": false,
-+        "lwp": false,
-+        "hv-passthrough": false,
-+        "amd-ssbd": true,
-+        "ibpb": true,
-+        "xop": false,
-+        "core-capability": false,
-+        "avx": true,
-+        "vmx-invept-single-context": false,
-+        "movdiri": false,
-+        "avx512bw": false,
-+        "acpi": false,
-+        "ace2": false,
-+        "fsgsbase": true,
-+        "hv-vapic": false,
-+        "vmx-ept-1gb": false,
-+        "vmx-ept-2mb": false,
-+        "ht": false,
-+        "vmx-io-exit": false,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": true,
-+        "popcnt": true,
-+        "vaes": false,
-+        "xsaves": true,
-+        "movdir64b": false,
-+        "vmx-shadow-vmcs": false,
-+        "tcg-cpuid": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": false,
-+        "vmx-entry-load-pat": false,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": false,
-+        "vmx-store-lma": false,
-+        "umip": true,
-+        "vmx-movdr-exit": false,
-+        "avx2": true,
-+        "pse": true,
-+        "pclmuldq": true,
-+        "sep": true,
-+        "vmx-cr3-load-noexit": false,
-+        "virt-ssbd": true,
-+        "x-hv-max-vps": -1,
-+        "nodeid-msr": false,
-+        "md-clear": false,
-+        "split-lock-detect": false,
-+        "kvm": true,
-+        "misalignsse": true,
-+        "min-xlevel": 2147483679,
-+        "realized": false,
-+        "kvm-pv-unhalt": true,
-+        "bmi2": true,
-+        "bmi1": true,
-+        "tsc_scale": false,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "amd-stibp": true,
-+        "hv-vpindex": false,
-+        "hv-no-nonarch-coresharing": "off",
-+        "vmx-preemption-timer": false,
-+        "xlevel2": 0,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": false,
-+        "kvm-no-smi-migration": false,
-+        "monitor": false,
-+        "vmx-vintr-pending": false,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "taa-no": false,
-+        "pcid": false,
-+        "vmx-secondary-ctls": false,
-+        "arch-capabilities": true,
-+        "vmx-xsaves": false,
-+        "clzero": true,
-+        "3dnow": false,
-+        "erms": false,
-+        "x-force-features": false,
-+        "vmx-entry-ia32e-mode": false,
-+        "lahf-lm": true,
-+        "lahf_lm": true,
-+        "vmx-ins-outs": false,
-+        "vpclmulqdq": false,
-+        "xstore": false,
-+        "fxsr-opt": true,
-+        "fxsr_opt": true,
-+        "hv-synic": false,
-+        "rtm": false,
-+        "kvm-hint-dedicated": false,
-+        "lmce": false,
-+        "hv-time": false,
-+        "perfctr_nb": false,
-+        "perfctr-nb": false,
-+        "hv-tlbflush": false,
-+        "ffxsr": true,
-+        "rdrand": true,
-+        "rdseed": true,
-+        "avx512-4vnniw": false,
-+        "vme": true,
-+        "vmx": false,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": true,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "vmx-rdpmc-exit": false,
-+        "wdt": false,
-+        "vmx-entry-load-efer": false,
-+        "level-func7": 0,
-+        "vmx-mtf": false,
-+        "pause_filter": false,
-+        "model-id": "AMD EPYC 7502 32-Core Processor                ",
-+        "sha-ni": true,
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": false,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "model-expansion"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "qemu64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32",
-+      "typename": "qemu32-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "qemu32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom",
-+      "typename": "phenom-x86_64-cpu",
-+      "unavailable-features": [
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "alias-of": "phenom-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "pentium3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2",
-+      "typename": "pentium2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "pentium2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium-v1",
-+      "typename": "pentium-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium",
-+      "typename": "pentium-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "pentium-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270-v1",
-+      "typename": "n270-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270",
-+      "typename": "n270-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss"
-+      ],
-+      "alias-of": "n270-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64-v1",
-+      "typename": "kvm64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64",
-+      "typename": "kvm64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "kvm64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32-v1",
-+      "typename": "kvm32-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32",
-+      "typename": "kvm32-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "kvm32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo-v1",
-+      "typename": "coreduo-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo",
-+      "typename": "coreduo-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss"
-+      ],
-+      "alias-of": "coreduo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo-v1",
-+      "typename": "core2duo-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo",
-+      "typename": "core2duo-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss"
-+      ],
-+      "alias-of": "core2duo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "alias-of": "athlon-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Westmere-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere",
-+      "typename": "Westmere-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Westmere-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms",
-+        "mpx",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "mpx",
-+        "mpx",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms",
-+        "mpx",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "mpx",
-+        "mpx",
-+        "split-lock-detect"
-+      ],
-+      "alias-of": "Snowridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Skylake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Skylake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Skylake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "alias-of": "Skylake-Client-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Skylake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Skylake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "SandyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge",
-+      "typename": "SandyBridge-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "SandyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn-v1",
-+      "typename": "Penryn-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn",
-+      "typename": "Penryn-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Penryn-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "xop",
-+        "fma4",
-+        "tbm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5",
-+      "typename": "Opteron_G5-x86_64-cpu",
-+      "unavailable-features": [
-+        "xop",
-+        "fma4",
-+        "tbm"
-+      ],
-+      "alias-of": "Opteron_G5-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "xop",
-+        "fma4"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4",
-+      "typename": "Opteron_G4-x86_64-cpu",
-+      "unavailable-features": [
-+        "xop",
-+        "fma4"
-+      ],
-+      "alias-of": "Opteron_G4-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3",
-+      "typename": "Opteron_G3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Opteron_G3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Opteron_G2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1",
-+      "typename": "Opteron_G1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Opteron_G1-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Nehalem-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem",
-+      "typename": "Nehalem-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Nehalem-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss",
-+        "erms",
-+        "avx512f",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill",
-+      "typename": "KnightsMill-x86_64-cpu",
-+      "unavailable-features": [
-+        "ss",
-+        "erms",
-+        "avx512f",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "alias-of": "KnightsMill-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms"
-+      ],
-+      "alias-of": "IvyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge",
-+      "typename": "IvyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms"
-+      ],
-+      "alias-of": "IvyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "alias-of": "Haswell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX",
-+      "typename": "Haswell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "alias-of": "Haswell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Haswell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell",
-+      "typename": "Haswell-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Haswell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v3",
-+      "typename": "EPYC-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome-v1",
-+      "typename": "EPYC-Rome-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome",
-+      "typename": "EPYC-Rome-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "EPYC-Rome-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-IBPB",
-+      "typename": "EPYC-IBPB-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "EPYC-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC",
-+      "typename": "EPYC-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "EPYC-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Dhyana-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms",
-+        "mpx",
-+        "mpx",
-+        "mpx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "erms",
-+        "mpx",
-+        "mpx",
-+        "mpx"
-+      ],
-+      "alias-of": "Denverton-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake-v1",
-+      "typename": "Cooperlake-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "ibrs-all"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake",
-+      "typename": "Cooperlake-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "ibrs-all"
-+      ],
-+      "alias-of": "Cooperlake-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Conroe-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "ibrs-all"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "ibrs-all"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "ibrs-all"
-+      ],
-+      "alias-of": "Cascadelake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Cascadelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "alias-of": "Broadwell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX",
-+      "typename": "Broadwell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "erms",
-+        "invpcid"
-+      ],
-+      "alias-of": "Broadwell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Broadwell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell",
-+      "typename": "Broadwell-x86_64-cpu",
-+      "unavailable-features": [
-+        "pcid",
-+        "hle",
-+        "erms",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Broadwell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486-v1",
-+      "typename": "486-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486",
-+      "typename": "486-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "486-v1",
-+      "static": false,
-+      "migration-safe": true
-+    }
-+  ],
-+  "id": "definitions"
-+}
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
-new file mode 100644
-index 0000000000..cf54739de9
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.sig
-@@ -0,0 +1,4 @@
-+830f10
-+family:    23 (0x17)
-+model:     49 (0x31)
-+stepping:   0 (0x00)
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml
-new file mode 100644
-index 0000000000..d6753065b9
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core.xml
-@@ -0,0 +1,66 @@
-+<!-- AMD EPYC 7502 32-Core Processor -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x00000010' ebx='0x68747541' ecx='0x444d4163' edx='0x69746e65'/>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00830f10' ebx='0x31400800' ecx='0x7ed8320b' edx='0x178bfbff'/>
-+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00000011'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x219c91a9' ecx='0x00400004' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000031'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000007' ebx='0x00000040' ecx='0x00000201' edx='0x00000031'/>
-+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x00000207' ebx='0x00000340' ecx='0x00000380' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000340' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x09' eax='0x00000040' ebx='0x00000340' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x000000ff' ecx='0x00000000' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00000040' ecx='0x000000ff' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x00000002' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000004' edx='0x0000000f'/>
-+  <cpuid eax_in='0x20000000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000020' ebx='0x68747541' ecx='0x444d4163' edx='0x69746e65'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00830f10' ebx='0x40000000' ecx='0x75c237ff' edx='0x2fd3fbff'/>
-+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x20444d41' ebx='0x43595045' ecx='0x30353720' edx='0x32332032'/>
-+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x726f432d' ebx='0x72502065' ecx='0x7365636f' edx='0x20726f73'/>
-+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x20202020' ebx='0x20202020' ecx='0x20202020' edx='0x00202020'/>
-+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0xff40ff40' ebx='0xff40ff40' ecx='0x20080140' edx='0x20080140'/>
-+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x48006400' ebx='0x68006400' ecx='0x02006140' edx='0x04009140'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x0000001b' ecx='0x00000000' edx='0x00006799'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00003030' ebx='0x018cf757' ecx='0x0000703f' edx='0x00010000'/>
-+  <cpuid eax_in='0x80000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000001' ebx='0x00008000' ecx='0x00000000' edx='0x0013bcff'/>
-+  <cpuid eax_in='0x8000000b' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000d' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000f' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000010' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000014' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000015' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000016' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000017' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000018' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000019' ecx_in='0x00' eax='0xf040f040' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001a' ecx_in='0x00' eax='0x00000006' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001b' ecx_in='0x00' eax='0x000003ff' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001d' ecx_in='0x00' eax='0x00004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001d' ecx_in='0x01' eax='0x00004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001d' ecx_in='0x02' eax='0x00004143' ebx='0x01c0003f' ecx='0x000003ff' edx='0x00000002'/>
-+  <cpuid eax_in='0x8000001d' ecx_in='0x03' eax='0x0001c163' ebx='0x03c0003f' ecx='0x00003fff' edx='0x00000001'/>
-+  <cpuid eax_in='0x8000001e' ecx_in='0x00' eax='0x00000031' ebx='0x00000118' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000001f' ecx_in='0x00' eax='0x0001000f' ebx='0x0000016f' ecx='0x000001fd' edx='0x00000001'/>
-+  <cpuid eax_in='0x80000020' ecx_in='0x00' eax='0x00000000' ebx='0x00000002' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000020' ecx_in='0x01' eax='0x0000000b' ebx='0x00000000' ecx='0x00000000' edx='0x0000000f'/>
-+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000069'/>
-+</cpudata>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-Allow-NUMA-nodes-without-vCPUs.patch b/SOURCES/libvirt-Allow-NUMA-nodes-without-vCPUs.patch
deleted file mode 100644
index 37df946..0000000
--- a/SOURCES/libvirt-Allow-NUMA-nodes-without-vCPUs.patch
+++ /dev/null
@@ -1,456 +0,0 @@
-From 5f6723e71e3765d1d43bfa9ba1c66e0e05e11a48 Mon Sep 17 00:00:00 2001
-Message-Id: <5f6723e71e3765d1d43bfa9ba1c66e0e05e11a48@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 9 Nov 2020 17:22:32 +0100
-Subject: [PATCH] Allow NUMA nodes without vCPUs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-QEMU allows creating NUMA nodes that have memory only.
-These are somehow important for HMAT.
-
-With check done in qemuValidateDomainDef() for QEMU 2.7 or newer
-(checked via QEMU_CAPS_NUMA), we can be sure that the vCPUs are
-fully assigned to NUMA nodes in domain XML.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit a26f61ee0cffa421b87ef568002b684dd8025432)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/qemu/qemu_validate.c: This file doesn't exist in downstream
-yet, so I've moved the change that original patch would do to
-qemu_domain.c where the validator lives.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <365508c75e579e9037ad555d6c372068ccd50c95.1604938867.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in                     |  2 +
- docs/schemas/cputypes.rng                     |  8 ++-
- src/conf/numa_conf.c                          | 59 ++++++++++---------
- src/libxl/xen_xl.c                            | 10 ++--
- src/qemu/qemu_command.c                       | 26 ++++----
- src/qemu/qemu_domain.c                        | 22 +++----
- tests/qemuxml2argvdata/numatune-no-vcpu.args  | 33 +++++++++++
- tests/qemuxml2argvdata/numatune-no-vcpu.xml   | 42 +++++++++++++
- tests/qemuxml2argvtest.c                      |  1 +
- tests/qemuxml2xmloutdata/numatune-no-vcpu.xml |  1 +
- tests/qemuxml2xmltest.c                       |  1 +
- 11 files changed, 149 insertions(+), 56 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/numatune-no-vcpu.args
- create mode 100644 tests/qemuxml2argvdata/numatune-no-vcpu.xml
- create mode 120000 tests/qemuxml2xmloutdata/numatune-no-vcpu.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 76799f5ffc..4b8d312596 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -1783,6 +1783,8 @@
-       <code>cpus</code> specifies the CPU or range of CPUs that are
-       part of the node. <code>memory</code> specifies the node memory
-       in kibibytes (i.e. blocks of 1024 bytes).
-+      <span class="since">Since 6.6.0</span> the <code>cpus</code> attribute
-+      is optional and if omitted a CPU-less NUMA node is created.
-       <span class="since">Since 1.2.11</span> one can use an additional <a
-           href="#elementsMemoryAllocation"><code>unit</code></a> attribute to
-       define units in which <code>memory</code> is specified.
-diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng
-index e2744acad3..a1682a1003 100644
---- a/docs/schemas/cputypes.rng
-+++ b/docs/schemas/cputypes.rng
-@@ -115,9 +115,11 @@
-           <ref name="unsignedInt"/>
-         </attribute>
-       </optional>
--      <attribute name="cpus">
--        <ref name="cpuset"/>
--      </attribute>
-+      <optional>
-+        <attribute name="cpus">
-+          <ref name="cpuset"/>
-+        </attribute>
-+      </optional>
-       <attribute name="memory">
-         <ref name="memoryKB"/>
-       </attribute>
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index c9cc8ac22e..a805336d16 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -889,32 +889,28 @@ virDomainNumaDefParseXML(virDomainNumaPtr def,
-         }
-         VIR_FREE(tmp);
- 
--        if (def->mem_nodes[cur_cell].cpumask) {
-+        if (def->mem_nodes[cur_cell].mem) {
-             virReportError(VIR_ERR_XML_ERROR,
-                            _("Duplicate NUMA cell info for cell id '%u'"),
-                            cur_cell);
-             goto cleanup;
-         }
- 
--        if (!(tmp = virXMLPropString(nodes[i], "cpus"))) {
--            virReportError(VIR_ERR_XML_ERROR, "%s",
--                           _("Missing 'cpus' attribute in NUMA cell"));
--            goto cleanup;
--        }
-+        if ((tmp = virXMLPropString(nodes[i], "cpus"))) {
-+            g_autoptr(virBitmap) cpumask = NULL;
- 
--        if (virBitmapParse(tmp, &def->mem_nodes[cur_cell].cpumask,
--                           VIR_DOMAIN_CPUMASK_LEN) < 0)
--            goto cleanup;
-+            if (virBitmapParse(tmp, &cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
-+                goto cleanup;
- 
--        if (virBitmapIsAllClear(def->mem_nodes[cur_cell].cpumask)) {
--            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
--                          _("NUMA cell %d has no vCPUs assigned"), cur_cell);
--            goto cleanup;
-+            if (!virBitmapIsAllClear(cpumask))
-+                def->mem_nodes[cur_cell].cpumask = g_steal_pointer(&cpumask);
-+            VIR_FREE(tmp);
-         }
--        VIR_FREE(tmp);
- 
-         for (j = 0; j < n; j++) {
--            if (j == cur_cell || !def->mem_nodes[j].cpumask)
-+            if (j == cur_cell ||
-+                !def->mem_nodes[j].cpumask ||
-+                !def->mem_nodes[cur_cell].cpumask)
-                 continue;
- 
-             if (virBitmapOverlaps(def->mem_nodes[j].cpumask,
-@@ -976,7 +972,6 @@ virDomainNumaDefFormatXML(virBufferPtr buf,
- {
-     virDomainMemoryAccess memAccess;
-     virTristateBool discard;
--    char *cpustr;
-     size_t ncells = virDomainNumaGetNodeCount(def);
-     size_t i;
- 
-@@ -986,17 +981,22 @@ virDomainNumaDefFormatXML(virBufferPtr buf,
-     virBufferAddLit(buf, "<numa>\n");
-     virBufferAdjustIndent(buf, 2);
-     for (i = 0; i < ncells; i++) {
-+        virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(def, i);
-         int ndistances;
- 
-         memAccess = virDomainNumaGetNodeMemoryAccessMode(def, i);
-         discard = virDomainNumaGetNodeDiscard(def, i);
- 
--        if (!(cpustr = virBitmapFormat(virDomainNumaGetNodeCpumask(def, i))))
--            return -1;
--
-         virBufferAddLit(buf, "<cell");
-         virBufferAsprintf(buf, " id='%zu'", i);
--        virBufferAsprintf(buf, " cpus='%s'", cpustr);
-+
-+        if (cpumask) {
-+            g_autofree char *cpustr = virBitmapFormat(cpumask);
-+
-+            if (!cpustr)
-+                return -1;
-+            virBufferAsprintf(buf, " cpus='%s'", cpustr);
-+        }
-         virBufferAsprintf(buf, " memory='%llu'",
-                           virDomainNumaGetNodeMemorySize(def, i));
-         virBufferAddLit(buf, " unit='KiB'");
-@@ -1032,8 +1032,6 @@ virDomainNumaDefFormatXML(virBufferPtr buf,
-             virBufferAdjustIndent(buf, -2);
-             virBufferAddLit(buf, "</cell>\n");
-         }
--
--        VIR_FREE(cpustr);
-     }
-     virBufferAdjustIndent(buf, -2);
-     virBufferAddLit(buf, "</numa>\n");
-@@ -1048,8 +1046,12 @@ virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa)
-     size_t i;
-     unsigned int ret = 0;
- 
--    for (i = 0; i < numa->nmem_nodes; i++)
--        ret += virBitmapCountBits(virDomainNumaGetNodeCpumask(numa, i));
-+    for (i = 0; i < numa->nmem_nodes; i++) {
-+        virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(numa, i);
-+
-+        if (cpumask)
-+            ret += virBitmapCountBits(cpumask);
-+    }
- 
-     return ret;
- }
-@@ -1061,11 +1063,14 @@ virDomainNumaGetMaxCPUID(virDomainNumaPtr numa)
-     unsigned int ret = 0;
- 
-     for (i = 0; i < numa->nmem_nodes; i++) {
-+        virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(numa, i);
-         int bit;
- 
--        bit = virBitmapLastSetBit(virDomainNumaGetNodeCpumask(numa, i));
--        if (bit > ret)
--            ret = bit;
-+        if (cpumask) {
-+            bit = virBitmapLastSetBit(cpumask);
-+            if (bit > ret)
-+                ret = bit;
-+        }
-     }
- 
-     return ret;
-diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c
-index edea30a86a..752fa925ec 100644
---- a/src/libxl/xen_xl.c
-+++ b/src/libxl/xen_xl.c
-@@ -1443,19 +1443,21 @@ xenFormatXLVnuma(virConfValuePtr list,
- {
-     int ret = -1;
-     size_t i;
--
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     virConfValuePtr numaVnode, tmp;
--
-+    virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(numa, node);
-     size_t nodeSize = virDomainNumaGetNodeMemorySize(numa, node) / 1024;
--    char *nodeVcpus = virBitmapFormat(virDomainNumaGetNodeCpumask(numa, node));
-+    g_autofree char *nodeVcpus = NULL;
- 
--    if (VIR_ALLOC(numaVnode) < 0)
-+    if (!cpumask ||
-+        VIR_ALLOC(numaVnode) < 0)
-         goto cleanup;
- 
-     numaVnode->type = VIR_CONF_LIST;
-     numaVnode->list = NULL;
- 
-+    nodeVcpus = virBitmapFormat(cpumask);
-+
-     /* pnode */
-     virBufferAsprintf(&buf, "pnode=%zu", node);
-     xenFormatXLVnode(numaVnode, &buf);
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 1a573c2817..ac63d18a42 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -7364,8 +7364,6 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-     size_t i, j;
-     virQEMUCapsPtr qemuCaps = priv->qemuCaps;
-     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
--    char *cpumask = NULL;
--    char *tmpmask = NULL;
-     char *next = NULL;
-     virBufferPtr nodeBackends = NULL;
-     bool needBackend = false;
-@@ -7400,9 +7398,7 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-         goto cleanup;
- 
-     for (i = 0; i < ncells; i++) {
--        VIR_FREE(cpumask);
--        if (!(cpumask = virBitmapFormat(virDomainNumaGetNodeCpumask(def->numa, i))))
--            goto cleanup;
-+        virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(def->numa, i);
- 
-         if (needBackend) {
-             virCommandAddArg(cmd, "-object");
-@@ -7412,11 +7408,19 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-         virCommandAddArg(cmd, "-numa");
-         virBufferAsprintf(&buf, "node,nodeid=%zu", i);
- 
--        for (tmpmask = cpumask; tmpmask; tmpmask = next) {
--            if ((next = strchr(tmpmask, ',')))
--                *(next++) = '\0';
--            virBufferAddLit(&buf, ",cpus=");
--            virBufferAdd(&buf, tmpmask, -1);
-+        if (cpumask) {
-+            g_autofree char *cpumaskStr = NULL;
-+            char *tmpmask;
-+
-+            if (!(cpumaskStr = virBitmapFormat(cpumask)))
-+                goto cleanup;
-+
-+            for (tmpmask = cpumaskStr; tmpmask; tmpmask = next) {
-+                if ((next = strchr(tmpmask, ',')))
-+                    *(next++) = '\0';
-+                virBufferAddLit(&buf, ",cpus=");
-+                virBufferAdd(&buf, tmpmask, -1);
-+            }
-         }
- 
-         if (needBackend)
-@@ -7447,8 +7451,6 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-     ret = 0;
- 
-  cleanup:
--    VIR_FREE(cpumask);
--
-     if (nodeBackends) {
-         for (i = 0; i < ncells; i++)
-             virBufferFreeAndReset(&nodeBackends[i]);
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 35b536868a..be25790f12 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -5373,7 +5373,7 @@ qemuDomainDefValidateNuma(const virDomainDef *def,
-     }
- 
-     for (i = 0; i < ncells; i++) {
--        g_autofree char * cpumask = NULL;
-+        virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(def->numa, i);
- 
-         if (!hasMemoryCap &&
-             virDomainNumaGetNodeMemoryAccessMode(def->numa, i)) {
-@@ -5383,17 +5383,19 @@ qemuDomainDefValidateNuma(const virDomainDef *def,
-             return -1;
-         }
- 
--        if (!(cpumask = virBitmapFormat(virDomainNumaGetNodeCpumask(def->numa, i))))
--            return -1;
-+        if (cpumask) {
-+            g_autofree char * cpumaskStr = NULL;
-+            if (!(cpumaskStr = virBitmapFormat(cpumask)))
-+                return -1;
- 
--        if (strchr(cpumask, ',') &&
--            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA)) {
--            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
--                           _("disjoint NUMA cpu ranges are not supported "
--                             "with this QEMU"));
--            return -1;
-+            if (strchr(cpumaskStr, ',') &&
-+                !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA)) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                               _("disjoint NUMA cpu ranges are not supported "
-+                                 "with this QEMU"));
-+                return -1;
-+            }
-         }
--
-     }
- 
-     if (virDomainNumaNodesDistancesAreBeingSet(def->numa) &&
-diff --git a/tests/qemuxml2argvdata/numatune-no-vcpu.args b/tests/qemuxml2argvdata/numatune-no-vcpu.args
-new file mode 100644
-index 0000000000..a1f1ee044e
---- /dev/null
-+++ b/tests/qemuxml2argvdata/numatune-no-vcpu.args
-@@ -0,0 +1,33 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-name QEMUGuest \
-+-S \
-+-machine pc,accel=tcg,usb=off,dump-guest-core=off \
-+-m 12288 \
-+-realtime mlock=off \
-+-smp 12,sockets=12,cores=1,threads=1 \
-+-numa node,nodeid=0,cpus=0-3,mem=2048 \
-+-numa node,nodeid=1,cpus=4-7,mem=2048 \
-+-numa node,nodeid=2,cpus=8-11,mem=2048 \
-+-numa node,nodeid=3,mem=2048 \
-+-numa node,nodeid=4,mem=2048 \
-+-numa node,nodeid=5,mem=2048 \
-+-uuid c7a5fdb2-cdaf-9455-926a-d65c16db1809 \
-+-display none \
-+-no-user-config \
-+-nodefaults \
-+-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest/monitor.sock,\
-+server,nowait \
-+-mon chardev=charmonitor,id=monitor,mode=control \
-+-rtc base=utc \
-+-no-shutdown \
-+-usb \
-+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
-diff --git a/tests/qemuxml2argvdata/numatune-no-vcpu.xml b/tests/qemuxml2argvdata/numatune-no-vcpu.xml
-new file mode 100644
-index 0000000000..f25a07d7ed
---- /dev/null
-+++ b/tests/qemuxml2argvdata/numatune-no-vcpu.xml
-@@ -0,0 +1,42 @@
-+<domain type='qemu'>
-+  <name>QEMUGuest</name>
-+  <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
-+  <memory unit='KiB'>12582912</memory>
-+  <currentMemory unit='KiB'>12582912</currentMemory>
-+  <vcpu placement='static'>12</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+    <pae/>
-+  </features>
-+  <cpu>
-+    <numa>
-+      <cell id='0' cpus='0-3' memory='2097152' unit='KiB'/>
-+      <cell id='1' cpus='4-7' memory='2097152' unit='KiB'/>
-+      <cell id='2' cpus='8-11' memory='2097152' unit='KiB'/>
-+      <cell id='3' memory='2097152' unit='KiB'/>
-+      <cell id='4' memory='2097152' unit='KiB'/>
-+      <cell id='5' memory='2097152' unit='KiB'/>
-+    </numa>
-+  </cpu>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>restart</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='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 ff92af606d..49699e495d 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1812,6 +1812,7 @@ mymain(void)
-     DO_TEST_PARSE_ERROR("numatune-memnode-no-memory", NONE);
- 
-     DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
-+    DO_TEST("numatune-no-vcpu", NONE);
- 
-     DO_TEST("numatune-auto-nodeset-invalid", NONE);
-     DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
-diff --git a/tests/qemuxml2xmloutdata/numatune-no-vcpu.xml b/tests/qemuxml2xmloutdata/numatune-no-vcpu.xml
-new file mode 120000
-index 0000000000..f213032685
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/numatune-no-vcpu.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/numatune-no-vcpu.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 6c3f5c4a9e..1ddeba30f0 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1105,6 +1105,7 @@ mymain(void)
-     DO_TEST("numatune-memnode", QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_FILE);
-     DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
-     DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
-+    DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA);
- 
-     DO_TEST("bios-nvram", NONE);
-     DO_TEST("bios-nvram-os-interleave", NONE);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch b/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
index 763b437..df16973 100644
--- a/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
+++ b/SOURCES/libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
@@ -1,5 +1,5 @@
-From a04fcb5b463c90c47705ca0f28e40b73c00b6b72 Mon Sep 17 00:00:00 2001
-Message-Id: <a04fcb5b463c90c47705ca0f28e40b73c00b6b72@dist-git>
+From f0d0a6a9701522eee013682eb0ef566ef7cdac61 Mon Sep 17 00:00:00 2001
+Message-Id: <f0d0a6a9701522eee013682eb0ef566ef7cdac61@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
@@ -13,24 +13,35 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1227880
 
 Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
 ---
- src/qemu/qemu_domain.c | 4 ++++
- 1 file changed, 4 insertions(+)
+ src/qemu/qemu_domain.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
 
 diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index a6dde15bad..0edf316fff 100644
+index a8401bac30..40fe9985e6 100644
 --- a/src/qemu/qemu_domain.c
 +++ b/src/qemu/qemu_domain.c
-@@ -12631,6 +12631,10 @@ qemuDomainMachineNeedsFDC(const char *machine,
-         return false;
-     }
- 
-+    if (STRPREFIX(p, "rhel7.0.0") ||
-+        STRPREFIX(p, "rhel7.1.0"))
+@@ -8767,8 +8767,19 @@ qemuDomainHasBuiltinIDE(const virDomainDef *def)
+ bool
+ qemuDomainNeedsFDC(const virDomainDef *def)
+ {
+-    /* all supported Q35 machines need explicit FDC */
+-    return qemuDomainIsQ35(def);
++    const char *p;
++
++    /* all supported Q35 machines need explicit FDC except for old RHEL-7
++     * machine types */
++    if (!qemuDomainIsQ35(def))
 +        return false;
 +
-     return true;
++    if ((p = STRSKIP(def->os.machine, "pc-q35-")) &&
++        (STRPREFIX(p, "rhel7.0.0") ||
++         STRPREFIX(p, "rhel7.1.0")))
++        return false;
++
++    return true;
  }
  
+ 
 -- 
-2.25.0
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-Enable-usage-of-x-blockdev-reopen.patch b/SOURCES/libvirt-RHEL-Enable-usage-of-x-blockdev-reopen.patch
new file mode 100644
index 0000000..1505def
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-Enable-usage-of-x-blockdev-reopen.patch
@@ -0,0 +1,257 @@
+From b2529d5ff3a18a2b0022da75431cea5bf037819e Mon Sep 17 00:00:00 2001
+Message-Id: <b2529d5ff3a18a2b0022da75431cea5bf037819e@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Wed, 28 Jul 2021 17:37:21 +0200
+Subject: [PATCH] RHEL: Enable usage of x-blockdev-reopen
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+RHEL-only
+
+Introduce a new capability QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API
+based on the presence of '__com.redhat_rhel-av-8_2_0-api' feature for
+'x-blockdev-reopen' which states that reopen works for what libvirt
+is going to use it and wire up code to call the x- prefixed command.
+
+This implementation will become dormant once qemu starts supporting
+upstream-stable blockdev-reopen.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1799013
+
+Starting with libvirt-7.6, upstream has adapted to the new format of
+arguments so this patch was modified to support blockdev-reopen which
+takes an array of nodes to reopen.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1929765
+Message-Id: <3fcde2fc6add36d5276ae224caf18adc8bca7d48.1627486352.git.pkrempa@redhat.com>
+Reviewed-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_block.c        | 24 +++++++++++++++---------
+ src/qemu/qemu_block.h        |  3 ++-
+ src/qemu/qemu_capabilities.c | 13 +++++++++++++
+ src/qemu/qemu_capabilities.h |  3 +++
+ src/qemu/qemu_monitor.c      |  5 +++--
+ src/qemu/qemu_monitor.h      |  3 ++-
+ src/qemu/qemu_monitor_json.c | 12 +++++++++---
+ src/qemu/qemu_monitor_json.h |  3 ++-
+ tests/qemumonitorjsontest.c  |  2 +-
+ 9 files changed, 50 insertions(+), 18 deletions(-)
+
+diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
+index e5ff653a60..aa566d0097 100644
+--- a/src/qemu/qemu_block.c
++++ b/src/qemu/qemu_block.c
+@@ -3331,7 +3331,8 @@ qemuBlockBitmapsHandleCommitFinish(virStorageSource *topsrc,
+ 
+ int
+ qemuBlockReopenFormatMon(qemuMonitor *mon,
+-                         virStorageSource *src)
++                         virStorageSource *src,
++                         bool downstream)
+ {
+     g_autoptr(virJSONValue) reopenprops = NULL;
+     g_autoptr(virJSONValue) srcprops = NULL;
+@@ -3340,15 +3341,19 @@ qemuBlockReopenFormatMon(qemuMonitor *mon,
+     if (!(srcprops = qemuBlockStorageSourceGetBlockdevProps(src, src->backingStore)))
+         return -1;
+ 
+-    if (virJSONValueArrayAppend(reopenoptions, &srcprops) < 0)
+-        return -1;
++    if (downstream) {
++        reopenprops = g_steal_pointer(&srcprops);
++    } else {
++        if (virJSONValueArrayAppend(reopenoptions, &srcprops) < 0)
++            return -1;
+ 
+-    if (virJSONValueObjectAdd(&reopenprops,
+-                              "a:options", &reopenoptions,
+-                              NULL) < 0)
+-        return -1;
++        if (virJSONValueObjectAdd(&reopenprops,
++                                  "a:options", &reopenoptions,
++                                  NULL) < 0)
++            return -1;
++    }
+ 
+-    if (qemuMonitorBlockdevReopen(mon, &reopenprops) < 0)
++    if (qemuMonitorBlockdevReopen(mon, &reopenprops, downstream) < 0)
+         return -1;
+ 
+     return 0;
+@@ -3372,6 +3377,7 @@ qemuBlockReopenFormat(virDomainObj *vm,
+ {
+     qemuDomainObjPrivate *priv = vm->privateData;
+     virQEMUDriver *driver = priv->driver;
++    bool downstream = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API);
+     int rc;
+ 
+     /* If we are lacking the object here, qemu might have opened an image with
+@@ -3385,7 +3391,7 @@ qemuBlockReopenFormat(virDomainObj *vm,
+     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
+         return -1;
+ 
+-    rc = qemuBlockReopenFormatMon(priv->mon, src);
++    rc = qemuBlockReopenFormatMon(priv->mon, src, downstream);
+ 
+     qemuDomainObjExitMonitor(driver, vm);
+     if (rc < 0)
+diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
+index 184a549d5c..130cfcdefd 100644
+--- a/src/qemu/qemu_block.h
++++ b/src/qemu/qemu_block.h
+@@ -267,7 +267,8 @@ qemuBlockBitmapsHandleCommitFinish(virStorageSource *topsrc,
+ /* only for use in qemumonitorjsontest */
+ int
+ qemuBlockReopenFormatMon(qemuMonitor *mon,
+-                         virStorageSource *src);
++                         virStorageSource *src,
++                         bool downstream);
+ 
+ int
+ qemuBlockReopenReadWrite(virDomainObj *vm,
+diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
+index 5f1eb5014c..8ae80ef8d7 100644
+--- a/src/qemu/qemu_capabilities.c
++++ b/src/qemu/qemu_capabilities.c
+@@ -654,6 +654,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
+               "rbd-encryption", /* QEMU_CAPS_RBD_ENCRYPTION */
+               "sev-guest-kernel-hashes", /* QEMU_CAPS_SEV_GUEST_KERNEL_HASHES */
+               "sev-inject-launch-secret", /* QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET */
++
++              /* 420 */
++              "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api", /* QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API */
+     );
+ 
+ 
+@@ -1540,6 +1543,7 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVhostUserFS[] =
+ /* see documentation for virQEMUQAPISchemaPathGet for the query format */
+ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
+     { "block-commit/arg-type/*top",  QEMU_CAPS_ACTIVE_COMMIT },
++    { "x-blockdev-reopen/$__com.redhat_rhel-av-8_2_0-api", QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API },
+     { "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
+     { "blockdev-add/arg-type/+gluster/debug", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
+     { "blockdev-add/arg-type/+vxhs", QEMU_CAPS_VXHS},
+@@ -5235,6 +5239,15 @@ virQEMUCapsInitProcessCaps(virQEMUCaps *qemuCaps)
+         qemuCaps->arch == VIR_ARCH_MIPS)
+         virQEMUCapsSet(qemuCaps, QEMU_CAPS_SCSI_NCR53C90);
+ 
++    /* RHEL-only:
++     * - if upstream blockdev-reopen is enabled, clear the downstream flag
++     * - if the downstream flag is present but not the upstream, assert the upstream flag too
++     */
++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
++        virQEMUCapsClear(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API);
++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API))
++        virQEMUCapsSet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN);
++
+     virQEMUCapsInitProcessCapsInterlock(qemuCaps);
+ }
+ 
+diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
+index e3a3ab4445..cde6c18b4c 100644
+--- a/src/qemu/qemu_capabilities.h
++++ b/src/qemu/qemu_capabilities.h
+@@ -634,6 +634,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
+     QEMU_CAPS_SEV_GUEST_KERNEL_HASHES, /* sev-guest.kernel-hashes= */
+     QEMU_CAPS_SEV_INJECT_LAUNCH_SECRET, /* 'sev-inject-launch-secret' qmp command present */
+ 
++    /* 420 */
++    QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API, /* downstream support for blockdev reopen in rhel-av-8.2.0 */
++
+     QEMU_CAPS_LAST /* this must always be the last item */
+ } virQEMUCapsFlags;
+ 
+diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
+index babf9e62fb..23638d3fe8 100644
+--- a/src/qemu/qemu_monitor.c
++++ b/src/qemu/qemu_monitor.c
+@@ -4247,14 +4247,15 @@ qemuMonitorBlockdevAdd(qemuMonitor *mon,
+ 
+ int
+ qemuMonitorBlockdevReopen(qemuMonitor *mon,
+-                          virJSONValue **props)
++                          virJSONValue **props,
++                          bool downstream)
+ {
+     VIR_DEBUG("props=%p (node-name=%s)", *props,
+               NULLSTR(virJSONValueObjectGetString(*props, "node-name")));
+ 
+     QEMU_CHECK_MONITOR(mon);
+ 
+-    return qemuMonitorJSONBlockdevReopen(mon, props);
++    return qemuMonitorJSONBlockdevReopen(mon, props, downstream);
+ }
+ 
+ 
+diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
+index 9b2e4e1421..d2037914be 100644
+--- a/src/qemu/qemu_monitor.h
++++ b/src/qemu/qemu_monitor.h
+@@ -1426,7 +1426,8 @@ int qemuMonitorBlockdevAdd(qemuMonitor *mon,
+                            virJSONValue **props);
+ 
+ int qemuMonitorBlockdevReopen(qemuMonitor *mon,
+-                              virJSONValue **props);
++                              virJSONValue **props,
++                              bool downstream);
+ 
+ int qemuMonitorBlockdevDel(qemuMonitor *mon,
+                            const char *nodename);
+diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
+index b0b513683b..34a46b9b41 100644
+--- a/src/qemu/qemu_monitor_json.c
++++ b/src/qemu/qemu_monitor_json.c
+@@ -8051,13 +8051,19 @@ qemuMonitorJSONBlockdevAdd(qemuMonitor *mon,
+ 
+ int
+ qemuMonitorJSONBlockdevReopen(qemuMonitor *mon,
+-                              virJSONValue **props)
++                              virJSONValue **props,
++                              bool downstream)
+ {
+     g_autoptr(virJSONValue) cmd = NULL;
+     g_autoptr(virJSONValue) reply = NULL;
+ 
+-    if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", props)))
+-        return -1;
++    if (downstream) {
++        if (!(cmd = qemuMonitorJSONMakeCommandInternal("x-blockdev-reopen", props)))
++            return -1;
++    } else {
++        if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", props)))
++            return -1;
++    }
+ 
+     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+         return -1;
+diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
+index 64d9ebdaa3..15ce03d7af 100644
+--- a/src/qemu/qemu_monitor_json.h
++++ b/src/qemu/qemu_monitor_json.h
+@@ -748,7 +748,8 @@ qemuMonitorJSONBlockdevAdd(qemuMonitor *mon,
+ 
+ int
+ qemuMonitorJSONBlockdevReopen(qemuMonitor *mon,
+-                              virJSONValue **props)
++                              virJSONValue **props,
++                              bool downstream)
+     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+ 
+ int
+diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
+index 48e2a457ab..8624a547b5 100644
+--- a/tests/qemumonitorjsontest.c
++++ b/tests/qemumonitorjsontest.c
+@@ -2780,7 +2780,7 @@ testQemuMonitorJSONBlockdevReopen(const void *opaque)
+     if (qemuMonitorTestAddItem(test, "blockdev-reopen", "{\"return\":{}}") < 0)
+         return -1;
+ 
+-    if (qemuBlockReopenFormatMon(qemuMonitorTestGetMonitor(test), src) < 0)
++    if (qemuBlockReopenFormatMon(qemuMonitorTestGetMonitor(test), src, false) < 0)
+         return -1;
+ 
+     return 0;
+-- 
+2.34.1
+
diff --git a/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch b/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
index 345c0b2..4fd27b2 100644
--- a/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
+++ b/SOURCES/libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
@@ -1,5 +1,5 @@
-From 3e50b013277c7fa05987ceba440f8c4583b6c634 Mon Sep 17 00:00:00 2001
-Message-Id: <3e50b013277c7fa05987ceba440f8c4583b6c634@dist-git>
+From 29eb7b77805cf5fb756c964cdbe7fb7fb2c01f5f Mon Sep 17 00:00:00 2001
+Message-Id: <29eb7b77805cf5fb756c964cdbe7fb7fb2c01f5f@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
@@ -26,10 +26,10 @@ Reviewed-by: Andrea Bolognani <abologna@redhat.com>
  1 file changed, 5 insertions(+)
 
 diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
-index 7f14340f49..256976cce1 100644
+index a07c00a0e9..35f41daef2 100644
 --- a/src/util/virhostcpu.c
 +++ b/src/util/virhostcpu.c
-@@ -1169,6 +1169,11 @@ virHostCPUGetKVMMaxVCPUs(void)
+@@ -1166,6 +1166,11 @@ virHostCPUGetKVMMaxVCPUs(void)
          return -1;
      }
  
@@ -42,5 +42,5 @@ index 7f14340f49..256976cce1 100644
      /* 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.25.0
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch b/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch
index 12d8958..77ba3f8 100644
--- a/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch
+++ b/SOURCES/libvirt-RHEL-Hack-around-changed-Broadwell-Haswell-CPUs.patch
@@ -1,5 +1,5 @@
-From 0dd015e1aff1a56a4584824d1a97c9eacabf7f03 Mon Sep 17 00:00:00 2001
-Message-Id: <0dd015e1aff1a56a4584824d1a97c9eacabf7f03@dist-git>
+From 1d93a3944a200b7c955800faa598e0e11da098f8 Mon Sep 17 00:00:00 2001
+Message-Id: <1d93a3944a200b7c955800faa598e0e11da098f8@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
@@ -18,34 +18,35 @@ https://bugzilla.redhat.com/show_bug.cgi?id=1199446
 
 Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
 ---
- src/qemu/qemu_command.c                       | 21 +++++++++++++++++++
+ src/qemu/qemu_command.c                       | 22 +++++++++++++++++++
  tests/qemuxml2argvdata/cpu-Haswell.args       |  2 +-
  .../qemuxml2argvdata/cpu-host-model-cmt.args  |  2 +-
- .../cpu-translation.x86_64-4.0.0.args         |  4 ++--
- .../cpu-translation.x86_64-latest.args        |  4 ++--
- tests/qemuxml2argvdata/cpu-tsc-frequency.args |  4 ++--
+ .../cpu-translation.x86_64-4.0.0.args         |  2 +-
+ .../cpu-translation.x86_64-latest.args        |  2 +-
+ 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 +-
- 9 files changed, 32 insertions(+), 11 deletions(-)
+ 9 files changed, 30 insertions(+), 8 deletions(-)
 
 diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 904d2beab5..e10cc7fc74 100644
+index d822533ccb..6b4647a711 100644
 --- a/src/qemu/qemu_command.c
 +++ b/src/qemu/qemu_command.c
-@@ -6469,6 +6469,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+@@ -6521,6 +6521,8 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
  {
      size_t i;
-     virCPUDefPtr cpu = def->cpu;
+     virCPUDef *cpu = def->cpu;
 +    bool hle = false;
 +    bool rtm = false;
  
      switch ((virCPUMode) cpu->mode) {
      case VIR_CPU_MODE_HOST_PASSTHROUGH:
-@@ -6524,6 +6526,11 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
-         virBufferAsprintf(buf, ",vendor=%s", cpu->vendor_id);
- 
+@@ -6587,6 +6589,12 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
      for (i = 0; i < cpu->nfeatures; i++) {
+         const char *featname =
+             virQEMUCapsCPUFeatureToQEMU(qemuCaps, cpu->features[i].name);
++
 +        if (STREQ("rtm", cpu->features[i].name))
 +            rtm = true;
 +        if (STREQ("hle", cpu->features[i].name))
@@ -54,7 +55,7 @@ index 904d2beab5..e10cc7fc74 100644
          switch ((virCPUFeaturePolicy) cpu->features[i].policy) {
          case VIR_CPU_FEATURE_FORCE:
          case VIR_CPU_FEATURE_REQUIRE:
-@@ -6541,6 +6548,20 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
+@@ -6604,6 +6612,20 @@ qemuBuildCpuModelArgStr(virQEMUDriver *driver,
          }
      }
  
@@ -67,124 +68,118 @@ index 904d2beab5..e10cc7fc74 100644
 +    if (STREQ_NULLABLE(cpu->model, "Broadwell") ||
 +        STREQ_NULLABLE(cpu->model, "Haswell")) {
 +        if (!rtm)
-+            qemuBuildCpuFeature(qemuCaps, buf, "rtm", true);
++            virBufferAddLit(buf, ",rtm=on");
 +        if (!hle)
-+            qemuBuildCpuFeature(qemuCaps, buf, "hle", true);
++            virBufferAddLit(buf, ",hle=on");
 +    }
 +
      return 0;
  }
  
 diff --git a/tests/qemuxml2argvdata/cpu-Haswell.args b/tests/qemuxml2argvdata/cpu-Haswell.args
-index a33b16f7ce..d35de5ea58 100644
+index b57fdfddc5..965274c1f0 100644
 --- a/tests/qemuxml2argvdata/cpu-Haswell.args
 +++ b/tests/qemuxml2argvdata/cpu-Haswell.args
-@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
- -name QEMUGuest1 \
- -S \
- -machine pc,accel=kvm,usb=off,dump-guest-core=off \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+ -machine pc,usb=off,dump-guest-core=off \
+ -accel kvm \
 --cpu Haswell \
-+-cpu Haswell,+rtm,+hle \
++-cpu Haswell,rtm=on,hle=on \
  -m 214 \
  -realtime mlock=off \
  -smp 6,sockets=6,cores=1,threads=1 \
 diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
-index 42f969fd62..c8795acb3e 100644
+index 0de04e877d..602f70de86 100644
 --- a/tests/qemuxml2argvdata/cpu-host-model-cmt.args
 +++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.args
-@@ -12,7 +12,7 @@ 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,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm \
-++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+rtm,+hle \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+ -machine pc,usb=off,dump-guest-core=off \
+ -accel tcg \
+--cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on \
++-cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on,rtm=on,hle=on \
  -m 214 \
  -realtime mlock=off \
  -smp 6,sockets=6,cores=1,threads=1 \
 diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
-index f8e19fca24..08c672fd2c 100644
+index 09141106d5..ace08d5d76 100644
 --- a/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
 +++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-4.0.0.args
-@@ -14,8 +14,8 @@ QEMU_AUDIO_DRV=none \
- file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc-i440fx-4.0,accel=tcg,usb=off,dump-guest-core=off \
- -cpu Haswell,pclmuldq=on,ds_cpl=on,tsc_adjust=on,fxsr_opt=on,lahf_lm=on,\
--cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,kvm_pv_eoi=on,\
--kvm_pv_unhalt=on \
-+cmp_legacy=on,nodeid_msr=on,perfctr_core=on,perfctr_nb=on,rtm=on,hle=on,\
-+kvm_pv_eoi=on,kvm_pv_unhalt=on \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+ -machine pc-i440fx-4.0,usb=off,dump-guest-core=off \
+ -accel tcg \
+--cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
++-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
  -m 214 \
  -overcommit mem-lock=off \
  -smp 1,sockets=1,cores=1,threads=1 \
 diff --git a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
-index 9322b826f4..1dbfc9553b 100644
+index 2dab572a6b..a9f7c4b910 100644
 --- a/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
 +++ b/tests/qemuxml2argvdata/cpu-translation.x86_64-latest.args
-@@ -14,8 +14,8 @@ QEMU_AUDIO_DRV=none \
- file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off \
- -cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,\
--cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,\
--kvm-pv-unhalt=on \
-+cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,\
-+kvm-pv-eoi=on,kvm-pv-unhalt=on \
+@@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
+ -machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram \
+ -accel tcg \
+--cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
++-cpu Haswell,pclmulqdq=on,ds-cpl=on,tsc-adjust=on,fxsr-opt=on,lahf-lm=on,cmp-legacy=on,nodeid-msr=on,perfctr-core=on,perfctr-nb=on,rtm=on,hle=on,kvm-pv-eoi=on,kvm-pv-unhalt=on \
  -m 214 \
+ -object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
  -overcommit mem-lock=off \
- -smp 1,sockets=1,cores=1,threads=1 \
 diff --git a/tests/qemuxml2argvdata/cpu-tsc-frequency.args b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
-index 55b72b4404..45a777d468 100644
+index 4a032f5d85..48fb75abcc 100644
 --- a/tests/qemuxml2argvdata/cpu-tsc-frequency.args
 +++ b/tests/qemuxml2argvdata/cpu-tsc-frequency.args
-@@ -12,8 +12,8 @@ QEMU_AUDIO_DRV=none \
- -S \
- -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,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,\
--tsc-frequency=3504000000 \
-++smx,+est,+tm2,+xtpr,+pdcm,+f16c,+rdrand,+pdpe1gb,+abm,+lahf_lm,+invtsc,+rtm,\
-++hle,tsc-frequency=3504000000 \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
+ -machine pc,usb=off,dump-guest-core=off \
+ -accel kvm \
+--cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on,invtsc=on,tsc-frequency=4567890000 \
++-cpu Haswell,vme=on,ds=on,acpi=on,ss=on,ht=on,tm=on,pbe=on,dtes64=on,monitor=on,ds-cpl=on,vmx=on,smx=on,est=on,tm2=on,xtpr=on,pdcm=on,f16c=on,rdrand=on,pdpe1gb=on,abm=on,lahf-lm=on,invtsc=on,rtm=on,hle=on,tsc-frequency=4567890000 \
  -m 214 \
  -realtime mlock=off \
  -smp 1,sockets=1,cores=1,threads=1 \
 diff --git a/tests/qemuxml2argvdata/q35-acpi-nouefi.args b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
-index 09e06c96ea..aed56fb1fc 100644
+index 3faee48c77..a1f742712d 100644
 --- a/tests/qemuxml2argvdata/q35-acpi-nouefi.args
 +++ b/tests/qemuxml2argvdata/q35-acpi-nouefi.args
-@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
- -name guest \
- -S \
- -machine q35,accel=tcg,usb=off,dump-guest-core=off \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
+ -machine q35,usb=off,dump-guest-core=off \
+ -accel tcg \
 --cpu Haswell \
-+-cpu Haswell,+rtm,+hle \
++-cpu Haswell,rtm=on,hle=on \
  -m 1024 \
  -realtime mlock=off \
  -smp 1,sockets=1,cores=1,threads=1 \
 diff --git a/tests/qemuxml2argvdata/q35-acpi-uefi.args b/tests/qemuxml2argvdata/q35-acpi-uefi.args
-index d00fe5bc1d..1f4bfe7f87 100644
+index 60da1e282a..620056223a 100644
 --- a/tests/qemuxml2argvdata/q35-acpi-uefi.args
 +++ b/tests/qemuxml2argvdata/q35-acpi-uefi.args
-@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
- -name guest \
- -S \
- -machine q35,accel=tcg,usb=off,dump-guest-core=off \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
+ -machine q35,usb=off,dump-guest-core=off \
+ -accel tcg \
 --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,\
++-cpu Haswell,rtm=on,hle=on \
+ -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,unit=1 \
+ -m 1024 \
 diff --git a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
-index de34dff1cf..ccea7f91f9 100644
+index 14e5bbc22a..ea66536c2a 100644
 --- a/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
 +++ b/tests/qemuxml2argvdata/q35-noacpi-nouefi.args
-@@ -11,7 +11,7 @@ QEMU_AUDIO_DRV=none \
- -name guest \
- -S \
- -machine q35,accel=tcg,usb=off,dump-guest-core=off \
+@@ -13,7 +13,7 @@ QEMU_AUDIO_DRV=none \
+ -object secret,id=masterKey0,format=raw,file=/tmp/lib/domain--1-guest/master-key.aes \
+ -machine q35,usb=off,dump-guest-core=off \
+ -accel tcg \
 --cpu Haswell \
-+-cpu Haswell,+rtm,+hle \
++-cpu Haswell,rtm=on,hle=on \
  -m 1024 \
  -realtime mlock=off \
  -smp 1,sockets=1,cores=1,threads=1 \
 -- 
-2.25.0
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-Remove-glib-2.64.0-workaround-for-GSource-race.patch b/SOURCES/libvirt-RHEL-Remove-glib-2.64.0-workaround-for-GSource-race.patch
new file mode 100644
index 0000000..5808523
--- /dev/null
+++ b/SOURCES/libvirt-RHEL-Remove-glib-2.64.0-workaround-for-GSource-race.patch
@@ -0,0 +1,89 @@
+From b550b671bace6d979a0763a837ce97ddf72e8fc8 Mon Sep 17 00:00:00 2001
+Message-Id: <b550b671bace6d979a0763a837ce97ddf72e8fc8@dist-git>
+From: Martin Kletzander <mkletzan@redhat.com>
+Date: Fri, 28 Jan 2022 20:33:12 +0100
+Subject: [PATCH] RHEL: Remove <glib-2.64.0 workaround for GSource race
+
+https://bugzilla.redhat.com/show_bug.cgi?id=2045879
+
+This is to accommodate for RHEL 8 downstream glib being fixed with a backport in
+version 2.56.4-12 (Bug 1948988).  Another reason for that is that our workaround
+does not play nice with a fixed glib, leading to libvirt not properly
+dereferencing the monitor socket, eventually leading to EMFILE: Too many open
+files.
+
+RHEL-only
+
+Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
+Reviewed-by: Peter Krempa <pkrempa@redhat.com>
+---
+ src/util/glibcompat.c | 46 ++++++++-----------------------------------
+ 1 file changed, 8 insertions(+), 38 deletions(-)
+
+diff --git a/src/util/glibcompat.c b/src/util/glibcompat.c
+index eb6dcc0111..bf890f10d2 100644
+--- a/src/util/glibcompat.c
++++ b/src/util/glibcompat.c
+@@ -212,51 +212,21 @@ vir_g_strdup_vprintf(const char *msg, va_list args)
+     return ret;
+ }
+ 
+-
+ /*
+- * If the last reference to a GSource is released in a non-main
+- * thread we're exposed to a race condition that causes a
+- * crash:
+- *
+- *    https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1358
++ * This is a leftover of a hack that works around glib older than 2.64.0, but
++ * the fix in glib as backported in RHEL-8 to glib2-2.56.4-12 in BZ 1948988:
+  *
+- * Thus we're using an idle func to release our ref...
++ *   https://bugzilla.redhat.com/show_bug.cgi?id=1948988
+  *
+- * ...but this imposes a significant performance penalty on
+- * I/O intensive workloads which are sensitive to the iterations
+- * of the event loop, so avoid the workaround if we know we have
+- * new enough glib.
++ * and our workaround coupled with that glib fix started causing leaks, which
++ * surfaced with us not unreferencing the qemu monitor socket in BZ 2045879:
+  *
+- * The function below is used from a header file definition.
++ *   https://bugzilla.redhat.com/show_bug.cgi?id=2045879
+  *
+- * Drop when min glib >= 2.64.0
++ * Keeping this wrapper makes it easier to follow with other backports without
++ * conflicts in callers due to the function name change.
+  */
+-#if GLIB_CHECK_VERSION(2, 64, 0)
+ void vir_g_source_unref(GSource *src, GMainContext *ctx G_GNUC_UNUSED)
+ {
+     g_source_unref(src);
+ }
+-#else
+-
+-static gboolean
+-virEventGLibSourceUnrefIdle(gpointer data)
+-{
+-    GSource *src = data;
+-
+-    g_source_unref(src);
+-
+-    return FALSE;
+-}
+-
+-void vir_g_source_unref(GSource *src, GMainContext *ctx)
+-{
+-    GSource *idle = g_idle_source_new();
+-
+-    g_source_set_callback(idle, virEventGLibSourceUnrefIdle, src, NULL);
+-
+-    g_source_attach(idle, ctx);
+-
+-    g_source_unref(idle);
+-}
+-
+-#endif
+-- 
+2.35.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
index 95cd351..0dddc76 100644
--- 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
@@ -1,5 +1,5 @@
-From fce502cf5233d800479c2efcf7721ab895db8998 Mon Sep 17 00:00:00 2001
-Message-Id: <fce502cf5233d800479c2efcf7721ab895db8998@dist-git>
+From d6956a1aaa8757fab60132c3ee46c2bb199a78a8 Mon Sep 17 00:00:00 2001
+Message-Id: <d6956a1aaa8757fab60132c3ee46c2bb199a78a8@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
@@ -15,27 +15,34 @@ 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: Ján Tomko <jtomko@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 | 15 ++++++++-------
- 1 file changed, 8 insertions(+), 7 deletions(-)
+ src/qemu/qemu_conf.c | 25 ++++++++++++++++---------
+ 1 file changed, 16 insertions(+), 9 deletions(-)
 
 diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index b62dd1df52..ce7869e6be 100644
+index 6077457ff4..ba85fc6e22 100644
 --- a/src/qemu/qemu_conf.c
 +++ b/src/qemu/qemu_conf.c
-@@ -1810,6 +1810,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-     virDomainDiskDefPtr disk = NULL;
-     virDomainHostdevDefPtr hostdev = NULL;
+@@ -1841,8 +1841,9 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
+     virDomainDiskDef *disk = NULL;
+     virDomainHostdevDef *hostdev = NULL;
      g_autofree char *sysfs_path = NULL;
 +    g_autofree char *hostdev_path = NULL;
      const char *path = NULL;
-     int val = -1;
+-    int val = -1;
++    int val = 0;
  
-@@ -1830,14 +1831,10 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-         if (!qemuIsSharedHostdev(hostdev))
+     /* "sgio" is only valid for block disk; cdrom
+      * and floopy disk can have empty source.
+@@ -1858,17 +1859,14 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
+     } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
+         hostdev = dev->data.hostdev;
+ 
+-        if (!qemuIsSharedHostdev(hostdev))
++        if (hostdev->source.subsys.u.scsi.protocol ==
++            VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
              return 0;
  
 -        if (hostdev->source.subsys.u.scsi.sgio) {
@@ -51,19 +58,24 @@ index b62dd1df52..ce7869e6be 100644
      } else {
          return 0;
      }
-@@ -1846,7 +1843,11 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+@@ -1877,7 +1875,16 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
          return -1;
  
      /* 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);
++    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) &&
++            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.25.0
+2.34.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
index 5f0af94..b6ad4ea 100644
--- 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
@@ -1,5 +1,5 @@
-From 5a192657ad4e08fc773fef90c6b07df3620fa1c2 Mon Sep 17 00:00:00 2001
-Message-Id: <5a192657ad4e08fc773fef90c6b07df3620fa1c2@dist-git>
+From f562b4c83d342002291f6bd7c5776eaecbd3147f Mon Sep 17 00:00:00 2001
+Message-Id: <f562b4c83d342002291f6bd7c5776eaecbd3147f@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
@@ -19,23 +19,22 @@ 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: Ján Tomko <jtomko@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 | 20 ++++++++++++++++++--
  1 file changed, 18 insertions(+), 2 deletions(-)
 
 diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index ce7869e6be..2a84972fd9 100644
+index ba85fc6e22..28c334761b 100644
 --- a/src/qemu/qemu_conf.c
 +++ b/src/qemu/qemu_conf.c
-@@ -1717,13 +1717,29 @@ qemuSharedHostdevAddRemoveInternal(virQEMUDriverPtr driver,
+@@ -1749,13 +1749,29 @@ qemuSharedHostdevAddRemoveInternal(virQEMUDriver *driver,
  {
      g_autofree char *dev_path = NULL;
      g_autofree char *key = NULL;
-+    virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
-+    virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
++    virDomainHostdevSubsysSCSI *scsisrc = &hostdev->source.subsys.u.scsi;
++    virDomainHostdevSubsysSCSIHost *scsihostsrc = &scsisrc->u.host;
      int ret = -1;
  
      if (!qemuIsSharedHostdev(hostdev))
@@ -63,5 +62,5 @@ index ce7869e6be..2a84972fd9 100644
  
      qemuDriverLock(driver);
 -- 
-2.25.0
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch b/SOURCES/libvirt-RHEL-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch
deleted file mode 100644
index 2b30707..0000000
--- a/SOURCES/libvirt-RHEL-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From e79d54ff8e760ac1a200a37fb05cc9aa758c48d3 Mon Sep 17 00:00:00 2001
-Message-Id: <e79d54ff8e760ac1a200a37fb05cc9aa758c48d3@dist-git>
-From: John Ferlan <jferlan@redhat.com>
-Date: Mon, 17 Dec 2018 20:42:33 -0500
-Subject: [PATCH] RHEL: 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 faabc4d49f..590052b035 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1844,9 +1844,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)))
-             return -1;
- 
-@@ -1863,7 +1860,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.25.0
-
diff --git a/SOURCES/libvirt-RHEL-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch b/SOURCES/libvirt-RHEL-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch
deleted file mode 100644
index 850b5ab..0000000
--- a/SOURCES/libvirt-RHEL-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From fa46b5b4d5bb732462d0d5484cc010aa652d821b Mon Sep 17 00:00:00 2001
-Message-Id: <fa46b5b4d5bb732462d0d5484cc010aa652d821b@dist-git>
-From: John Ferlan <jferlan@redhat.com>
-Date: Mon, 17 Dec 2018 20:42:32 -0500
-Subject: [PATCH] RHEL: 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 2a84972fd9..faabc4d49f 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1828,7 +1828,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-     g_autofree char *sysfs_path = NULL;
-     g_autofree char *hostdev_path = NULL;
-     const char *path = NULL;
--    int val = -1;
-+    int val = 0;
- 
-     /* "sgio" is only valid for block disk; cdrom
-      * and floopy disk can have empty source.
-@@ -1859,11 +1859,14 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-         return -1;
- 
-     /* 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.25.0
-
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
deleted file mode 100644
index e0bc6a1..0000000
--- a/SOURCES/libvirt-RHEL-qemu-Fix-crash-trying-to-use-iSCSI-hostdev.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 163740bff28c6f1a82663bc652f2cd5df39e4276 Mon Sep 17 00:00:00 2001
-Message-Id: <163740bff28c6f1a82663bc652f2cd5df39e4276@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 0674292fab..3d2f0e7bbb 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1844,6 +1844,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)))
-             return -1;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-RHEL-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch b/SOURCES/libvirt-RHEL-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch
deleted file mode 100644
index b4d84ed..0000000
--- a/SOURCES/libvirt-RHEL-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From f6a05ac3cb33c473de8ed49b53d22910fc0140df Mon Sep 17 00:00:00 2001
-Message-Id: <f6a05ac3cb33c473de8ed49b53d22910fc0140df@dist-git>
-From: John Ferlan <jferlan@redhat.com>
-Date: Wed, 16 Jan 2019 15:54:31 -0500
-Subject: [PATCH] RHEL: 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 590052b035..0674292fab 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1856,9 +1856,9 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-         return -1;
- 
-     /* 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.25.0
-
diff --git a/SOURCES/libvirt-RHEL-qemuCheckUnprivSGIO-use-sysfs_path-to-get-unpriv_sgio.patch b/SOURCES/libvirt-RHEL-qemuCheckUnprivSGIO-use-sysfs_path-to-get-unpriv_sgio.patch
deleted file mode 100644
index d9855b0..0000000
--- a/SOURCES/libvirt-RHEL-qemuCheckUnprivSGIO-use-sysfs_path-to-get-unpriv_sgio.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From ef5a82d50464478a302cb59804d03e4a3dada83e Mon Sep 17 00:00:00 2001
-Message-Id: <ef5a82d50464478a302cb59804d03e4a3dada83e@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 6 Mar 2020 15:52:26 +0100
-Subject: [PATCH] RHEL: qemuCheckUnprivSGIO: use @sysfs_path to get unpriv_sgio
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Downstream commit 65f4ff0e2c9a968b7ec65c8d751d4055cc212628
-  RHEL: qemuSetUnprivSGIO: Actually use calculated
-    @sysfs_path to set unpriv_sgio
-removed the device_path -> sysfs_path conversion from
-both virGetDeviceUnprivSGIO and virSetDeviceUnprivSGIO,
-but only adjusted one of the callers.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1808400
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200306145226.1610708-7-abologna@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_conf.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index b61d7e59fa..6a22d78ac6 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1430,7 +1430,7 @@ qemuCheckUnprivSGIO(virHashTablePtr sharedDevices,
-     if (!(virHashLookup(sharedDevices, key)))
-         return 0;
- 
--    if (virGetDeviceUnprivSGIO(device_path, &val) < 0)
-+    if (virGetDeviceUnprivSGIO(sysfs_path, &val) < 0)
-         return -1;
- 
-     /* Error message on failure needs to be handled in caller
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-RHEL-qemuSetUnprivSGIO-Actually-use-calculated-sysfs_path-to-set-unpriv_sgio.patch b/SOURCES/libvirt-RHEL-qemuSetUnprivSGIO-Actually-use-calculated-sysfs_path-to-set-unpriv_sgio.patch
deleted file mode 100644
index b4ed1ae..0000000
--- a/SOURCES/libvirt-RHEL-qemuSetUnprivSGIO-Actually-use-calculated-sysfs_path-to-set-unpriv_sgio.patch
+++ /dev/null
@@ -1,170 +0,0 @@
-From 717423e7a452b0715e95b492b15dc08983677d12 Mon Sep 17 00:00:00 2001
-Message-Id: <717423e7a452b0715e95b492b15dc08983677d12@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 6 Mar 2020 15:52:25 +0100
-Subject: [PATCH] RHEL: qemuSetUnprivSGIO: Actually use calculated @sysfs_path
- to set unpriv_sgio
-
-In previous commits I've attempted to make qemuSetUnprivSGIO()
-construct a generic enough path for SCSI devices to set
-unpriv_sgio. However, virSetDeviceUnprivSGIO() does not care
-about that - it constructs the path on it's own again. This is
-suboptimal in either case - we already have the path constructed.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1808390
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200306145226.1610708-6-abologna@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_conf.c |  8 +++-----
- src/util/virutil.c   | 24 ++++++------------------
- src/util/virutil.h   |  2 --
- 3 files changed, 9 insertions(+), 25 deletions(-)
-
-diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index 6d6feb97cd..b61d7e59fa 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1430,7 +1430,7 @@ qemuCheckUnprivSGIO(virHashTablePtr sharedDevices,
-     if (!(virHashLookup(sharedDevices, key)))
-         return 0;
- 
--    if (virGetDeviceUnprivSGIO(device_path, NULL, &val) < 0)
-+    if (virGetDeviceUnprivSGIO(device_path, &val) < 0)
-         return -1;
- 
-     /* Error message on failure needs to be handled in caller
-@@ -1789,7 +1789,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-     virDomainDiskDefPtr disk = NULL;
-     virDomainHostdevDefPtr hostdev = NULL;
-     g_autofree char *sysfs_path = NULL;
--    const char *path = NULL;
-     int val = 0;
- 
-     /* "sgio" is only valid for block disk; cdrom
-@@ -1797,13 +1796,12 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-      */
-     if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
-         disk = dev->data.disk;
-+        const char *path = virDomainDiskGetSource(disk);
- 
-         if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
-             !virStorageSourceIsBlockLocal(disk->src))
-             return 0;
- 
--        path = virDomainDiskGetSource(disk);
--
-         if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
-             return -1;
- 
-@@ -1843,7 +1841,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-      * virSetDeviceUnprivSGIO, to report an error for unsupported unpriv_sgio.
-      */
-     if ((virFileExists(sysfs_path) || val == 1) &&
--        virSetDeviceUnprivSGIO(path, NULL, val) < 0)
-+        virSetDeviceUnprivSGIO(sysfs_path, val) < 0)
-         return -1;
- 
-     return 0;
-diff --git a/src/util/virutil.c b/src/util/virutil.c
-index f142951acf..4198473fce 100644
---- a/src/util/virutil.c
-+++ b/src/util/virutil.c
-@@ -1421,18 +1421,13 @@ virGetUnprivSGIOSysfsPath(const char *path,
- 
- int
- virSetDeviceUnprivSGIO(const char *path,
--                       const char *sysfs_dir,
-                        int unpriv_sgio)
- {
--    char *sysfs_path = NULL;
-     char *val = NULL;
-     int ret = -1;
-     int rc;
- 
--    if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
--        return -1;
--
--    if (!virFileExists(sysfs_path)) {
-+    if (!virFileExists(path)) {
-         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                        _("unpriv_sgio is not supported by this kernel"));
-         goto cleanup;
-@@ -1440,38 +1435,32 @@ virSetDeviceUnprivSGIO(const char *path,
- 
-     val = g_strdup_printf("%d", unpriv_sgio);
- 
--    if ((rc = virFileWriteStr(sysfs_path, val, 0)) < 0) {
--        virReportSystemError(-rc, _("failed to set %s"), sysfs_path);
-+    if ((rc = virFileWriteStr(path, val, 0)) < 0) {
-+        virReportSystemError(-rc, _("failed to set %s"), path);
-         goto cleanup;
-     }
- 
-     ret = 0;
-  cleanup:
--    VIR_FREE(sysfs_path);
-     VIR_FREE(val);
-     return ret;
- }
- 
- int
- virGetDeviceUnprivSGIO(const char *path,
--                       const char *sysfs_dir,
-                        int *unpriv_sgio)
- {
--    char *sysfs_path = NULL;
-     char *buf = NULL;
-     char *tmp = NULL;
-     int ret = -1;
- 
--    if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
--        return -1;
--
--    if (!virFileExists(sysfs_path)) {
-+    if (!virFileExists(path)) {
-         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                        _("unpriv_sgio is not supported by this kernel"));
-         goto cleanup;
-     }
- 
--    if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
-+    if (virFileReadAll(path, 1024, &buf) < 0)
-         goto cleanup;
- 
-     if ((tmp = strchr(buf, '\n')))
-@@ -1479,13 +1468,12 @@ virGetDeviceUnprivSGIO(const char *path,
- 
-     if (virStrToLong_i(buf, NULL, 10, unpriv_sgio) < 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("failed to parse value of %s"), sysfs_path);
-+                       _("failed to parse value of %s"), path);
-         goto cleanup;
-     }
- 
-     ret = 0;
-  cleanup:
--    VIR_FREE(sysfs_path);
-     VIR_FREE(buf);
-     return ret;
- }
-diff --git a/src/util/virutil.h b/src/util/virutil.h
-index 1a6ae1787a..a2530e21b5 100644
---- a/src/util/virutil.h
-+++ b/src/util/virutil.h
-@@ -124,10 +124,8 @@ int virGetDeviceID(const char *path,
-                    int *maj,
-                    int *min);
- int virSetDeviceUnprivSGIO(const char *path,
--                           const char *sysfs_dir,
-                            int unpriv_sgio);
- int virGetDeviceUnprivSGIO(const char *path,
--                           const char *sysfs_dir,
-                            int *unpriv_sgio);
- char *virGetUnprivSGIOSysfsPath(const char *path,
-                                 const char *sysfs_dir);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-RHEL-virscsi-Check-device-type-before-getting-it-s-dev-node-name.patch b/SOURCES/libvirt-RHEL-virscsi-Check-device-type-before-getting-it-s-dev-node-name.patch
index f371ff8..c467444 100644
--- a/SOURCES/libvirt-RHEL-virscsi-Check-device-type-before-getting-it-s-dev-node-name.patch
+++ b/SOURCES/libvirt-RHEL-virscsi-Check-device-type-before-getting-it-s-dev-node-name.patch
@@ -1,5 +1,5 @@
-From f66beef45382be2aed6d021a409e90f8114c8671 Mon Sep 17 00:00:00 2001
-Message-Id: <f66beef45382be2aed6d021a409e90f8114c8671@dist-git>
+From 9c5daeb8c99ca12a66387de448f585742887fd75 Mon Sep 17 00:00:00 2001
+Message-Id: <9c5daeb8c99ca12a66387de448f585742887fd75@dist-git>
 From: Michal Privoznik <mprivozn@redhat.com>
 Date: Fri, 6 Mar 2020 15:52:21 +0100
 Subject: [PATCH] RHEL: virscsi: Check device type before getting it's /dev
@@ -16,20 +16,20 @@ Signed-off-by: Andrea Bolognani <abologna@redhat.com>
 Message-Id: <20200306145226.1610708-2-abologna@redhat.com>
 Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
 ---
- src/util/virscsi.c             | 146 ++++++++++++++++++++++++++++++---
+ src/util/virscsi.c             | 140 ++++++++++++++++++++++++++++++---
  tests/virscsidata/0-0-0-0/type |   1 +
  tests/virscsidata/1-0-0-0/type |   1 +
- 3 files changed, 137 insertions(+), 11 deletions(-)
+ 3 files changed, 131 insertions(+), 11 deletions(-)
  create mode 100644 tests/virscsidata/0-0-0-0/type
  create mode 100644 tests/virscsidata/1-0-0-0/type
 
 diff --git a/src/util/virscsi.c b/src/util/virscsi.c
-index 06659c45c7..c40857977f 100644
+index 6a90d9002f..770f727cac 100644
 --- a/src/util/virscsi.c
 +++ b/src/util/virscsi.c
-@@ -50,6 +50,32 @@ struct _virUsedByInfo {
+@@ -47,6 +47,32 @@ struct _virUsedByInfo {
+ };
  typedef struct _virUsedByInfo virUsedByInfo;
- typedef virUsedByInfo *virUsedByInfoPtr;
  
 +
 +/* Keep in sync with scsi/scsi_proto.h */
@@ -60,8 +60,8 @@ index 06659c45c7..c40857977f 100644
  struct _virSCSIDevice {
      unsigned int adapter;
      unsigned int bus;
-@@ -134,6 +160,84 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix,
-     return sg;
+@@ -126,6 +152,78 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix,
+     return NULL;
  }
  
 +
@@ -119,40 +119,33 @@ index 06659c45c7..c40857977f 100644
 +                             unsigned int target,
 +                             unsigned long long unit)
 +{
-+    DIR *dir = NULL;
++    g_autoptr(DIR) dir = NULL;
 +    struct dirent *entry;
 +    g_autofree char *path = NULL;
-+    char *name = NULL;
 +
 +    path = g_strdup_printf("%s/%d:%u:%u:%llu/block",
 +                           prefix, adapter, bus, target, unit);
 +
 +    if (virDirOpen(&dir, path) < 0)
-+        goto cleanup;
++        return NULL;
 +
-+    while (virDirRead(dir, &entry, path) > 0) {
-+        name = g_strdup(entry->d_name);
-+        break;
-+    }
++    if (virDirRead(dir, &entry, path) > 0)
++        return g_strdup(entry->d_name);
 +
-+ cleanup:
-+    VIR_DIR_CLOSE(dir);
-+
-+    return name;
++    return NULL;
 +}
 +
 +
  /* Returns device name (e.g. "sdc") on success, or NULL
   * on failure.
   */
-@@ -144,32 +248,52 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
+@@ -136,25 +234,45 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
                          unsigned int target,
                          unsigned long long unit)
  {
--    DIR *dir = NULL;
+-    g_autoptr(DIR) dir = NULL;
 -    struct dirent *entry;
 -    g_autofree char *path = NULL;
-     char *name = NULL;
      unsigned int adapter_id;
 +    virSCSIDeviceType type;
      const char *prefix = sysfs_prefix ? sysfs_prefix : SYSFS_SCSI_DEVICES;
@@ -162,19 +155,20 @@ index 06659c45c7..c40857977f 100644
  
 -    path = g_strdup_printf("%s/%d:%u:%u:%llu/block", prefix, adapter_id, bus,
 -                           target, unit);
+-
+-    if (virDirOpen(&dir, path) < 0)
 +    if (virSCSIDeviceGetType(prefix, adapter_id,
 +                             bus, target, unit, &type) < 0)
-+        return NULL;
+         return NULL;
  
--    if (virDirOpen(&dir, path) < 0)
--        goto cleanup;
+-    if (virDirRead(dir, &entry, path) > 0)
+-        return g_strdup(entry->d_name);
+-
+-    return NULL;
 +    switch (type) {
 +    case VIR_SCSI_DEVICE_TYPE_DISK:
-+        name = virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
-+        break;
- 
--    while (virDirRead(dir, &entry, path) > 0) {
--        name = g_strdup(entry->d_name);
++        return virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
++
 +    case VIR_SCSI_DEVICE_TYPE_TAPE:
 +    case VIR_SCSI_DEVICE_TYPE_PRINTER:
 +    case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
@@ -197,18 +191,11 @@ index 06659c45c7..c40857977f 100644
 +        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
 +                       _("unsupported SCSI device type: %x"),
 +                       type);
-         break;
-     }
- 
-- cleanup:
--    VIR_DIR_CLOSE(dir);
-     return name;
++        return NULL;
++    }
  }
  
-+
- virSCSIDevicePtr
- virSCSIDeviceNew(const char *sysfs_prefix,
-                  const char *adapter,
+ virSCSIDevice *
 diff --git a/tests/virscsidata/0-0-0-0/type b/tests/virscsidata/0-0-0-0/type
 new file mode 100644
 index 0000000000..573541ac97
@@ -224,5 +211,5 @@ index 0000000000..573541ac97
 @@ -0,0 +1 @@
 +0
 -- 
-2.25.1
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-virscsi-Introduce-and-use-virSCSIDeviceGetUnprivSGIOSysfsPath.patch b/SOURCES/libvirt-RHEL-virscsi-Introduce-and-use-virSCSIDeviceGetUnprivSGIOSysfsPath.patch
index 5feb8f5..ad3f8bc 100644
--- a/SOURCES/libvirt-RHEL-virscsi-Introduce-and-use-virSCSIDeviceGetUnprivSGIOSysfsPath.patch
+++ b/SOURCES/libvirt-RHEL-virscsi-Introduce-and-use-virSCSIDeviceGetUnprivSGIOSysfsPath.patch
@@ -1,5 +1,5 @@
-From c9fc757c867d197c17350b6a9cabc63cc08105d2 Mon Sep 17 00:00:00 2001
-Message-Id: <c9fc757c867d197c17350b6a9cabc63cc08105d2@dist-git>
+From 1ce4faffcd4616bbcea4d198c3f60cbcfddd784e Mon Sep 17 00:00:00 2001
+Message-Id: <1ce4faffcd4616bbcea4d198c3f60cbcfddd784e@dist-git>
 From: Michal Privoznik <mprivozn@redhat.com>
 Date: Fri, 6 Mar 2020 15:52:23 +0100
 Subject: [PATCH] RHEL: virscsi: Introduce and use
@@ -22,16 +22,18 @@ Message-Id: <20200306145226.1610708-4-abologna@redhat.com>
 Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
 ---
  src/libvirt_private.syms |  1 +
- src/qemu/qemu_conf.c     | 18 +++++++++++-------
- src/util/virscsi.c       | 18 ++++++++++++++++++
+ src/qemu/qemu_conf.c     | 31 +++++++++++++++++++------------
+ src/util/virscsi.c       | 19 +++++++++++++++++++
  src/util/virscsi.h       |  5 +++++
- 4 files changed, 35 insertions(+), 7 deletions(-)
+ src/util/virutil.c       | 24 ++++++------------------
+ src/util/virutil.h       |  2 --
+ 6 files changed, 50 insertions(+), 32 deletions(-)
 
 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index 5dc99e03cf..1f97879faa 100644
+index 5b76e66e61..2c42e2a5e8 100644
 --- a/src/libvirt_private.syms
 +++ b/src/libvirt_private.syms
-@@ -2959,6 +2959,7 @@ virSCSIDeviceGetSgName;
+@@ -3191,6 +3191,7 @@ virSCSIDeviceGetSgName;
  virSCSIDeviceGetShareable;
  virSCSIDeviceGetTarget;
  virSCSIDeviceGetUnit;
@@ -40,29 +42,50 @@ index 5dc99e03cf..1f97879faa 100644
  virSCSIDeviceListAdd;
  virSCSIDeviceListCount;
 diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index 7aaf2862a4..6d6feb97cd 100644
+index 28c334761b..a0b8076d6b 100644
 --- a/src/qemu/qemu_conf.c
 +++ b/src/qemu/qemu_conf.c
-@@ -1789,7 +1789,6 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
-     virDomainDiskDefPtr disk = NULL;
-     virDomainHostdevDefPtr hostdev = NULL;
+@@ -1506,7 +1506,7 @@ qemuCheckUnprivSGIO(GHashTable *sharedDevices,
+     if (!(virHashLookup(sharedDevices, key)))
+         return 0;
+ 
+-    if (virGetDeviceUnprivSGIO(device_path, NULL, &val) < 0)
++    if (virGetDeviceUnprivSGIO(sysfs_path, &val) < 0)
+         return -1;
+ 
+     /* Error message on failure needs to be handled in caller
+@@ -1857,39 +1857,46 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
+     virDomainDiskDef *disk = NULL;
+     virDomainHostdevDef *hostdev = NULL;
      g_autofree char *sysfs_path = NULL;
 -    g_autofree char *hostdev_path = NULL;
-     const char *path = NULL;
+-    const char *path = NULL;
      int val = 0;
  
-@@ -1804,24 +1803,29 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
+     /* "sgio" is only valid for block disk; cdrom
+      * and floopy disk can have empty source.
+      */
+     if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
++        const char *path;
++
+         disk = dev->data.disk;
++        path = virDomainDiskGetSource(disk);
+ 
+         if (disk->device != VIR_DOMAIN_DISK_DEVICE_LUN ||
+             !virStorageSourceIsBlockLocal(disk->src))
              return 0;
  
-         path = virDomainDiskGetSource(disk);
-+
+-        path = virDomainDiskGetSource(disk);
 +        if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, NULL)))
 +            return -1;
 +
      } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
++        virDomainHostdevSubsysSCSI *scsisrc;
++        virDomainHostdevSubsysSCSIHost *scsihostsrc;
++
          hostdev = dev->data.hostdev;
-+        virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
-+        virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
++        scsisrc = &hostdev->source.subsys.u.scsi;
++        scsihostsrc = &scsisrc->u.host;
  
          if (hostdev->source.subsys.u.scsi.protocol ==
              VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
@@ -87,14 +110,29 @@ index 7aaf2862a4..6d6feb97cd 100644
      /* By default, filter the SG_IO commands, i.e. set unpriv_sgio to 0.  */
      if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
          if (disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED)
+@@ -1909,11 +1916,11 @@ qemuSetUnprivSGIO(virDomainDeviceDef *dev)
+     if (virFileExists(sysfs_path) || val == 1) {
+         int curr_val;
+ 
+-        if (virGetDeviceUnprivSGIO(path, NULL, &curr_val) < 0)
++        if (virGetDeviceUnprivSGIO(sysfs_path, &curr_val) < 0)
+             return -1;
+ 
+         if (curr_val != val &&
+-            virSetDeviceUnprivSGIO(path, NULL, val) < 0) {
++            virSetDeviceUnprivSGIO(sysfs_path, val) < 0) {
+             return -1;
+         }
+     }
 diff --git a/src/util/virscsi.c b/src/util/virscsi.c
-index 57958c06ea..1bba4051b6 100644
+index 6165196423..b437fdcac0 100644
 --- a/src/util/virscsi.c
 +++ b/src/util/virscsi.c
-@@ -322,6 +322,24 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
+@@ -302,6 +302,25 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
+     }
  }
  
- 
++
 +char *
 +virSCSIDeviceGetUnprivSGIOSysfsPath(const char *sysfs_prefix,
 +                                    const char *adapter,
@@ -113,14 +151,14 @@ index 57958c06ea..1bba4051b6 100644
 +}
 +
 +
- virSCSIDevicePtr
+ virSCSIDevice *
  virSCSIDeviceNew(const char *sysfs_prefix,
                   const char *adapter,
 diff --git a/src/util/virscsi.h b/src/util/virscsi.h
-index 51627e0c05..c040d76716 100644
+index 65ad15ed76..5721985939 100644
 --- a/src/util/virscsi.h
 +++ b/src/util/virscsi.h
-@@ -42,6 +42,11 @@ char *virSCSIDeviceGetDevName(const char *sysfs_prefix,
+@@ -40,6 +40,11 @@ char *virSCSIDeviceGetDevName(const char *sysfs_prefix,
                                unsigned int bus,
                                unsigned int target,
                                unsigned long long unit);
@@ -130,8 +168,105 @@ index 51627e0c05..c040d76716 100644
 +                                          unsigned int target,
 +                                          unsigned long long unit);
  
- virSCSIDevicePtr virSCSIDeviceNew(const char *sysfs_prefix,
+ virSCSIDevice *virSCSIDeviceNew(const char *sysfs_prefix,
                                    const char *adapter,
+diff --git a/src/util/virutil.c b/src/util/virutil.c
+index e04f1343d8..b1e37b45c5 100644
+--- a/src/util/virutil.c
++++ b/src/util/virutil.c
+@@ -1377,18 +1377,13 @@ virGetUnprivSGIOSysfsPath(const char *path,
+ 
+ int
+ virSetDeviceUnprivSGIO(const char *path,
+-                       const char *sysfs_dir,
+                        int unpriv_sgio)
+ {
+-    char *sysfs_path = NULL;
+     char *val = NULL;
+     int ret = -1;
+     int rc;
+ 
+-    if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
+-        return -1;
+-
+-    if (!virFileExists(sysfs_path)) {
++    if (!virFileExists(path)) {
+         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                        _("unpriv_sgio is not supported by this kernel"));
+         goto cleanup;
+@@ -1396,38 +1391,32 @@ virSetDeviceUnprivSGIO(const char *path,
+ 
+     val = g_strdup_printf("%d", unpriv_sgio);
+ 
+-    if ((rc = virFileWriteStr(sysfs_path, val, 0)) < 0) {
+-        virReportSystemError(-rc, _("failed to set %s"), sysfs_path);
++    if ((rc = virFileWriteStr(path, val, 0)) < 0) {
++        virReportSystemError(-rc, _("failed to set %s"), path);
+         goto cleanup;
+     }
+ 
+     ret = 0;
+  cleanup:
+-    VIR_FREE(sysfs_path);
+     VIR_FREE(val);
+     return ret;
+ }
+ 
+ int
+ virGetDeviceUnprivSGIO(const char *path,
+-                       const char *sysfs_dir,
+                        int *unpriv_sgio)
+ {
+-    char *sysfs_path = NULL;
+     char *buf = NULL;
+     char *tmp = NULL;
+     int ret = -1;
+ 
+-    if (!(sysfs_path = virGetUnprivSGIOSysfsPath(path, sysfs_dir)))
+-        return -1;
+-
+-    if (!virFileExists(sysfs_path)) {
++    if (!virFileExists(path)) {
+         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                        _("unpriv_sgio is not supported by this kernel"));
+         goto cleanup;
+     }
+ 
+-    if (virFileReadAll(sysfs_path, 1024, &buf) < 0)
++    if (virFileReadAll(path, 1024, &buf) < 0)
+         goto cleanup;
+ 
+     if ((tmp = strchr(buf, '\n')))
+@@ -1435,13 +1424,12 @@ virGetDeviceUnprivSGIO(const char *path,
+ 
+     if (virStrToLong_i(buf, NULL, 10, unpriv_sgio) < 0) {
+         virReportError(VIR_ERR_INTERNAL_ERROR,
+-                       _("failed to parse value of %s"), sysfs_path);
++                       _("failed to parse value of %s"), path);
+         goto cleanup;
+     }
+ 
+     ret = 0;
+  cleanup:
+-    VIR_FREE(sysfs_path);
+     VIR_FREE(buf);
+     return ret;
+ }
+diff --git a/src/util/virutil.h b/src/util/virutil.h
+index 854b494890..da267c6446 100644
+--- a/src/util/virutil.h
++++ b/src/util/virutil.h
+@@ -120,10 +120,8 @@ int virGetDeviceID(const char *path,
+                    int *maj,
+                    int *min) G_GNUC_NO_INLINE;
+ int virSetDeviceUnprivSGIO(const char *path,
+-                           const char *sysfs_dir,
+                            int unpriv_sgio);
+ int virGetDeviceUnprivSGIO(const char *path,
+-                           const char *sysfs_dir,
+                            int *unpriv_sgio);
+ char *virGetUnprivSGIOSysfsPath(const char *path,
+                                 const char *sysfs_dir);
 -- 
-2.25.1
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-virscsi-Support-TAPEs-in-virSCSIDeviceGetDevName.patch b/SOURCES/libvirt-RHEL-virscsi-Support-TAPEs-in-virSCSIDeviceGetDevName.patch
index 7724e4d..c9a8660 100644
--- a/SOURCES/libvirt-RHEL-virscsi-Support-TAPEs-in-virSCSIDeviceGetDevName.patch
+++ b/SOURCES/libvirt-RHEL-virscsi-Support-TAPEs-in-virSCSIDeviceGetDevName.patch
@@ -1,5 +1,5 @@
-From c481bcacd1f515d2e93036dc452a25e9ff06f7ae Mon Sep 17 00:00:00 2001
-Message-Id: <c481bcacd1f515d2e93036dc452a25e9ff06f7ae@dist-git>
+From 5b96a8773d33af9822f6b6ccddc8f372841895a6 Mon Sep 17 00:00:00 2001
+Message-Id: <5b96a8773d33af9822f6b6ccddc8f372841895a6@dist-git>
 From: Michal Privoznik <mprivozn@redhat.com>
 Date: Fri, 6 Mar 2020 15:52:22 +0100
 Subject: [PATCH] RHEL: virscsi: Support TAPEs in virSCSIDeviceGetDevName()
@@ -15,7 +15,7 @@ Signed-off-by: Andrea Bolognani <abologna@redhat.com>
 Message-Id: <20200306145226.1610708-3-abologna@redhat.com>
 Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
 ---
- src/util/virscsi.c                          | 28 +++++++++++++++
+ src/util/virscsi.c                          | 27 +++++++++++++++
  tests/virscsidata/2-0-0-0/model             |  1 +
  tests/virscsidata/2-0-0-0/scsi_tape/st0/dev |  1 +
  tests/virscsidata/2-0-0-0/sg3/dev           |  1 +
@@ -24,7 +24,7 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
  tests/virscsidata/2-0-0-0/vendor            |  1 +
  tests/virscsidata/sg3                       |  0
  tests/virscsitest.c                         | 38 ++++++++++++++++++---
- 9 files changed, 67 insertions(+), 5 deletions(-)
+ 9 files changed, 66 insertions(+), 5 deletions(-)
  create mode 100644 tests/virscsidata/2-0-0-0/model
  create mode 100644 tests/virscsidata/2-0-0-0/scsi_tape/st0/dev
  create mode 100644 tests/virscsidata/2-0-0-0/sg3/dev
@@ -34,10 +34,10 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
  create mode 100644 tests/virscsidata/sg3
 
 diff --git a/src/util/virscsi.c b/src/util/virscsi.c
-index c40857977f..57958c06ea 100644
+index 770f727cac..6165196423 100644
 --- a/src/util/virscsi.c
 +++ b/src/util/virscsi.c
-@@ -238,6 +238,31 @@ virSCSIDeviceGetDevNameBlock(const char *prefix,
+@@ -224,6 +224,31 @@ virSCSIDeviceGetDevNameBlock(const char *prefix,
  }
  
  
@@ -69,12 +69,11 @@ index c40857977f..57958c06ea 100644
  /* Returns device name (e.g. "sdc") on success, or NULL
   * on failure.
   */
-@@ -266,6 +291,9 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
-         break;
+@@ -250,6 +275,8 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
+         return virSCSIDeviceGetDevNameBlock(prefix, adapter_id, bus, target, unit);
  
      case VIR_SCSI_DEVICE_TYPE_TAPE:
-+        name = virSCSIDeviceGetDevNameTape(prefix, adapter_id, bus, target, unit);
-+        break;
++        return virSCSIDeviceGetDevNameTape(prefix, adapter_id, bus, target, unit);
 +
      case VIR_SCSI_DEVICE_TYPE_PRINTER:
      case VIR_SCSI_DEVICE_TYPE_PROCESSOR:
@@ -126,10 +125,10 @@ diff --git a/tests/virscsidata/sg3 b/tests/virscsidata/sg3
 new file mode 100644
 index 0000000000..e69de29bb2
 diff --git a/tests/virscsitest.c b/tests/virscsitest.c
-index d5a0da4753..e501d6d041 100644
+index c96699e157..924b77af08 100644
 --- a/tests/virscsitest.c
 +++ b/tests/virscsitest.c
-@@ -32,18 +32,34 @@ VIR_LOG_INIT("tests.scsitest");
+@@ -33,17 +33,33 @@ VIR_LOG_INIT("tests.scsitest");
  
  static char *virscsi_prefix;
  
@@ -146,8 +145,7 @@ index d5a0da4753..e501d6d041 100644
 +testGetDevName(const void *opaque)
  {
 +    const testGetDevNameData *data = opaque;
-     char *name = NULL;
-     int ret = -1;
+     g_autofree char *name = NULL;
  
      if (!(name = virSCSIDeviceGetDevName(virscsi_prefix,
 -                                         "scsi_host1", 0, 0, 0)))
@@ -162,12 +160,12 @@ index d5a0da4753..e501d6d041 100644
 +        fprintf(stderr,
 +                "SCSI dev name mismatch, expected %s got %s",
 +                data->expectedName, name);
-         goto cleanup;
+         return -1;
 +    }
  
-     ret = 0;
-  cleanup:
-@@ -212,15 +228,27 @@ mymain(void)
+     return 0;
+ }
+@@ -200,15 +216,27 @@ mymain(void)
  
      CREATE_SYMLINK("0-0-0-0", "0:0:0:0");
      CREATE_SYMLINK("1-0-0-0", "1:0:0:0");
@@ -198,5 +196,5 @@ index d5a0da4753..e501d6d041 100644
          ret = -1;
  
 -- 
-2.25.1
+2.34.1
 
diff --git a/SOURCES/libvirt-RHEL-virutil-Accept-non-block-devices-in-virGetDeviceID.patch b/SOURCES/libvirt-RHEL-virutil-Accept-non-block-devices-in-virGetDeviceID.patch
index 4568177..33400cc 100644
--- a/SOURCES/libvirt-RHEL-virutil-Accept-non-block-devices-in-virGetDeviceID.patch
+++ b/SOURCES/libvirt-RHEL-virutil-Accept-non-block-devices-in-virGetDeviceID.patch
@@ -1,5 +1,5 @@
-From cd2640c256389b4041e4cd38fd72f77184bb4414 Mon Sep 17 00:00:00 2001
-Message-Id: <cd2640c256389b4041e4cd38fd72f77184bb4414@dist-git>
+From ac8357ab7dd676af82b971673f8d7e862ff07624 Mon Sep 17 00:00:00 2001
+Message-Id: <ac8357ab7dd676af82b971673f8d7e862ff07624@dist-git>
 From: Michal Privoznik <mprivozn@redhat.com>
 Date: Fri, 6 Mar 2020 15:52:24 +0100
 Subject: [PATCH] RHEL: virutil: Accept non-block devices in virGetDeviceID()
@@ -19,10 +19,10 @@ Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
  1 file changed, 3 deletions(-)
 
 diff --git a/src/util/virutil.c b/src/util/virutil.c
-index a0fd7618ee..f142951acf 100644
+index b1e37b45c5..ced8493516 100644
 --- a/src/util/virutil.c
 +++ b/src/util/virutil.c
-@@ -1379,9 +1379,6 @@ virGetDeviceID(const char *path, int *maj, int *min)
+@@ -1333,9 +1333,6 @@ virGetDeviceID(const char *path, int *maj, int *min)
      if (stat(path, &sb) < 0)
          return -errno;
  
@@ -33,5 +33,5 @@ index a0fd7618ee..f142951acf 100644
          *maj = major(sb.st_rdev);
      if (min)
 -- 
-2.25.1
+2.34.1
 
diff --git a/SOURCES/libvirt-RNG-Allow-interleaving-of-domain-cpu-numa-cell-children.patch b/SOURCES/libvirt-RNG-Allow-interleaving-of-domain-cpu-numa-cell-children.patch
deleted file mode 100644
index 27fb4b4..0000000
--- a/SOURCES/libvirt-RNG-Allow-interleaving-of-domain-cpu-numa-cell-children.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From e37b1531942872a229b9f45524ea4679f3b1e8d6 Mon Sep 17 00:00:00 2001
-Message-Id: <e37b1531942872a229b9f45524ea4679f3b1e8d6@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 9 Nov 2020 17:22:33 +0100
-Subject: [PATCH] RNG: Allow interleaving of /domain/cpu/numa/cell children
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-So far, the <cell/> element can have two types of children
-elements: <distances/> and <cache/> (which can be repeated more
-times). However, there is no reason to require specific order in
-input XML. Allow elements to be interleaved.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit fd2ad818b29ca56904dd228f0774f553f99c1157)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <48b8e99ea6fbc6bcab0f7b3d17e7824ef1b232e2.1604938847.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/schemas/cputypes.rng | 22 ++++++++++++----------
- 1 file changed, 12 insertions(+), 10 deletions(-)
-
-diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng
-index ba30dbf9ff..a1cae23161 100644
---- a/docs/schemas/cputypes.rng
-+++ b/docs/schemas/cputypes.rng
-@@ -146,16 +146,18 @@
-           <ref name="virYesNo"/>
-         </attribute>
-       </optional>
--      <optional>
--        <element name="distances">
--          <oneOrMore>
--            <ref name="numaDistance"/>
--          </oneOrMore>
--        </element>
--      </optional>
--      <zeroOrMore>
--        <ref name="numaCache"/>
--      </zeroOrMore>
-+      <interleave>
-+        <optional>
-+          <element name="distances">
-+            <oneOrMore>
-+              <ref name="numaDistance"/>
-+            </oneOrMore>
-+          </element>
-+        </optional>
-+        <zeroOrMore>
-+          <ref name="numaCache"/>
-+        </zeroOrMore>
-+      </interleave>
-     </element>
-   </define>
- 
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-Remove-checking-of-return-value-of-virHashNew.patch b/SOURCES/libvirt-Remove-checking-of-return-value-of-virHashNew.patch
deleted file mode 100644
index 10e8801..0000000
--- a/SOURCES/libvirt-Remove-checking-of-return-value-of-virHashNew.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From ca7c7a8b07c31dc8bf96f7da6fb53af884e36ddb Mon Sep 17 00:00:00 2001
-Message-Id: <ca7c7a8b07c31dc8bf96f7da6fb53af884e36ddb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:01 +0100
-Subject: [PATCH] Remove checking of return value of virHashNew
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are two calls to virHashNew which check the return value. It's not
-necessary any more as virHashNew always returns a valid pointer.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 6eab924daa243afa67f2cc20dcbdf521904bb62b)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <08acb2e50b584a75c0131a628ee441f47e8fe823.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/backup_conf.c       | 6 +-----
- src/qemu/qemu_monitor_json.c | 3 +--
- 2 files changed, 2 insertions(+), 7 deletions(-)
-
-diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
-index b370b686f1..64c8f6cc09 100644
---- a/src/conf/backup_conf.c
-+++ b/src/conf/backup_conf.c
-@@ -439,15 +439,11 @@ virDomainBackupAlignDisks(virDomainBackupDefPtr def,
-                           virDomainDefPtr dom,
-                           const char *suffix)
- {
--    g_autoptr(virHashTable) disks = NULL;
-+    g_autoptr(virHashTable) disks = virHashNew(NULL);
-     size_t i;
-     int ndisks;
-     bool backup_all = false;
- 
--
--    if (!(disks = virHashNew(NULL)))
--        return -1;
--
-     /* Unlikely to have a guest without disks but technically possible.  */
-     if (!dom->ndisks) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 5d8c7e9b5e..3fc0bcb80c 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -2992,8 +2992,7 @@ qemuMonitorJSONBlockGetNamedNodeDataJSON(virJSONValuePtr nodes)
- {
-     g_autoptr(virHashTable) ret = NULL;
- 
--    if (!(ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree)))
--        return NULL;
-+    ret = virHashNew((virHashDataFree) qemuMonitorJSONBlockNamedNodeDataFree);
- 
-     if (virJSONValueArrayForeachSteal(nodes,
-                                       qemuMonitorJSONBlockGetNamedNodeDataWorker,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-Remove-qemuDomainSecretInfoNew.patch b/SOURCES/libvirt-Remove-qemuDomainSecretInfoNew.patch
deleted file mode 100644
index 4534ae8..0000000
--- a/SOURCES/libvirt-Remove-qemuDomainSecretInfoNew.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From 160863c5cac5519c287462439b9ce8abc6a8237e Mon Sep 17 00:00:00 2001
-Message-Id: <160863c5cac5519c287462439b9ce8abc6a8237e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:48 +0100
-Subject: [PATCH] Remove qemuDomainSecretInfoNew
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Replace it by a direct call to qemuDomainSecretAESSetupFromSecret.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit f742461389c11a7d4cc8bda941814c4128eadf94)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <c14d98c90ae9d0e9c5e4fef6a8e5061411c43a78.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 53 +++++++++++-------------------------------
- 1 file changed, 13 insertions(+), 40 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index c286f50650..af23079d5d 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1669,33 +1669,6 @@ qemuDomainSecretInfoNewPlain(virSecretUsageType usageType,
- }
- 
- 
--/* qemuDomainSecretInfoNew:
-- * @priv: pointer to domain private object
-- * @srcAlias: Alias base to use for TLS object
-- * @usageType: Secret usage type
-- * @username: username
-- * @looupDef: lookup def describing secret
-- * @isLuks: boolean for luks lookup
-- *
-- * Helper function to create a secinfo to be used for secinfo consumers. This
-- * sets up encrypted data to be used with qemu's 'secret' object.
-- *
-- * Returns @secinfo on success, NULL on failure. Caller is responsible
-- * to eventually free @secinfo.
-- */
--static qemuDomainSecretInfoPtr
--qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv,
--                        const char *srcAlias,
--                        virSecretUsageType usageType,
--                        const char *username,
--                        virSecretLookupTypeDefPtr lookupDef,
--                        bool isLuks)
--{
--    return qemuDomainSecretAESSetupFromSecret(priv, srcAlias, usageType, username,
--                                              lookupDef, isLuks);
--}
--
--
- /**
-  * qemuDomainSecretInfoTLSNew:
-  * @priv: pointer to domain private object
-@@ -1722,9 +1695,9 @@ qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv,
-     }
-     seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
- 
--    return qemuDomainSecretInfoNew(priv, srcAlias,
--                                   VIR_SECRET_USAGE_TYPE_TLS, NULL,
--                                   &seclookupdef, false);
-+    return qemuDomainSecretAESSetupFromSecret(priv, srcAlias,
-+                                              VIR_SECRET_USAGE_TYPE_TLS,
-+                                              NULL, &seclookupdef, false);
- }
- 
- 
-@@ -1814,11 +1787,11 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-                                                             src->auth->username,
-                                                             &src->auth->seclookupdef);
-         } else {
--            srcPriv->secinfo = qemuDomainSecretInfoNew(priv, authalias,
--                                                       usageType,
--                                                       src->auth->username,
--                                                       &src->auth->seclookupdef,
--                                                       false);
-+            srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, authalias,
-+                                                                  usageType,
-+                                                                  src->auth->username,
-+                                                                  &src->auth->seclookupdef,
-+                                                                  false);
-         }
- 
-         if (!srcPriv->secinfo)
-@@ -1826,11 +1799,11 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-     }
- 
-     if (hasEnc) {
--        if (!(srcPriv->encinfo =
--              qemuDomainSecretInfoNew(priv, encalias,
--                                      VIR_SECRET_USAGE_TYPE_VOLUME, NULL,
--                                      &src->encryption->secrets[0]->seclookupdef,
--                                      true)))
-+        if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, encalias,
-+                                                                    VIR_SECRET_USAGE_TYPE_VOLUME,
-+                                                                    NULL,
-+                                                                    &src->encryption->secrets[0]->seclookupdef,
-+                                                                    true)))
-               return -1;
-     }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-Revert-report-error-when-virProcessGetStatInfo-is-unable-to-parse-data.patch b/SOURCES/libvirt-Revert-report-error-when-virProcessGetStatInfo-is-unable-to-parse-data.patch
new file mode 100644
index 0000000..7d5ce9a
--- /dev/null
+++ b/SOURCES/libvirt-Revert-report-error-when-virProcessGetStatInfo-is-unable-to-parse-data.patch
@@ -0,0 +1,103 @@
+From 732113455fb7eadeea178c71cc77f0ffdf639f24 Mon Sep 17 00:00:00 2001
+Message-Id: <732113455fb7eadeea178c71cc77f0ffdf639f24@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 18 Jan 2022 12:40:09 +0100
+Subject: [PATCH] Revert "report error when virProcessGetStatInfo() is unable
+ to parse data"
+
+This reverts commit 938382b60ae5bd1f83b5cb09e1ce68b9a88f679a.
+
+Turns out, the commit did more harm than good. It changed
+semantics on some public APIs. For instance, while
+qemuDomainGetInfo() previously did not returned an error it does
+now. While the calls to virProcessGetStatInfo() is guarded with
+virDomainObjIsActive() it doesn't necessarily mean that QEMU's
+PID is still alive. QEMU might be gone but we just haven't
+realized it (e.g. because the eof handler thread is waiting for a
+job).
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2041610
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit 105dace22cc7b5b18d72a4dcad4a2cf386ce5c99)
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/ch/ch_driver.c     | 2 ++
+ src/qemu/qemu_driver.c | 7 ++++++-
+ src/util/virprocess.c  | 8 ++------
+ 3 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c
+index 3cbc668489..53e0872207 100644
+--- a/src/ch/ch_driver.c
++++ b/src/ch/ch_driver.c
+@@ -1073,6 +1073,8 @@ chDomainHelperGetVcpus(virDomainObj *vm,
+             if (virProcessGetStatInfo(&vcpuinfo->cpuTime,
+                                       &vcpuinfo->cpu, NULL,
+                                       vm->pid, vcpupid) < 0) {
++                virReportSystemError(errno, "%s",
++                                      _("cannot get vCPU placement & pCPU time"));
+                 return -1;
+             }
+         }
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index 65ac5ef367..d3d76c003f 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -1359,6 +1359,8 @@ qemuDomainHelperGetVcpus(virDomainObj *vm,
+             if (virProcessGetStatInfo(&vcpuinfo->cpuTime,
+                                       &vcpuinfo->cpu, NULL,
+                                       vm->pid, vcpupid) < 0) {
++                virReportSystemError(errno, "%s",
++                                     _("cannot get vCPU placement & pCPU time"));
+                 return -1;
+             }
+         }
+@@ -2519,6 +2521,8 @@ qemuDomainGetInfo(virDomainPtr dom,
+     if (virDomainObjIsActive(vm)) {
+         if (virProcessGetStatInfo(&(info->cpuTime), NULL, NULL,
+                                   vm->pid, 0) < 0) {
++            virReportError(VIR_ERR_OPERATION_FAILED, "%s",
++                           _("cannot read cputime for domain"));
+             goto cleanup;
+         }
+     }
+@@ -10526,7 +10530,8 @@ qemuDomainMemoryStatsInternal(virQEMUDriver *driver,
+     }
+ 
+     if (virProcessGetStatInfo(NULL, NULL, &rss, vm->pid, 0) < 0) {
+-        virResetLastError();
++        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
++                       _("cannot get RSS for domain"));
+     } else {
+         stats[ret].tag = VIR_DOMAIN_MEMORY_STAT_RSS;
+         stats[ret].val = rss;
+diff --git a/src/util/virprocess.c b/src/util/virprocess.c
+index 85d8c8e747..b559a4257e 100644
+--- a/src/util/virprocess.c
++++ b/src/util/virprocess.c
+@@ -1784,10 +1784,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime,
+         virStrToLong_ullp(proc_stat[VIR_PROCESS_STAT_STIME], NULL, 10, &systime) < 0 ||
+         virStrToLong_l(proc_stat[VIR_PROCESS_STAT_RSS], NULL, 10, &rss) < 0 ||
+         virStrToLong_i(proc_stat[VIR_PROCESS_STAT_PROCESSOR], NULL, 10, &cpu) < 0) {
+-        virReportError(VIR_ERR_INTERNAL_ERROR,
+-                       _("cannot parse process status data for pid '%d/%d'"),
+-                       (int) pid, (int) tid);
+-        return -1;
++        VIR_WARN("cannot parse process status data");
+     }
+ 
+     /* We got jiffies
+@@ -1884,8 +1881,7 @@ virProcessGetStatInfo(unsigned long long *cpuTime G_GNUC_UNUSED,
+                       pid_t pid G_GNUC_UNUSED,
+                       pid_t tid G_GNUC_UNUSED)
+ {
+-    virReportSystemError(ENOSYS, "%s",
+-                         _("Process statistics data is not supported on this platform"));
++    errno = ENOSYS;
+     return -1;
+ }
+ 
+-- 
+2.35.0
+
diff --git a/SOURCES/libvirt-api-disallow-virDomainAgentSetResponseTimeout-on-read-only-connections.patch b/SOURCES/libvirt-api-disallow-virDomainAgentSetResponseTimeout-on-read-only-connections.patch
deleted file mode 100644
index 5d9ae06..0000000
--- a/SOURCES/libvirt-api-disallow-virDomainAgentSetResponseTimeout-on-read-only-connections.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 0c1bec6a89f97c77ba9e0ed4146deb8606ea6f16 Mon Sep 17 00:00:00 2001
-Message-Id: <0c1bec6a89f97c77ba9e0ed4146deb8606ea6f16@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Wed, 25 Mar 2020 11:21:19 -0500
-Subject: [PATCH] api: disallow virDomainAgentSetResponseTimeout() on read-only
- connections
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This function changes the amount of time that libvirt waits for a
-response from the guest agent for all guest agent commands. Since this
-is a configuration change, it should not be allowed on read-only
-connections.
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 4cc90c2e62df653e909ad31fd810224bf8bcf913)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1814508
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Message-Id: <20200325162119.9047-2-jjongsma@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt-domain.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
-index eb66999f07..3deee54e48 100644
---- a/src/libvirt-domain.c
-+++ b/src/libvirt-domain.c
-@@ -12554,6 +12554,8 @@ virDomainAgentSetResponseTimeout(virDomainPtr domain,
-     virCheckDomainReturn(domain, -1);
-     conn = domain->conn;
- 
-+    virCheckReadOnlyGoto(conn->flags, error);
-+
-     if (conn->driver->domainAgentSetResponseTimeout) {
-         if (conn->driver->domainAgentSetResponseTimeout(domain, timeout, flags) < 0)
-             goto error;
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-cgroup-use-virCgroupSetCpuShares-instead-of-virCgroupSetupCpuShares.patch b/SOURCES/libvirt-cgroup-use-virCgroupSetCpuShares-instead-of-virCgroupSetupCpuShares.patch
deleted file mode 100644
index 9eec89b..0000000
--- a/SOURCES/libvirt-cgroup-use-virCgroupSetCpuShares-instead-of-virCgroupSetupCpuShares.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From 8d08db00d403ddd17cb51d972842c6d13a122d57 Mon Sep 17 00:00:00 2001
-Message-Id: <8d08db00d403ddd17cb51d972842c6d13a122d57@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 4 Mar 2021 12:57:58 +0100
-Subject: [PATCH] cgroup: use virCgroupSetCpuShares instead of
- virCgroupSetupCpuShares
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Now that we enforce the cpu.shares range kernel will no longer silently
-change the value that libvirt configures so there is no need to read
-the value back to get the actual configuration.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit e95489d813cb7cc68b02905ce3ec059bc395b465)
-
-Conflicts:
-    src/lxc/lxc_cgroup.c
-    src/lxc/lxc_driver.c
-    src/qemu/qemu_cgroup.c
-    src/qemu/qemu_driver.c
-        - downstream doesn't have virCgroupSetupCpuShares() function
-          so we just remove usage of virCgroupGetCpuShares()
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <a7f8e3c0ce4bc22eccbaa25a434d5e72e74d8a65.1614858616.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/lxc/lxc_cgroup.c   |  5 -----
- src/lxc/lxc_driver.c   |  6 +-----
- src/qemu/qemu_cgroup.c | 20 --------------------
- src/qemu/qemu_driver.c |  8 ++------
- 4 files changed, 3 insertions(+), 36 deletions(-)
-
-diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
-index 7f3701593a..f785f50754 100644
---- a/src/lxc/lxc_cgroup.c
-+++ b/src/lxc/lxc_cgroup.c
-@@ -38,13 +38,8 @@ static int virLXCCgroupSetupCpuTune(virDomainDefPtr def,
-                                     virCgroupPtr cgroup)
- {
-     if (def->cputune.sharesSpecified) {
--        unsigned long long val;
-         if (virCgroupSetCpuShares(cgroup, def->cputune.shares) < 0)
-             return -1;
--
--        if (virCgroupGetCpuShares(cgroup, &val) < 0)
--            return -1;
--        def->cputune.shares = val;
-     }
- 
-     if (def->cputune.quota != 0 &&
-diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
-index a8c93dd228..853ddac8b9 100644
---- a/src/lxc/lxc_driver.c
-+++ b/src/lxc/lxc_driver.c
-@@ -1909,14 +1909,10 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CPU_SHARES)) {
-             if (def) {
--                unsigned long long val;
-                 if (virCgroupSetCpuShares(priv->cgroup, params[i].value.ul) < 0)
-                     goto endjob;
- 
--                if (virCgroupGetCpuShares(priv->cgroup, &val) < 0)
--                    goto endjob;
--
--                def->cputune.shares = val;
-+                def->cputune.shares = params[i].value.ul;
-                 def->cputune.sharesSpecified = true;
-             }
- 
-diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
-index 3a62b4ac15..95ea5bed74 100644
---- a/src/qemu/qemu_cgroup.c
-+++ b/src/qemu/qemu_cgroup.c
-@@ -933,10 +933,6 @@ static int
- qemuSetupCpuCgroup(virDomainObjPtr vm)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
--    virObjectEventPtr event = NULL;
--    virTypedParameterPtr eventParams = NULL;
--    int eventNparams = 0;
--    int eventMaxparams = 0;
- 
-     if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
-        if (vm->def->cputune.sharesSpecified) {
-@@ -949,24 +945,8 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
-     }
- 
-     if (vm->def->cputune.sharesSpecified) {
--        unsigned long long val;
-         if (virCgroupSetCpuShares(priv->cgroup, vm->def->cputune.shares) < 0)
-             return -1;
--
--        if (virCgroupGetCpuShares(priv->cgroup, &val) < 0)
--            return -1;
--        if (vm->def->cputune.shares != val) {
--            vm->def->cputune.shares = val;
--            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
--                                        &eventMaxparams,
--                                        VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES,
--                                        val) < 0)
--                return -1;
--
--            event = virDomainEventTunableNewFromObj(vm, eventParams, eventNparams);
--        }
--
--        virObjectEventStateQueue(priv->driver->domainEventState, event);
-     }
- 
-     return 0;
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index a1103a96dd..3914d3ff68 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -10625,20 +10625,16 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CPU_SHARES)) {
-             if (def) {
--                unsigned long long val;
-                 if (virCgroupSetCpuShares(priv->cgroup, value_ul) < 0)
-                     goto endjob;
- 
--                if (virCgroupGetCpuShares(priv->cgroup, &val) < 0)
--                    goto endjob;
--
--                def->cputune.shares = val;
-+                def->cputune.shares = value_ul;
-                 def->cputune.sharesSpecified = true;
- 
-                 if (virTypedParamsAddULLong(&eventParams, &eventNparams,
-                                             &eventMaxNparams,
-                                             VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES,
--                                            val) < 0)
-+                                            value_ul) < 0)
-                     goto endjob;
-             }
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-check-for-NULL-before-calling-g_regex_unref.patch b/SOURCES/libvirt-check-for-NULL-before-calling-g_regex_unref.patch
deleted file mode 100644
index a0c6d04..0000000
--- a/SOURCES/libvirt-check-for-NULL-before-calling-g_regex_unref.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From 5fe7795d5fa5061f0ba615472f9351f9d29abf48 Mon Sep 17 00:00:00 2001
-Message-Id: <5fe7795d5fa5061f0ba615472f9351f9d29abf48@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 2 Oct 2020 13:44:44 +0200
-Subject: [PATCH] check for NULL before calling g_regex_unref
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-g_regex_unref reports an error if called with a NULL argument.
-
-We have two cases in the code where we (possibly) call it on a NULL
-argument. The interesting one is in virDomainQemuMonitorEventCleanup.
-
-Based on VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_REGEX, we unref
-data->regex, which has two problems:
-
-* On the client side, flags is -1 so the comparison is true even if no
-  regex was used, reproducible by:
-  $ virsh qemu-monitor-event --timeout 1
-  which results in an ugly error:
-(process:1289846): GLib-CRITICAL **: 14:58:42.631: g_regex_unref: assertion 'regex != NULL' failed
-* On the server side, we only create the regex if both the flag and the
-  string are present, so it's possible to trigger this message by:
-  $ virsh qemu-monitor-event --regex --timeout 1
-
-Use a non-NULL comparison instead of the flag to decide whether we need
-to unref the regex. And add a non-NULL check to the unref in the
-VirtualBox test too.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Fixes: 71efb59a4de7c51b1bc889a316f1796ebf55738f
-https://bugzilla.redhat.com/show_bug.cgi?id=1876907
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
-(cherry picked from commit 92b252456ee6d6ffc6e39e62ce1ce6c50113e00e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861176
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <7d3c84f6556d0d46ada037d5e56c831babba609f.1601639064.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/conf/domain_event.c     | 2 +-
- tests/vboxsnapshotxmltest.c | 3 ++-
- 2 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
-index 33fbf10406..d3acde0236 100644
---- a/src/conf/domain_event.c
-+++ b/src/conf/domain_event.c
-@@ -2194,7 +2194,7 @@ virDomainQemuMonitorEventCleanup(void *opaque)
-     virDomainQemuMonitorEventData *data = opaque;
- 
-     VIR_FREE(data->event);
--    if (data->flags & VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_REGEX)
-+    if (data->regex)
-         g_regex_unref(data->regex);
-     if (data->freecb)
-         (data->freecb)(data->opaque);
-diff --git a/tests/vboxsnapshotxmltest.c b/tests/vboxsnapshotxmltest.c
-index d1a7522931..8577157020 100644
---- a/tests/vboxsnapshotxmltest.c
-+++ b/tests/vboxsnapshotxmltest.c
-@@ -134,7 +134,8 @@ mymain(void)
-     DO_TEST("2disks-3snap-brother");
- 
-  cleanup:
--    g_regex_unref(testSnapshotXMLVariableLineRegex);
-+    if (testSnapshotXMLVariableLineRegex)
-+        g_regex_unref(testSnapshotXMLVariableLineRegex);
-     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
- 
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-conf-Add-support-for-cookies-for-HTTP-based-disks.patch b/SOURCES/libvirt-conf-Add-support-for-cookies-for-HTTP-based-disks.patch
deleted file mode 100644
index ed4e875..0000000
--- a/SOURCES/libvirt-conf-Add-support-for-cookies-for-HTTP-based-disks.patch
+++ /dev/null
@@ -1,449 +0,0 @@
-From 4abdfae3b67295a0143f650768630e009d1b2798 Mon Sep 17 00:00:00 2001
-Message-Id: <4abdfae3b67295a0143f650768630e009d1b2798@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:57 +0100
-Subject: [PATCH] conf: Add support for cookies for HTTP based disks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add possibility to specify one or more cookies for http based disks.
-This patch adds the config parser, storage and validation of the
-cookies.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3b076391befc3fe72deb0c244ac6c2b4c100b410)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <3135a30f0d0a1a4bb8da02c49f10a1bcf3a394f4.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in                     |  10 ++
- docs/schemas/domaincommon.rng                 |  24 ++++
- src/conf/domain_conf.c                        |  82 +++++++++++++
- src/libvirt_private.syms                      |   1 +
- src/util/virstoragefile.c                     | 115 ++++++++++++++++++
- src/util/virstoragefile.h                     |  15 +++
- .../disk-network-http.xml                     |   8 ++
- 7 files changed, 255 insertions(+)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 2cce247958..5a10d64e83 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2839,6 +2839,9 @@
-     &lt;driver name='qemu' type='raw'/&gt;
-     &lt;source protocol="http" name="url_path"&gt;
-       &lt;host name="hostname" port="80"/&gt;
-+      &lt;cookies&gt;
-+        &lt;cookie name="test"&gt;somevalue&lt;/cookie&gt;
-+      &lt;/cookies&gt;
-     &lt;/source&gt;
-     &lt;target dev='hde' bus='ide' tray='open'/&gt;
-     &lt;readonly/&gt;
-@@ -3382,6 +3385,13 @@
-             certificate validation. Supported values are <code>yes</code> and
-             <code>no</code>. <span class="since">Since 6.2.0</span>
-           </dd>
-+          <dt><code>cookies</code></dt>
-+          <dd>
-+            For <code>http</code> and <code>https</code> accessed storage it's
-+            possible to pass one or more cookies. The cookie name and value
-+            must conform to the HTTP specification.
-+            <span class="since">Since 6.2.0</span>
-+          </dd>
-         </dl>
- 
-         <p>
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 548601b61c..bdf35e64f6 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1817,6 +1817,24 @@
-     </element>
-   </define>
- 
-+  <define name="diskSourceNetworkProtocolHTTPCookies">
-+    <element name="cookies">
-+      <oneOrMore>
-+        <element name="cookie">
-+          <attribute name="name">
-+            <data type="string">
-+              <param name="pattern">[!#$%&amp;'*+\-.0-9A-Z\^_`a-z|~]+</param>
-+            </data>
-+          </attribute>
-+          <data type="string">
-+            <param name="pattern">[!#$%&amp;'()*+\-./0-9:&gt;=&lt;?@A-Z\^_`\[\]a-z|~]+</param>
-+          </data>
-+        </element>
-+      </oneOrMore>
-+      <empty/>
-+    </element>
-+  </define>
-+
-   <define name="diskSourceNetworkProtocolHTTPS">
-     <element name="source">
-       <attribute name="protocol">
-@@ -1833,6 +1851,9 @@
-       <optional>
-         <ref name="diskSourceNetworkProtocolSSLVerify"/>
-       </optional>
-+      <optional>
-+        <ref name="diskSourceNetworkProtocolHTTPCookies"/>
-+      </optional>
-     </element>
-   </define>
- 
-@@ -1849,6 +1870,9 @@
-       <optional>
-         <ref name="encryption"/>
-       </optional>
-+      <optional>
-+        <ref name="diskSourceNetworkProtocolHTTPCookies"/>
-+      </optional>
-     </element>
-   </define>
- 
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 70bbc35bb3..d066d3aac1 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -9249,6 +9249,62 @@ virDomainDiskSourcePoolDefParse(xmlNodePtr node,
- }
- 
- 
-+static virStorageNetCookieDefPtr
-+virDomainStorageNetCookieParse(xmlNodePtr node,
-+                               xmlXPathContextPtr ctxt)
-+{
-+    VIR_XPATH_NODE_AUTORESTORE(ctxt);
-+    g_autoptr(virStorageNetCookieDef) cookie = NULL;
-+
-+    ctxt->node = node;
-+
-+    cookie = g_new0(virStorageNetCookieDef, 1);
-+
-+    if (!(cookie->name = virXPathString("string(./@name)", ctxt))) {
-+        virReportError(VIR_ERR_XML_ERROR, "%s", _("missing cookie name"));
-+        return NULL;
-+    }
-+
-+    if (!(cookie->value = virXPathString("string(.)", ctxt))) {
-+        virReportError(VIR_ERR_XML_ERROR, _("missing value for cookie '%s'"),
-+                       cookie->name);
-+        return NULL;
-+    }
-+
-+    return g_steal_pointer(&cookie);
-+}
-+
-+
-+static int
-+virDomainStorageNetCookiesParse(xmlNodePtr node,
-+                                xmlXPathContextPtr ctxt,
-+                                virStorageSourcePtr src)
-+{
-+    VIR_XPATH_NODE_AUTORESTORE(ctxt);
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    ssize_t nnodes;
-+    size_t i;
-+
-+    ctxt->node = node;
-+
-+    if ((nnodes = virXPathNodeSet("./cookie", ctxt, &nodes)) < 0)
-+        return -1;
-+
-+    src->cookies = g_new0(virStorageNetCookieDefPtr, nnodes);
-+    src->ncookies = nnodes;
-+
-+    for (i = 0; i < nnodes; i++) {
-+        if (!(src->cookies[i] = virDomainStorageNetCookieParse(nodes[i], ctxt)))
-+            return -1;
-+    }
-+
-+    if (virStorageSourceNetCookiesValidate(src) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
- static int
- virDomainDiskSourceNetworkParse(xmlNodePtr node,
-                                 xmlXPathContextPtr ctxt,
-@@ -9260,6 +9316,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
-     g_autofree char *haveTLS = NULL;
-     g_autofree char *tlsCfg = NULL;
-     g_autofree char *sslverifystr = NULL;
-+    xmlNodePtr tmpnode;
- 
-     if (!(protocol = virXMLPropString(node, "protocol"))) {
-         virReportError(VIR_ERR_XML_ERROR, "%s",
-@@ -9345,6 +9402,13 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
-         src->sslverify = verify;
-     }
- 
-+    if ((src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
-+         src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS) &&
-+        (tmpnode = virXPathNode("./cookies", ctxt))) {
-+        if (virDomainStorageNetCookiesParse(tmpnode, ctxt, src) < 0)
-+            return -1;
-+    }
-+
-     return 0;
- }
- 
-@@ -24281,6 +24345,22 @@ virDomainSourceDefFormatSeclabel(virBufferPtr buf,
- }
- 
- 
-+static void
-+virDomainDiskSourceFormatNetworkCookies(virBufferPtr buf,
-+                                        virStorageSourcePtr src)
-+{
-+    g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
-+    size_t i;
-+
-+    for (i = 0; i < src->ncookies; i++) {
-+        virBufferEscapeString(&childBuf, "<cookie name='%s'>", src->cookies[i]->name);
-+        virBufferEscapeString(&childBuf, "%s</cookie>\n", src->cookies[i]->value);
-+    }
-+
-+    virXMLFormatElement(buf, "cookies", NULL, &childBuf);
-+}
-+
-+
- static int
- virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
-                                  virBufferPtr childBuf,
-@@ -24331,6 +24411,8 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
-                           virTristateBoolTypeToString(src->sslverify));
-     }
- 
-+    virDomainDiskSourceFormatNetworkCookies(childBuf, src);
-+
-     return 0;
- }
- 
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index dbbec0d567..ac5527ef01 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -3123,6 +3123,7 @@ virStorageSourceIsEmpty;
- virStorageSourceIsLocalStorage;
- virStorageSourceIsRelative;
- virStorageSourceIsSameLocation;
-+virStorageSourceNetCookiesValidate;
- virStorageSourceNetworkAssignDefaultPorts;
- virStorageSourceNew;
- virStorageSourceNewFromBacking;
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index cfa77fccf8..6350168d73 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2157,6 +2157,118 @@ virStorageSourceSeclabelsCopy(virStorageSourcePtr to,
- }
- 
- 
-+void
-+virStorageNetCookieDefFree(virStorageNetCookieDefPtr def)
-+{
-+    if (!def)
-+        return;
-+
-+    g_free(def->name);
-+    g_free(def->value);
-+
-+    g_free(def);
-+}
-+
-+
-+static void
-+virStorageSourceNetCookiesClear(virStorageSourcePtr src)
-+{
-+    size_t i;
-+
-+    if (!src || !src->cookies)
-+        return;
-+
-+    for (i = 0; i < src->ncookies; i++)
-+        virStorageNetCookieDefFree(src->cookies[i]);
-+
-+    g_clear_pointer(&src->cookies, g_free);
-+    src->ncookies = 0;
-+}
-+
-+
-+static void
-+virStorageSourceNetCookiesCopy(virStorageSourcePtr to,
-+                               const virStorageSource *from)
-+{
-+    size_t i;
-+
-+    if (from->ncookies == 0)
-+        return;
-+
-+    to->cookies = g_new0(virStorageNetCookieDefPtr, from->ncookies);
-+    to->ncookies = from->ncookies;
-+
-+    for (i = 0; i < from->ncookies; i++) {
-+        to->cookies[i]->name = g_strdup(from->cookies[i]->name);
-+        to->cookies[i]->value = g_strdup(from->cookies[i]->value);
-+    }
-+}
-+
-+
-+/* see https://tools.ietf.org/html/rfc6265#section-4.1.1 */
-+static const char virStorageSourceCookieValueInvalidChars[] =
-+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F"
-+ "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"
-+ " \",;\\";
-+
-+/* in addition cookie name can't contain these */
-+static const char virStorageSourceCookieNameInvalidChars[] =
-+ "()<>@:/[]?={}";
-+
-+static int
-+virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
-+{
-+    /* name must have at least 1 character */
-+    if (*(def->name) == '\0') {
-+        virReportError(VIR_ERR_XML_ERROR, "%s",
-+                       _("cookie name must not be empty"));
-+        return -1;
-+    }
-+
-+    /* check invalid characters in name */
-+    if (virStringHasChars(def->name, virStorageSourceCookieValueInvalidChars) ||
-+        virStringHasChars(def->name, virStorageSourceCookieNameInvalidChars)) {
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("cookie name '%s' contains invalid characters"),
-+                       def->name);
-+        return -1;
-+    }
-+
-+    /* check invalid characters in value */
-+    if (virStringHasChars(def->value, virStorageSourceCookieValueInvalidChars)) {
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("value of cookie '%s' contains invalid characters"),
-+                       def->name);
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+
-+int
-+virStorageSourceNetCookiesValidate(virStorageSourcePtr src)
-+{
-+    size_t i;
-+    size_t j;
-+
-+    for (i = 0; i < src->ncookies; i++) {
-+        if (virStorageSourceNetCookieValidate(src->cookies[i]) < 0)
-+            return -1;
-+
-+        for (j = i + 1; j < src->ncookies; j++) {
-+            if (STREQ(src->cookies[i]->name, src->cookies[j]->name)) {
-+                virReportError(VIR_ERR_XML_ERROR, _("duplicate cookie '%s'"),
-+                               src->cookies[i]->name);
-+                return -1;
-+            }
-+        }
-+    }
-+
-+    return 0;
-+}
-+
-+
- static virStorageTimestampsPtr
- virStorageTimestampsCopy(const virStorageTimestamps *src)
- {
-@@ -2299,6 +2411,8 @@ virStorageSourceCopy(const virStorageSource *src,
-         def->nhosts = src->nhosts;
-     }
- 
-+    virStorageSourceNetCookiesCopy(def, src);
-+
-     if (src->srcpool &&
-         !(def->srcpool = virStorageSourcePoolDefCopy(src->srcpool)))
-         return NULL;
-@@ -2560,6 +2674,7 @@ virStorageSourceClear(virStorageSourcePtr def)
-     VIR_FREE(def->volume);
-     VIR_FREE(def->snapshot);
-     VIR_FREE(def->configFile);
-+    virStorageSourceNetCookiesClear(def);
-     virStorageSourcePoolDefFree(def->srcpool);
-     virBitmapFree(def->features);
-     VIR_FREE(def->compat);
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index fab4248c3d..1c7c046ad6 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -162,6 +162,17 @@ struct _virStorageNetHostDef {
-     char *socket;  /* path to unix socket */
- };
- 
-+typedef struct _virStorageNetCookieDef virStorageNetCookieDef;
-+typedef virStorageNetCookieDef *virStorageNetCookieDefPtr;
-+struct _virStorageNetCookieDef {
-+    char *name;
-+    char *value;
-+};
-+
-+void virStorageNetCookieDefFree(virStorageNetCookieDefPtr def);
-+
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageNetCookieDef, virStorageNetCookieDefFree);
-+
- /* Information for a storage volume from a virStoragePool */
- 
- /*
-@@ -276,6 +287,8 @@ struct _virStorageSource {
-                          the source definition */
-     size_t nhosts;
-     virStorageNetHostDefPtr hosts;
-+    size_t ncookies;
-+    virStorageNetCookieDefPtr *cookies;
-     virStorageSourcePoolDefPtr srcpool;
-     virStorageAuthDefPtr auth;
-     bool authInherited;
-@@ -477,6 +490,8 @@ int virStorageSourceUpdateCapacity(virStorageSourcePtr src,
- int virStorageSourceNewFromBacking(virStorageSourcePtr parent,
-                                    virStorageSourcePtr *backing);
- 
-+int virStorageSourceNetCookiesValidate(virStorageSourcePtr src);
-+
- virStorageSourcePtr virStorageSourceCopy(const virStorageSource *src,
-                                          bool backingChain)
-     ATTRIBUTE_NONNULL(1);
-diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
-index bdcc1977f2..bafb77c8ec 100644
---- a/tests/genericxml2xmlindata/disk-network-http.xml
-+++ b/tests/genericxml2xmlindata/disk-network-http.xml
-@@ -33,6 +33,10 @@
-       <driver name='qemu' type='raw'/>
-       <source protocol='http' name='test3.img'>
-         <host name='example.org' port='1234'/>
-+        <cookies>
-+          <cookie name='test'>testcookievalue</cookie>
-+          <cookie name='test2'>blurb</cookie>
-+        </cookies>
-       </source>
-       <target dev='vdc' bus='virtio'/>
-     </disk>
-@@ -41,6 +45,10 @@
-       <source protocol='https' name='test4.img'>
-         <host name='example.org' port='1234'/>
-         <ssl verify='yes'/>
-+        <cookies>
-+          <cookie name='test'>testcookievalue</cookie>
-+          <cookie name='test2'>blurb</cookie>
-+        </cookies>
-       </source>
-       <target dev='vdd' bus='virtio'/>
-     </disk>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-Add-support-for-http-s-query-strings.patch b/SOURCES/libvirt-conf-Add-support-for-http-s-query-strings.patch
deleted file mode 100644
index 32169e7..0000000
--- a/SOURCES/libvirt-conf-Add-support-for-http-s-query-strings.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From 45ecbd824c92bd05a46557bfcaff39196f701e6c Mon Sep 17 00:00:00 2001
-Message-Id: <45ecbd824c92bd05a46557bfcaff39196f701e6c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:45 +0200
-Subject: [PATCH] conf: Add support for http(s) query strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a new attribute for holding the query part for http(s) disks.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 56368124728f0d65dde07244c741b459fcd6b939)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <b60abcf1e7711e9e29175e1fdcfe2820d5694a17.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/formatdomain.html.in                                  | 7 ++++++-
- docs/schemas/domaincommon.rng                              | 6 ++++++
- src/conf/domain_conf.c                                     | 5 +++++
- src/util/virstoragefile.c                                  | 2 ++
- src/util/virstoragefile.h                                  | 1 +
- tests/qemuxml2argvdata/disk-network-http.xml               | 2 +-
- .../qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml | 2 +-
- 7 files changed, 22 insertions(+), 3 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 143db21d4d..9c588185df 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2837,7 +2837,7 @@
-   &lt;/disk&gt;
-   &lt;disk type='network' device='cdrom'&gt;
-     &lt;driver name='qemu' type='raw'/&gt;
--    &lt;source protocol="http" name="url_path"&gt;
-+    &lt;source protocol="http" name="url_path" query="foo=bar&amp;amp;baz=flurb&gt;
-       &lt;host name="hostname" port="80"/&gt;
-       &lt;cookies&gt;
-         &lt;cookie name="test"&gt;somevalue&lt;/cookie&gt;
-@@ -3103,6 +3103,11 @@
-               ('tls' <span class="since">Since 4.5.0</span>)
-               </p>
- 
-+              <p>For protocols <code>http</code> and <code>https</code> an
-+              optional attribute <code>query</code> specifies the query string.
-+              (<span class="since">Since 6.2.0</span>)
-+              </p>
-+
-               <p>For "iscsi" (<span class="since">since 1.0.4</span>), the
-               <code>name</code> attribute may include a logical unit number,
-               separated from the target's name by a slash (e.g.,
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index e17f7ff8c0..dd8f27243a 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1869,6 +1869,9 @@
-           </choice>
-         </attribute>
-         <attribute name="name"/>
-+        <optional>
-+          <attribute name="query"/>
-+        </optional>
-         <ref name="diskSourceCommon"/>
-         <ref name="diskSourceNetworkHost"/>
-         <optional>
-@@ -1894,6 +1897,9 @@
-           </choice>
-         </attribute>
-         <attribute name="name"/>
-+        <optional>
-+          <attribute name="query"/>
-+        </optional>
-         <ref name="diskSourceCommon"/>
-         <ref name="diskSourceNetworkHost"/>
-         <optional>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index e3755fa285..28160a2967 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -9382,6 +9382,10 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
-     /* config file currently only works with remote disks */
-     src->configFile = virXPathString("string(./config/@file)", ctxt);
- 
-+    if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
-+        src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS)
-+        src->query = virXMLPropString(node, "query");
-+
-     if (virDomainStorageNetworkParseHosts(node, &src->hosts, &src->nhosts) < 0)
-         return -1;
- 
-@@ -24390,6 +24394,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
-         path = g_strdup_printf("%s/%s", src->volume, src->path);
- 
-     virBufferEscapeString(attrBuf, " name='%s'", path ? path : src->path);
-+    virBufferEscapeString(attrBuf, " query='%s'", src->query);
- 
-     if (src->haveTLS != VIR_TRISTATE_BOOL_ABSENT &&
-         !(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index f8d741f040..4082e3f5f7 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2418,6 +2418,7 @@ virStorageSourceCopy(const virStorageSource *src,
-     def->compat = g_strdup(src->compat);
-     def->tlsAlias = g_strdup(src->tlsAlias);
-     def->tlsCertdir = g_strdup(src->tlsCertdir);
-+    def->query = g_strdup(src->query);
- 
-     if (src->sliceStorage)
-         def->sliceStorage = virStorageSourceSliceCopy(src->sliceStorage);
-@@ -2696,6 +2697,7 @@ virStorageSourceClear(virStorageSourcePtr def)
-     VIR_FREE(def->volume);
-     VIR_FREE(def->snapshot);
-     VIR_FREE(def->configFile);
-+    VIR_FREE(def->query);
-     virStorageSourceNetCookiesClear(def);
-     virStorageSourcePoolDefFree(def->srcpool);
-     virBitmapFree(def->features);
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 0230f44652..8089d1e07f 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -285,6 +285,7 @@ struct _virStorageSource {
-     char *snapshot; /* for storage systems supporting internal snapshots */
-     char *configFile; /* some storage systems use config file as part of
-                          the source definition */
-+    char *query; /* query string for HTTP based protocols */
-     size_t nhosts;
-     virStorageNetHostDefPtr hosts;
-     size_t ncookies;
-diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
-index 93e6617433..3abf499019 100644
---- a/tests/qemuxml2argvdata/disk-network-http.xml
-+++ b/tests/qemuxml2argvdata/disk-network-http.xml
-@@ -42,7 +42,7 @@
-     </disk>
-     <disk type='network' device='disk'>
-       <driver name='qemu' type='raw'/>
--      <source protocol='https' name='test4.img'>
-+      <source protocol='https' name='test4.img' query='par=val&amp;other=ble'>
-         <host name='example.org' port='1234'/>
-         <ssl verify='no'/>
-         <cookies>
-diff --git a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-index 60073c227c..45b01841ec 100644
---- a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-@@ -46,7 +46,7 @@
-     </disk>
-     <disk type='network' device='disk'>
-       <driver name='qemu' type='raw'/>
--      <source protocol='https' name='test4.img'>
-+      <source protocol='https' name='test4.img' query='par=val&amp;other=ble'>
-         <host name='example.org' port='1234'/>
-         <ssl verify='no'/>
-         <cookies>
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-conf-Add-support-for-modifying-ssl-validation-for-https-ftps-disks.patch b/SOURCES/libvirt-conf-Add-support-for-modifying-ssl-validation-for-https-ftps-disks.patch
deleted file mode 100644
index 995852c..0000000
--- a/SOURCES/libvirt-conf-Add-support-for-modifying-ssl-validation-for-https-ftps-disks.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-From ffe8028ca07eb049b12d5c152b3d66489378d731 Mon Sep 17 00:00:00 2001
-Message-Id: <ffe8028ca07eb049b12d5c152b3d66489378d731@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:56 +0100
-Subject: [PATCH] conf: Add support for modifying ssl validation for https/ftps
- disks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-To allow turning off verification of SSL cerificates add a new element
-<ssl> to the disk source XML which will allow configuring the validation
-process using the 'verify' attribute.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 25481e25b14108373bf2e5e95c04fe30bff96bb4)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <ede13179128fc9ef05036a5408f4115132a2c12d.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in                     |  9 ++++
- docs/schemas/domaincommon.rng                 | 51 ++++++++++++++++++-
- src/conf/domain_conf.c                        | 19 +++++++
- src/util/virstoragefile.c                     |  1 +
- src/util/virstoragefile.h                     |  1 +
- .../disk-network-http.xml                     |  9 ++++
- 6 files changed, 88 insertions(+), 2 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index e9830ab231..2cce247958 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2847,6 +2847,7 @@
-     &lt;driver name='qemu' type='raw'/&gt;
-     &lt;source protocol="https" name="url_path"&gt;
-       &lt;host name="hostname" port="443"/&gt;
-+      &lt;ssl verify="no"/&gt;
-     &lt;/source&gt;
-     &lt;target dev='hdf' bus='ide' tray='open'/&gt;
-     &lt;readonly/&gt;
-@@ -3373,6 +3374,14 @@
-             The <code>offset</code> and <code>size</code> values are in bytes.
-             <span class="since">Since 6.1.0</span>
-           </dd>
-+          <dt><code>ssl</code></dt>
-+          <dd>
-+            For <code>https</code> and <code>ftps</code> accessed storage it's
-+            possible to tweak the SSL transport parameters with this element.
-+            The <code>verify</code> attribute allows to turn on or off SSL
-+            certificate validation. Supported values are <code>yes</code> and
-+            <code>no</code>. <span class="since">Since 6.2.0</span>
-+          </dd>
-         </dl>
- 
-         <p>
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index aa70e340b9..548601b61c 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1808,12 +1808,39 @@
-     </element>
-   </define>
- 
-+  <define name="diskSourceNetworkProtocolSSLVerify">
-+    <element name="ssl">
-+      <attribute name="verify">
-+        <ref name="virYesNo"/>
-+      </attribute>
-+      <empty/>
-+    </element>
-+  </define>
-+
-+  <define name="diskSourceNetworkProtocolHTTPS">
-+    <element name="source">
-+      <attribute name="protocol">
-+        <choice>
-+          <value>https</value>
-+        </choice>
-+      </attribute>
-+      <attribute name="name"/>
-+      <ref name="diskSourceCommon"/>
-+      <ref name="diskSourceNetworkHost"/>
-+      <optional>
-+        <ref name="encryption"/>
-+      </optional>
-+      <optional>
-+        <ref name="diskSourceNetworkProtocolSSLVerify"/>
-+      </optional>
-+    </element>
-+  </define>
-+
-   <define name="diskSourceNetworkProtocolHTTP">
-     <element name="source">
-       <attribute name="protocol">
-         <choice>
-           <value>http</value>
--          <value>https</value>
-         </choice>
-       </attribute>
-       <attribute name="name"/>
-@@ -1825,13 +1852,31 @@
-     </element>
-   </define>
- 
-+  <define name="diskSourceNetworkProtocolFTPS">
-+    <element name="source">
-+      <attribute name="protocol">
-+        <choice>
-+          <value>ftps</value>
-+        </choice>
-+      </attribute>
-+      <attribute name="name"/>
-+      <ref name="diskSourceCommon"/>
-+      <ref name="diskSourceNetworkHost"/>
-+      <optional>
-+        <ref name="encryption"/>
-+      </optional>
-+      <optional>
-+        <ref name="diskSourceNetworkProtocolSSLVerify"/>
-+      </optional>
-+    </element>
-+  </define>
-+
-   <define name="diskSourceNetworkProtocolSimple">
-     <element name="source">
-       <attribute name="protocol">
-         <choice>
-           <value>sheepdog</value>
-           <value>ftp</value>
--          <value>ftps</value>
-           <value>tftp</value>
-         </choice>
-       </attribute>
-@@ -1909,6 +1954,8 @@
-       <ref name="diskSourceNetworkProtocolRBD"/>
-       <ref name="diskSourceNetworkProtocolISCSI"/>
-       <ref name="diskSourceNetworkProtocolHTTP"/>
-+      <ref name="diskSourceNetworkProtocolHTTPS"/>
-+      <ref name="diskSourceNetworkProtocolFTPS"/>
-       <ref name="diskSourceNetworkProtocolSimple"/>
-       <ref name="diskSourceNetworkProtocolVxHS"/>
-     </choice>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index b3c4084c38..70bbc35bb3 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -9259,6 +9259,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
-     g_autofree char *protocol = NULL;
-     g_autofree char *haveTLS = NULL;
-     g_autofree char *tlsCfg = NULL;
-+    g_autofree char *sslverifystr = NULL;
- 
-     if (!(protocol = virXMLPropString(node, "protocol"))) {
-         virReportError(VIR_ERR_XML_ERROR, "%s",
-@@ -9331,6 +9332,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
- 
-     virStorageSourceInitiatorParseXML(ctxt, &src->initiator);
- 
-+    if ((src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
-+         src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) &&
-+        (sslverifystr = virXPathString("string(./ssl/@verify)", ctxt))) {
-+        int verify;
-+        if ((verify = virTristateBoolTypeFromString(sslverifystr)) < 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("invalid ssl verify mode '%s'"), sslverifystr);
-+            return -1;
-+        }
-+
-+        src->sslverify = verify;
-+    }
-+
-     return 0;
- }
- 
-@@ -24312,6 +24326,11 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
- 
-     virStorageSourceInitiatorFormatXML(&src->initiator, childBuf);
- 
-+    if (src->sslverify != VIR_TRISTATE_BOOL_ABSENT) {
-+        virBufferAsprintf(childBuf, "<ssl verify='%s'/>\n",
-+                          virTristateBoolTypeToString(src->sslverify));
-+    }
-+
-     return 0;
- }
- 
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index b88763b267..cfa77fccf8 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2270,6 +2270,7 @@ virStorageSourceCopy(const virStorageSource *src,
-     def->cachemode = src->cachemode;
-     def->discard = src->discard;
-     def->detect_zeroes = src->detect_zeroes;
-+    def->sslverify = src->sslverify;
- 
-     /* storage driver metadata are not copied */
-     def->drv = NULL;
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 5b995d54ab..fab4248c3d 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -282,6 +282,7 @@ struct _virStorageSource {
-     virStorageEncryptionPtr encryption;
-     bool encryptionInherited;
-     virStoragePRDefPtr pr;
-+    virTristateBool sslverify;
- 
-     virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */
- 
-diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
-index fde1222fd0..bdcc1977f2 100644
---- a/tests/genericxml2xmlindata/disk-network-http.xml
-+++ b/tests/genericxml2xmlindata/disk-network-http.xml
-@@ -25,6 +25,7 @@
-       <driver name='qemu' type='raw'/>
-       <source protocol='https' name='test2.img'>
-         <host name='example.org' port='443'/>
-+        <ssl verify='no'/>
-       </source>
-       <target dev='vdb' bus='virtio'/>
-     </disk>
-@@ -35,6 +36,14 @@
-       </source>
-       <target dev='vdc' bus='virtio'/>
-     </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='https' name='test4.img'>
-+        <host name='example.org' port='1234'/>
-+        <ssl verify='yes'/>
-+      </source>
-+      <target dev='vdd' bus='virtio'/>
-+    </disk>
-     <controller type='usb' index='0'/>
-     <controller type='pci' index='0' model='pci-root'/>
-     <input type='mouse' bus='ps2'/>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-Add-support-for-setting-timeout-and-readahead-size-for-network-disks.patch b/SOURCES/libvirt-conf-Add-support-for-setting-timeout-and-readahead-size-for-network-disks.patch
deleted file mode 100644
index 5fe493e..0000000
--- a/SOURCES/libvirt-conf-Add-support-for-setting-timeout-and-readahead-size-for-network-disks.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-From 3050ddce41896311b8c3ad06f148bea358e597b8 Mon Sep 17 00:00:00 2001
-Message-Id: <3050ddce41896311b8c3ad06f148bea358e597b8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:58 +0100
-Subject: [PATCH] conf: Add support for setting timeout and readahead size for
- network disks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some disk backends support configuring the readahead buffer or timeout
-for requests. Add the knobs to the XML.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 63fd46177367c6653c4c986558f6d0e4a700cfcc)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <2694bc6f9a327f89d82da18320e7137152915ad3.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in                     | 16 +++++++++++++
- docs/schemas/domaincommon.rng                 | 23 +++++++++++++++++++
- src/conf/domain_conf.c                        | 19 +++++++++++++++
- src/util/virstoragefile.c                     |  2 ++
- src/util/virstoragefile.h                     |  3 +++
- .../disk-network-http.xml                     |  2 ++
- 6 files changed, 65 insertions(+)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 5a10d64e83..2b8f9eabc2 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2842,6 +2842,8 @@
-       &lt;cookies&gt;
-         &lt;cookie name="test"&gt;somevalue&lt;/cookie&gt;
-       &lt;/cookies&gt;
-+      &lt;readahead size='65536'/&gt;
-+      &lt;timeout seconds='6'/&gt;
-     &lt;/source&gt;
-     &lt;target dev='hde' bus='ide' tray='open'/&gt;
-     &lt;readonly/&gt;
-@@ -3392,6 +3394,20 @@
-             must conform to the HTTP specification.
-             <span class="since">Since 6.2.0</span>
-           </dd>
-+          <dt><code>readahead</code></dt>
-+          <dd>
-+            Specifies the size of the readahead buffer for protocols
-+            which support it. (all 'curl' based drivers in qemu). The size
-+            is in bytes. Note that '0' is considered as if the value is not
-+            provided.
-+            <span class="since">Since 6.2.0</span>
-+          </dd>
-+          <dt><code>timeout</code></dt>
-+          <dd>
-+            Specifies the connection timeout for protocols which support it.
-+            Note that '0' is considered as if the value is not provided.
-+            <span class="since">Since 6.2.0</span>
-+          </dd>
-         </dl>
- 
-         <p>
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index bdf35e64f6..3a0edbed97 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1808,6 +1808,25 @@
-     </element>
-   </define>
- 
-+  <define name="diskSourceNetworkProtocolPropsCommon">
-+    <optional>
-+      <element name="readahead">
-+        <attribute name="size">
-+          <ref name="positiveInteger"/>
-+        </attribute>
-+        <empty/>
-+      </element>
-+    </optional>
-+    <optional>
-+      <element name="timeout">
-+        <attribute name="seconds">
-+          <ref name="positiveInteger"/>
-+        </attribute>
-+        <empty/>
-+      </element>
-+    </optional>
-+  </define>
-+
-   <define name="diskSourceNetworkProtocolSSLVerify">
-     <element name="ssl">
-       <attribute name="verify">
-@@ -1854,6 +1873,7 @@
-       <optional>
-         <ref name="diskSourceNetworkProtocolHTTPCookies"/>
-       </optional>
-+      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-     </element>
-   </define>
- 
-@@ -1873,6 +1893,7 @@
-       <optional>
-         <ref name="diskSourceNetworkProtocolHTTPCookies"/>
-       </optional>
-+      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-     </element>
-   </define>
- 
-@@ -1892,6 +1913,7 @@
-       <optional>
-         <ref name="diskSourceNetworkProtocolSSLVerify"/>
-       </optional>
-+      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-     </element>
-   </define>
- 
-@@ -1910,6 +1932,7 @@
-       <optional>
-         <ref name="encryption"/>
-       </optional>
-+      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-     </element>
-   </define>
- 
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index d066d3aac1..8aec85e83c 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -9409,6 +9409,19 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
-             return -1;
-     }
- 
-+    if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
-+        src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
-+        src->protocol == VIR_STORAGE_NET_PROTOCOL_FTP ||
-+        src->protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
-+
-+        if (virXPathULongLong("string(./readahead/@size)", ctxt, &src->readahead) == -2 ||
-+            virXPathULongLong("string(./timeout/@seconds)", ctxt, &src->timeout) == -2) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                          _("invalid readahead size or timeout"));
-+            return -1;
-+        }
-+    }
-+
-     return 0;
- }
- 
-@@ -24413,6 +24426,12 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
- 
-     virDomainDiskSourceFormatNetworkCookies(childBuf, src);
- 
-+    if (src->readahead)
-+        virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
-+
-+    if (src->timeout)
-+        virBufferAsprintf(childBuf, "<timeout seconds='%llu'/>\n", src->timeout);
-+
-     return 0;
- }
- 
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 6350168d73..7893e054c3 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2383,6 +2383,8 @@ virStorageSourceCopy(const virStorageSource *src,
-     def->discard = src->discard;
-     def->detect_zeroes = src->detect_zeroes;
-     def->sslverify = src->sslverify;
-+    def->readahead = src->readahead;
-+    def->timeout = src->timeout;
- 
-     /* storage driver metadata are not copied */
-     def->drv = NULL;
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 1c7c046ad6..1abdaf89ce 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -296,6 +296,9 @@ struct _virStorageSource {
-     bool encryptionInherited;
-     virStoragePRDefPtr pr;
-     virTristateBool sslverify;
-+    /* both values below have 0 as default value */
-+    unsigned long long readahead; /* size of the readahead buffer in bytes */
-+    unsigned long long timeout; /* connection timeout in seconds */
- 
-     virStorageSourceNVMeDefPtr nvme; /* type == VIR_STORAGE_TYPE_NVME */
- 
-diff --git a/tests/genericxml2xmlindata/disk-network-http.xml b/tests/genericxml2xmlindata/disk-network-http.xml
-index bafb77c8ec..a8430b8365 100644
---- a/tests/genericxml2xmlindata/disk-network-http.xml
-+++ b/tests/genericxml2xmlindata/disk-network-http.xml
-@@ -49,6 +49,8 @@
-           <cookie name='test'>testcookievalue</cookie>
-           <cookie name='test2'>blurb</cookie>
-         </cookies>
-+        <readahead size='65536'/>
-+        <timeout seconds='10'/>
-       </source>
-       <target dev='vdd' bus='virtio'/>
-     </disk>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-Don-t-format-http-cookies-unless-VIR_DOMAIN_DEF_FORMAT_SECURE-is-used.patch b/SOURCES/libvirt-conf-Don-t-format-http-cookies-unless-VIR_DOMAIN_DEF_FORMAT_SECURE-is-used.patch
deleted file mode 100644
index 6c4c17c..0000000
--- a/SOURCES/libvirt-conf-Don-t-format-http-cookies-unless-VIR_DOMAIN_DEF_FORMAT_SECURE-is-used.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 898e0003ae21e9fbe49995980c8746e9d2ac9b8b Mon Sep 17 00:00:00 2001
-Message-Id: <898e0003ae21e9fbe49995980c8746e9d2ac9b8b@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 14:23:06 +0200
-Subject: [PATCH] conf: Don't format http cookies unless
- VIR_DOMAIN_DEF_FORMAT_SECURE is used
-
-Starting with 3b076391befc3fe72deb0c244ac6c2b4c100b410
-(v6.1.0-122-g3b076391be) we support http cookies. Since they may contain
-somewhat sensitive information we should not format them into the XML
-unless VIR_DOMAIN_DEF_FORMAT_SECURE is asserted.
-
-Reported-by: Han Han <hhan@redhat.com>
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit a5b064bf4b17a9884d7d361733737fb614ad8979)
-
-CVE-2020-14301
-Message-Id: <592a0b594666f580e743b6bd2b4ddccbd1e0cc7c.1592914898.git.pkrempa@redhat.com>
-
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/conf/domain_conf.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index ed9ca0e9d8..60962ee7c1 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -24377,11 +24377,15 @@ virDomainSourceDefFormatSeclabel(virBufferPtr buf,
- 
- static void
- virDomainDiskSourceFormatNetworkCookies(virBufferPtr buf,
--                                        virStorageSourcePtr src)
-+                                        virStorageSourcePtr src,
-+                                        unsigned int flags)
- {
-     g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
-     size_t i;
- 
-+    if (!(flags & VIR_DOMAIN_DEF_FORMAT_SECURE))
-+        return;
-+
-     for (i = 0; i < src->ncookies; i++) {
-         virBufferEscapeString(&childBuf, "<cookie name='%s'>", src->cookies[i]->name);
-         virBufferEscapeString(&childBuf, "%s</cookie>\n", src->cookies[i]->value);
-@@ -24442,7 +24446,7 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
-                           virTristateBoolTypeToString(src->sslverify));
-     }
- 
--    virDomainDiskSourceFormatNetworkCookies(childBuf, src);
-+    virDomainDiskSourceFormatNetworkCookies(childBuf, src, flags);
- 
-     if (src->readahead)
-         virBufferAsprintf(childBuf, "<readahead size='%llu'/>\n", src->readahead);
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-conf-Don-t-generate-machine-names-with-a-dot.patch b/SOURCES/libvirt-conf-Don-t-generate-machine-names-with-a-dot.patch
deleted file mode 100644
index 1a24e0b..0000000
--- a/SOURCES/libvirt-conf-Don-t-generate-machine-names-with-a-dot.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 3ff27fe469c36e5655231f6759150350b17de298 Mon Sep 17 00:00:00 2001
-Message-Id: <3ff27fe469c36e5655231f6759150350b17de298@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:09 +0100
-Subject: [PATCH] conf: Don't generate machine names with a dot
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-According to the linked BZ, machined expects either valid
-hostname or valid FQDN (see systemd commit
-v239-3092-gd65652f1f2). While in case of multiple dots, a
-trailing one doesn't violate FQDN, it does violate the rule in
-case of something simple, like "domain.". But it's safe to remove
-it in both cases.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-Fixes: 45464db8ba502764cf37ec9335770248bdb3d9a8
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2695191a44eb7375225b4ad073825ed3563a172a)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <355e05e31ec98522fa0e03a0c2c7af8ca097070d.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 14 +++++++-------
- tests/virsystemdtest.c |  5 +++--
- 2 files changed, 10 insertions(+), 9 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 4b297c96bc..b3c4084c38 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -30688,20 +30688,20 @@ static void
- virDomainMachineNameAppendValid(virBufferPtr buf,
-                                 const char *name)
- {
--    bool skip_dot = false;
-+    bool skip = true;
- 
-     for (; *name; name++) {
-         if (strlen(virBufferCurrentContent(buf)) >= 64)
-             break;
- 
--        if (*name == '.') {
--            if (!skip_dot)
-+        if (*name == '.' || *name == '-') {
-+            if (!skip)
-                 virBufferAddChar(buf, *name);
--            skip_dot = true;
-+            skip = true;
-             continue;
-         }
- 
--        skip_dot = false;
-+        skip = false;
- 
-         if (!strchr(HOSTNAME_CHARS, *name))
-             continue;
-@@ -30709,8 +30709,8 @@ virDomainMachineNameAppendValid(virBufferPtr buf,
-         virBufferAddChar(buf, *name);
-     }
- 
--    /* trailing dashes are not allowed */
--    virBufferTrimChars(buf, "-");
-+    /* trailing dashes or dots are not allowed */
-+    virBufferTrimChars(buf, "-.");
- }
- 
- #undef HOSTNAME_CHARS
-diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
-index 26876850b8..eb510b40e4 100644
---- a/tests/virsystemdtest.c
-+++ b/tests/virsystemdtest.c
-@@ -733,7 +733,7 @@ mymain(void)
-     TEST_MACHINE("demo", 1, "qemu-1-demo");
-     TEST_MACHINE("demo-name", 2, "qemu-2-demo-name");
-     TEST_MACHINE("demo!name", 3, "qemu-3-demoname");
--    TEST_MACHINE(".demo", 4, "qemu-4-.demo");
-+    TEST_MACHINE(".demo", 4, "qemu-4-demo");
-     TEST_MACHINE("bull\U0001f4a9", 5, "qemu-5-bull");
-     TEST_MACHINE("demo..name", 6, "qemu-6-demo.name");
-     TEST_MACHINE("12345678901234567890123456789012345678901234567890123456789", 7,
-@@ -743,7 +743,8 @@ mymain(void)
-     TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec-acdc-56b3f8c5f678)", 100,
-                  "qemu-100-kstest-network-device-default-httpksc9eed63e-981e-48ec");
-     TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec--cdc-56b3f8c5f678)", 10,
--                 "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec");
-+                 "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec-c");
-+    TEST_MACHINE("demo.-.test.", 11, "qemu-11-demo.test");
- 
- # define TESTS_PM_SUPPORT_HELPER(name, function) \
-     do { \
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-Implement-support-for-slices-of-disk-source.patch b/SOURCES/libvirt-conf-Implement-support-for-slices-of-disk-source.patch
deleted file mode 100644
index 3083b2c..0000000
--- a/SOURCES/libvirt-conf-Implement-support-for-slices-of-disk-source.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From 6d5174acd7530d554ac2651f3e6a5da9f69fe6e4 Mon Sep 17 00:00:00 2001
-Message-Id: <6d5174acd7530d554ac2651f3e6a5da9f69fe6e4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:20 +0100
-Subject: [PATCH] conf: Implement support for <slices> of disk source
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Implement parsing and formatting of the 'storage' slice.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit bbf5d05cfd003e33600009cac7ea98ef1539dd7c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <d31bb27ae30140c9deb696972ee76a90d7bcc610.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 86 ++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 86 insertions(+)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index b46b92aecf..5c11f49463 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -9441,6 +9441,57 @@ virDomainStorageSourceParseBase(const char *type,
- }
- 
- 
-+static virStorageSourceSlicePtr
-+virDomainStorageSourceParseSlice(xmlNodePtr node,
-+                                 xmlXPathContextPtr ctxt)
-+{
-+    VIR_XPATH_NODE_AUTORESTORE(ctxt);
-+    g_autofree char *offset = NULL;
-+    g_autofree char *size = NULL;
-+    g_autofree virStorageSourceSlicePtr ret = g_new0(virStorageSourceSlice, 1);
-+
-+    ctxt->node = node;
-+
-+    if (!(offset = virXPathString("string(./@offset)", ctxt)) ||
-+        !(size = virXPathString("string(./@size)", ctxt))) {
-+        virReportError(VIR_ERR_XML_ERROR, "%s",
-+                       _("missing offset or size attribute of slice"));
-+        return NULL;
-+    }
-+
-+    if (virStrToLong_ullp(offset, NULL, 10, &ret->offset) < 0) {
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("malformed value '%s' of 'offset' attribute of slice"),
-+                       offset);
-+        return NULL;
-+    }
-+
-+    if (virStrToLong_ullp(size, NULL, 10, &ret->size) < 0) {
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("malformed value '%s' of 'size' attribute of slice"),
-+                       size);
-+        return NULL;
-+    }
-+
-+    return g_steal_pointer(&ret);
-+}
-+
-+
-+static int
-+virDomainStorageSourceParseSlices(virStorageSourcePtr src,
-+                                  xmlXPathContextPtr ctxt)
-+{
-+    xmlNodePtr node;
-+
-+    if ((node = virXPathNode("./slices/slice[@type='storage']", ctxt))) {
-+        if (!(src->sliceStorage = virDomainStorageSourceParseSlice(node, ctxt)))
-+            return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+
- /**
-  * virDomainStorageSourceParse:
-  * @node: XML node pointing to the source element to parse
-@@ -9506,6 +9557,9 @@ virDomainStorageSourceParse(xmlNodePtr node,
-     if (virDomainDiskSourcePRParse(node, ctxt, &src->pr) < 0)
-         return -1;
- 
-+    if (virDomainStorageSourceParseSlices(src, ctxt) < 0)
-+        return -1;
-+
-     if (virSecurityDeviceLabelDefParseXML(&src->seclabels, &src->nseclabels,
-                                           ctxt, flags) < 0)
-         return -1;
-@@ -24226,6 +24280,36 @@ virDomainDiskSourceFormatPrivateData(virBufferPtr buf,
- }
- 
- 
-+static void
-+virDomainDiskSourceFormatSlice(virBufferPtr buf,
-+                               const char *slicetype,
-+                               virStorageSourceSlicePtr slice)
-+{
-+    g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
-+
-+    if (!slice)
-+        return;
-+
-+    virBufferAsprintf(&attrBuf, " type='%s'", slicetype);
-+    virBufferAsprintf(&attrBuf, " offset='%llu'", slice->offset);
-+    virBufferAsprintf(&attrBuf, " size='%llu'", slice->size);
-+
-+    virXMLFormatElement(buf, "slice", &attrBuf, NULL);
-+}
-+
-+
-+static void
-+virDomainDiskSourceFormatSlices(virBufferPtr buf,
-+                                virStorageSourcePtr src)
-+{
-+    g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
-+
-+    virDomainDiskSourceFormatSlice(&childBuf, "storage", src->sliceStorage);
-+
-+    virXMLFormatElement(buf, "slices", NULL, &childBuf);
-+}
-+
-+
- /**
-  * virDomainDiskSourceFormat:
-  * @buf: output buffer
-@@ -24296,6 +24380,8 @@ virDomainDiskSourceFormat(virBufferPtr buf,
-         return -1;
-     }
- 
-+    virDomainDiskSourceFormatSlices(&childBuf, src);
-+
-     if (src->type != VIR_STORAGE_TYPE_NETWORK)
-         virDomainSourceDefFormatSeclabel(&childBuf, src->nseclabels,
-                                          src->seclabels, flags);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-Introduce-VIR_DOMAIN_TIMER_NAME_ARMVTIMER.patch b/SOURCES/libvirt-conf-Introduce-VIR_DOMAIN_TIMER_NAME_ARMVTIMER.patch
deleted file mode 100644
index ba2679f..0000000
--- a/SOURCES/libvirt-conf-Introduce-VIR_DOMAIN_TIMER_NAME_ARMVTIMER.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From eb6bdf4798eea9bae5ddca1fdd13fb5ef6e99596 Mon Sep 17 00:00:00 2001
-Message-Id: <eb6bdf4798eea9bae5ddca1fdd13fb5ef6e99596@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 13:12:35 +0100
-Subject: [PATCH] conf: Introduce VIR_DOMAIN_TIMER_NAME_ARMVTIMER
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This new timer model will be used to control the behavior of the
-virtual timer for KVM ARM/virt guests.
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3809e88a87e5898c9cf3a277cb32e20fca8fb2d0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214121237.623948-5-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/schemas/domaincommon.rng | 1 +
- src/conf/domain_conf.c        | 1 +
- src/conf/domain_conf.h        | 1 +
- src/libxl/libxl_conf.c        | 1 +
- src/libxl/xen_common.c        | 1 +
- src/qemu/qemu_command.c       | 2 ++
- src/qemu/qemu_domain.c        | 3 +++
- 7 files changed, 10 insertions(+)
-
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 026e753567..19476a2735 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1239,6 +1239,7 @@
-             <choice>
-               <value>hpet</value>
-               <value>pit</value>
-+              <value>armvtimer</value>
-             </choice>
-           </attribute>
-           <optional>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 58f72b3b0f..68d9ce9c4e 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -1062,6 +1062,7 @@ VIR_ENUM_IMPL(virDomainTimerName,
-               "tsc",
-               "kvmclock",
-               "hypervclock",
-+              "armvtimer",
- );
- 
- VIR_ENUM_IMPL(virDomainTimerTrack,
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index ee8eb3ddc0..ef2c1b80f7 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -1989,6 +1989,7 @@ typedef enum {
-     VIR_DOMAIN_TIMER_NAME_TSC,
-     VIR_DOMAIN_TIMER_NAME_KVMCLOCK,
-     VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK,
-+    VIR_DOMAIN_TIMER_NAME_ARMVTIMER,
- 
-     VIR_DOMAIN_TIMER_NAME_LAST
- } virDomainTimerNameType;
-diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
-index 2488bb9d32..ffac890262 100644
---- a/src/libxl/libxl_conf.c
-+++ b/src/libxl/libxl_conf.c
-@@ -361,6 +361,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr def,
-         case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
-         case VIR_DOMAIN_TIMER_NAME_RTC:
-         case VIR_DOMAIN_TIMER_NAME_PIT:
-+        case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                            _("unsupported timer type (name) '%s'"),
-                            virDomainTimerNameTypeToString(clock.timers[i]->name));
-diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c
-index 415549a42c..9a385eba0d 100644
---- a/src/libxl/xen_common.c
-+++ b/src/libxl/xen_common.c
-@@ -2182,6 +2182,7 @@ xenFormatCPUFeatures(virConfPtr conf, virDomainDefPtr def)
-         case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
-         case VIR_DOMAIN_TIMER_NAME_RTC:
-         case VIR_DOMAIN_TIMER_NAME_PIT:
-+        case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                            _("unsupported timer type (name) '%s'"),
-                            virDomainTimerNameTypeToString(def->clock.timers[i]->name));
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 0ad09baa1d..e1e19e0fcc 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -6200,6 +6200,7 @@ qemuBuildClockCommandLine(virCommandPtr cmd,
-         case VIR_DOMAIN_TIMER_NAME_TSC:
-         case VIR_DOMAIN_TIMER_NAME_KVMCLOCK:
-         case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
-+        case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-             /* Timers above are handled when building -cpu.  */
-         case VIR_DOMAIN_TIMER_NAME_LAST:
-             break;
-@@ -6631,6 +6632,7 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
-             if (timer->frequency > 0)
-                 virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
-             break;
-+        case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-         case VIR_DOMAIN_TIMER_NAME_PLATFORM:
-         case VIR_DOMAIN_TIMER_NAME_PIT:
-         case VIR_DOMAIN_TIMER_NAME_RTC:
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 846d1ecb29..4de4f9da53 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -5504,6 +5504,9 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
-                 return -1;
-             }
-             break;
-+
-+        case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-+            break;
-         }
-     }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-Move-and-rename-virDomainParseScaledValue.patch b/SOURCES/libvirt-conf-Move-and-rename-virDomainParseScaledValue.patch
deleted file mode 100644
index 52e7f0b..0000000
--- a/SOURCES/libvirt-conf-Move-and-rename-virDomainParseScaledValue.patch
+++ /dev/null
@@ -1,357 +0,0 @@
-From 0cee78aa69f5e3317b5e4853454a108e597228e5 Mon Sep 17 00:00:00 2001
-Message-Id: <0cee78aa69f5e3317b5e4853454a108e597228e5@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:33 +0200
-Subject: [PATCH] conf: Move and rename virDomainParseScaledValue()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There is nothing domain specific about the function, thus it
-should not have virDomain prefix. Also, the fact that it is a
-static function makes it impossible to use from other files.
-Move the function to virxml.c and drop the 'Domain' infix.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 04bd77a19f8312493151ce377da40577b1470a0b)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/conf/domain_conf.c: Some context mismatch, and some areas
-the original commit changes don't exist in this old libvirt yet
-or the calls are in other places because of refactors.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <26a847deef5941fd90f892cf5fe1443cf3fc90ca.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c   | 135 ++++++++++-----------------------------
- src/libvirt_private.syms |   1 +
- src/util/virxml.c        |  72 +++++++++++++++++++++
- src/util/virxml.h        |   8 +++
- 4 files changed, 114 insertions(+), 102 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 306926b64c..484f3b4352 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -10644,75 +10644,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
-     goto cleanup;
- }
- 
--/**
-- * virDomainParseScaledValue:
-- * @xpath: XPath to memory amount
-- * @units_xpath: XPath to units attribute
-- * @ctxt: XPath context
-- * @val: scaled value is stored here
-- * @scale: default scale for @val
-- * @max: maximal @val allowed
-- * @required: is the value required?
-- *
-- * Parse a value located at @xpath within @ctxt, and store the
-- * result into @val. The value is scaled by units located at
-- * @units_xpath (or the 'unit' attribute under @xpath if
-- * @units_xpath is NULL). If units are not present, the default
-- * @scale is used. If @required is set, then the value must
-- * exist; otherwise, the value is optional. The resulting value
-- * is in bytes.
-- *
-- * Returns 1 on success,
-- *         0 if the value was not present and !@required,
-- *         -1 on failure after issuing error.
-- */
--static int
--virDomainParseScaledValue(const char *xpath,
--                          const char *units_xpath,
--                          xmlXPathContextPtr ctxt,
--                          unsigned long long *val,
--                          unsigned long long scale,
--                          unsigned long long max,
--                          bool required)
--{
--    unsigned long long bytes;
--    g_autofree char *xpath_full = NULL;
--    g_autofree char *unit = NULL;
--    g_autofree char *bytes_str = NULL;
--
--    *val = 0;
--    xpath_full = g_strdup_printf("string(%s)", xpath);
--
--    bytes_str = virXPathString(xpath_full, ctxt);
--    if (!bytes_str) {
--        if (!required)
--            return 0;
--        virReportError(VIR_ERR_XML_ERROR,
--                       _("missing element or attribute '%s'"),
--                       xpath);
--        return -1;
--    }
--    VIR_FREE(xpath_full);
--
--    if (virStrToLong_ullp(bytes_str, NULL, 10, &bytes) < 0) {
--        virReportError(VIR_ERR_XML_ERROR,
--                       _("Invalid value '%s' for element or attribute '%s'"),
--                       bytes_str, xpath);
--        return -1;
--    }
--
--    if (units_xpath)
--         xpath_full = g_strdup_printf("string(%s)", units_xpath);
--    else
--         xpath_full = g_strdup_printf("string(%s/@unit)", xpath);
--    unit = virXPathString(xpath_full, ctxt);
--
--    if (virScaleInteger(&bytes, unit, scale, max) < 0)
--        return -1;
--
--    *val = bytes;
--    return 1;
--}
- 
- 
- /**
-@@ -10749,8 +10680,8 @@ virDomainParseMemory(const char *xpath,
- 
-     max = virMemoryMaxValue(capped);
- 
--    if (virDomainParseScaledValue(xpath, units_xpath, ctxt,
--                                  &bytes, 1024, max, required) < 0)
-+    if (virParseScaledValue(xpath, units_xpath, ctxt,
-+                            &bytes, 1024, max, required) < 0)
-         return -1;
- 
-     /* Yes, we really do use kibibytes for our internal sizing.  */
-@@ -10792,9 +10723,9 @@ virDomainParseMemoryLimit(const char *xpath,
-     int ret;
-     unsigned long long bytes;
- 
--    ret = virDomainParseScaledValue(xpath, units_xpath, ctxt, &bytes, 1024,
--                                    VIR_DOMAIN_MEMORY_PARAM_UNLIMITED << 10,
--                                    false);
-+    ret = virParseScaledValue(xpath, units_xpath, ctxt, &bytes, 1024,
-+                              VIR_DOMAIN_MEMORY_PARAM_UNLIMITED << 10,
-+                              false);
- 
-     if (ret < 0)
-         return -1;
-@@ -11125,9 +11056,9 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
-                                  "have an address"));
-                 goto error;
-             }
--            if ((rc = virDomainParseScaledValue("./pcihole64", NULL,
--                                                ctxt, &bytes, 1024,
--                                                1024ULL * ULONG_MAX, false)) < 0)
-+            if ((rc = virParseScaledValue("./pcihole64", NULL,
-+                                          ctxt, &bytes, 1024,
-+                                          1024ULL * ULONG_MAX, false)) < 0)
-                 goto error;
- 
-             if (rc == 1)
-@@ -11349,14 +11280,14 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
-         }
-     }
- 
--    if (virDomainParseScaledValue("./space_hard_limit[1]",
--                                  NULL, ctxt, &def->space_hard_limit,
--                                  1, ULLONG_MAX, false) < 0)
-+    if (virParseScaledValue("./space_hard_limit[1]",
-+                            NULL, ctxt, &def->space_hard_limit,
-+                            1, ULLONG_MAX, false) < 0)
-         goto error;
- 
--    if (virDomainParseScaledValue("./space_soft_limit[1]",
--                                  NULL, ctxt, &def->space_soft_limit,
--                                  1, ULLONG_MAX, false) < 0)
-+    if (virParseScaledValue("./space_soft_limit[1]",
-+                            NULL, ctxt, &def->space_soft_limit,
-+                            1, ULLONG_MAX, false) < 0)
-         goto error;
- 
-     cur = node->children;
-@@ -15205,8 +15136,8 @@ virDomainShmemDefParseXML(virDomainXMLOptionPtr xmlopt,
-         goto cleanup;
-     }
- 
--    if (virDomainParseScaledValue("./size[1]", NULL, ctxt,
--                                  &def->size, 1, ULLONG_MAX, false) < 0)
-+    if (virParseScaledValue("./size[1]", NULL, ctxt,
-+                            &def->size, 1, ULLONG_MAX, false) < 0)
-         goto cleanup;
- 
-     if ((server = virXPathNode("./server[1]", ctxt))) {
-@@ -19603,9 +19534,9 @@ virDomainCachetuneDefParseCache(xmlXPathContextPtr ctxt,
-         return -1;
-     }
- 
--    if (virDomainParseScaledValue("./@size", "./@unit",
--                                  ctxt, &size, 1024,
--                                  ULLONG_MAX, true) < 0)
-+    if (virParseScaledValue("./@size", "./@unit",
-+                            ctxt, &size, 1024,
-+                            ULLONG_MAX, true) < 0)
-         return -1;
- 
-     if (virResctrlAllocSetCacheSize(alloc, level, type, cache, size) < 0)
-@@ -20712,13 +20643,13 @@ virDomainDefParseXML(xmlDocPtr xml,
-                 VIR_FREE(tmp);
-             }
- 
--            if (virDomainParseScaledValue("./features/hpt/maxpagesize",
--                                          NULL,
--                                          ctxt,
--                                          &def->hpt_maxpagesize,
--                                          1024,
--                                          ULLONG_MAX,
--                                          false) < 0) {
-+            if (virParseScaledValue("./features/hpt/maxpagesize",
-+                                    NULL,
-+                                    ctxt,
-+                                    &def->hpt_maxpagesize,
-+                                    1024,
-+                                    ULLONG_MAX,
-+                                    false) < 0) {
-                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                "%s",
-                                _("Unable to parse HPT maxpagesize setting"));
-@@ -20944,13 +20875,13 @@ virDomainDefParseXML(xmlDocPtr xml,
-     }
- 
-     if (def->features[VIR_DOMAIN_FEATURE_SMM] == VIR_TRISTATE_SWITCH_ON) {
--        int rv = virDomainParseScaledValue("string(./features/smm/tseg)",
--                                           "string(./features/smm/tseg/@unit)",
--                                           ctxt,
--                                           &def->tseg_size,
--                                           1024 * 1024, /* Defaults to mebibytes */
--                                           ULLONG_MAX,
--                                           false);
-+        int rv = virParseScaledValue("string(./features/smm/tseg)",
-+                                     "string(./features/smm/tseg/@unit)",
-+                                     ctxt,
-+                                     &def->tseg_size,
-+                                     1024 * 1024, /* Defaults to mebibytes */
-+                                     ULLONG_MAX,
-+                                     false);
-         if (rv < 0)
-             goto error;
-         def->tseg_specified = rv;
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index 130828706a..acb25eb8c8 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -3442,6 +3442,7 @@ virVsockSetGuestCid;
- 
- 
- # util/virxml.h
-+virParseScaledValue;
- virXMLCheckIllegalChars;
- virXMLChildElementCount;
- virXMLExtractNamespaceXML;
-diff --git a/src/util/virxml.c b/src/util/virxml.c
-index 0e66d1623b..bae2e6aca5 100644
---- a/src/util/virxml.c
-+++ b/src/util/virxml.c
-@@ -33,6 +33,7 @@
- #include "viralloc.h"
- #include "virfile.h"
- #include "virstring.h"
-+#include "virutil.h"
- 
- #define VIR_FROM_THIS VIR_FROM_XML
- 
-@@ -1433,3 +1434,74 @@ virXMLNamespaceRegister(xmlXPathContextPtr ctxt,
- 
-     return 0;
- }
-+
-+
-+/**
-+ * virParseScaledValue:
-+ * @xpath: XPath to memory amount
-+ * @units_xpath: XPath to units attribute
-+ * @ctxt: XPath context
-+ * @val: scaled value is stored here
-+ * @scale: default scale for @val
-+ * @max: maximal @val allowed
-+ * @required: is the value required?
-+ *
-+ * Parse a value located at @xpath within @ctxt, and store the
-+ * result into @val. The value is scaled by units located at
-+ * @units_xpath (or the 'unit' attribute under @xpath if
-+ * @units_xpath is NULL). If units are not present, the default
-+ * @scale is used. If @required is set, then the value must
-+ * exist; otherwise, the value is optional. The resulting value
-+ * is in bytes.
-+ *
-+ * Returns 1 on success,
-+ *         0 if the value was not present and !@required,
-+ *         -1 on failure after issuing error.
-+ */
-+int
-+virParseScaledValue(const char *xpath,
-+                    const char *units_xpath,
-+                    xmlXPathContextPtr ctxt,
-+                    unsigned long long *val,
-+                    unsigned long long scale,
-+                    unsigned long long max,
-+                    bool required)
-+{
-+    unsigned long long bytes;
-+    g_autofree char *xpath_full = NULL;
-+    g_autofree char *unit = NULL;
-+    g_autofree char *bytes_str = NULL;
-+
-+    *val = 0;
-+    xpath_full = g_strdup_printf("string(%s)", xpath);
-+
-+    bytes_str = virXPathString(xpath_full, ctxt);
-+    if (!bytes_str) {
-+        if (!required)
-+            return 0;
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("missing element or attribute '%s'"),
-+                       xpath);
-+        return -1;
-+    }
-+    VIR_FREE(xpath_full);
-+
-+    if (virStrToLong_ullp(bytes_str, NULL, 10, &bytes) < 0) {
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("Invalid value '%s' for element or attribute '%s'"),
-+                       bytes_str, xpath);
-+        return -1;
-+    }
-+
-+    if (units_xpath)
-+         xpath_full = g_strdup_printf("string(%s)", units_xpath);
-+    else
-+         xpath_full = g_strdup_printf("string(%s/@unit)", xpath);
-+    unit = virXPathString(xpath_full, ctxt);
-+
-+    if (virScaleInteger(&bytes, unit, scale, max) < 0)
-+        return -1;
-+
-+    *val = bytes;
-+    return 1;
-+}
-diff --git a/src/util/virxml.h b/src/util/virxml.h
-index 26ab9f9c2d..39b261687a 100644
---- a/src/util/virxml.h
-+++ b/src/util/virxml.h
-@@ -269,3 +269,11 @@ virXMLNamespaceFormatNS(virBufferPtr buf,
- int
- virXMLNamespaceRegister(xmlXPathContextPtr ctxt,
-                         virXMLNamespace const *ns);
-+
-+int virParseScaledValue(const char *xpath,
-+                        const char *units_xpath,
-+                        xmlXPathContextPtr ctxt,
-+                        unsigned long long *val,
-+                        unsigned long long scale,
-+                        unsigned long long max,
-+                        bool required);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-conf-Parse-and-format-HMAT.patch b/SOURCES/libvirt-conf-Parse-and-format-HMAT.patch
deleted file mode 100644
index 6f3d8f6..0000000
--- a/SOURCES/libvirt-conf-Parse-and-format-HMAT.patch
+++ /dev/null
@@ -1,877 +0,0 @@
-From 17e9b949ec3876e74bcaa217810afbd46f297a65 Mon Sep 17 00:00:00 2001
-Message-Id: <17e9b949ec3876e74bcaa217810afbd46f297a65@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:39 +0200
-Subject: [PATCH] conf: Parse and format HMAT
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-To cite ACPI specification:
-
-  Heterogeneous Memory Attribute Table describes the memory
-  attributes, such as memory side cache attributes and bandwidth
-  and latency details, related to the System Physical Address
-  (SPA) Memory Ranges. The software is expected to use this
-  information as hint for optimization.
-
-According to our upstream discussion [1] this is exposed under
-<numa/> as <cache/> under NUMA <cell/> and <latency> or
-<bandwidth/> under numa/latencies.
-
-1: https://www.redhat.com/archives/libvir-list/2020-January/msg00422.html
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit a89bbbac86383a10be0cec5a93feb7ed820871eb)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/conf/numa_conf.c: Context, because we're not using
-VIR_XPATH_NODE_AUTORESTORE() everywhere in the old code.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <f5d9028ca8eff876c2bd471460629d0ef3b20630.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in                  | 107 +++++++
- docs/schemas/cputypes.rng                  | 110 ++++++-
- src/conf/numa_conf.c                       | 349 ++++++++++++++++++++-
- src/conf/numa_conf.h                       |  33 ++
- src/libvirt_private.syms                   |   6 +
- tests/qemuxml2argvdata/numatune-hmat.xml   |  52 +++
- tests/qemuxml2xmloutdata/numatune-hmat.xml |   1 +
- tests/qemuxml2xmltest.c                    |   1 +
- 8 files changed, 644 insertions(+), 15 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/numatune-hmat.xml
- create mode 120000 tests/qemuxml2xmloutdata/numatune-hmat.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 4b8d312596..bec753e37f 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -1874,6 +1874,113 @@
-       using 10 for local and 20 for remote distances.
-     </p>
- 
-+    <h4><a id="hmat">ACPI Heterogeneous Memory Attribute Table</a></h4>
-+
-+<pre>
-+...
-+&lt;cpu&gt;
-+  ...
-+  &lt;numa&gt;
-+    &lt;cell id='0' cpus='0-3' memory='512000' unit='KiB' discard='yes'/&gt;
-+    &lt;cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/&gt;
-+    &lt;cell id='3' cpus='0-3' memory='2097152' unit='KiB'&gt;
-+      &lt;cache level='1' associativity='direct' policy='writeback'&gt;
-+        &lt;size value='10' unit='KiB'/&gt;
-+        &lt;line value='8' unit='B'/&gt;
-+      &lt;/cache&gt;
-+    &lt;/cell&gt;
-+    &lt;interconnects&gt;
-+      &lt;latency initiator='0' target='0' type='access' value='5'/&gt;
-+      &lt;latency initiator='0' target='0' cache='1' type='access' value='10'/&gt;
-+      &lt;bandwidth initiator='0' target='0' type='access' value='204800' unit='KiB'/&gt;
-+    &lt;/interconnects&gt;
-+  &lt;/numa&gt;
-+  ...
-+&lt;/cpu&gt;
-+...</pre>
-+
-+    <p>
-+      <span class='since'>Since 6.6.0</span> the <code>cell</code> element can
-+      have a <code>cache</code> child element which describes memory side cache
-+      for memory proximity domains. The <code>cache</code> element has a
-+      <code>level</code> attribute describing the cache level and thus the
-+      element can be repeated multiple times to describe different levels of
-+      the cache.
-+    </p>
-+
-+    <p>
-+      The <code>cache</code> element then has following mandatory attributes:
-+    </p>
-+
-+    <dl>
-+      <dt><code>level</code></dt>
-+      <dd>
-+        Level of the cache this description refers to.
-+      </dd>
-+
-+      <dt><code>associativity</code></dt>
-+      <dd>
-+        Describes cache associativity (accepted values are <code>none</code>,
-+        <code>direct</code> and <code>full</code>).
-+      </dd>
-+
-+      <dt><code>policy</code></dt>
-+      <dd>
-+        Describes cache write associativity (accepted values are
-+        <code>none</code>, <code>writeback</code> and
-+        <code>writethrough</code>).
-+      </dd>
-+    </dl>
-+
-+    <p>
-+      The <code>cache</code> element has two mandatory child elements then:
-+      <code>size</code> and <code>line</code> which describe cache size and
-+      cache line size. Both elements accept two attributes: <code>value</code>
-+      and <code>unit</code> which set the value of corresponding cache
-+      attribute.
-+    </p>
-+
-+    <p>
-+      The NUMA description has an optional <code>interconnects</code> element that
-+      describes the normalized memory read/write latency, read/write bandwidth
-+      between Initiator Proximity Domains (Processor or I/O) and Target
-+      Proximity Domains (Memory).
-+    </p>
-+
-+    <p>
-+      The <code>interconnects</code> element can have zero or more
-+      <code>latency</code> child elements to describe latency between two
-+      memory nodes and zero or more <code>bandwidth</code> child elements to
-+      describe bandwidth between two memory nodes. Both these have the
-+      following mandatory attributes:
-+    </p>
-+
-+    <dl>
-+      <dt><code>initiator</code></dt>
-+      <dd>Refers to the source NUMA node</dd>
-+
-+      <dt><code>target</code></dt>
-+      <dd>Refers to the target NUMA node</dd>
-+
-+      <dt><code>type</code></dt>
-+      <dd>The type of the access. Accepted values: <code>access</code>,
-+      <code>read</code>, <code>write</code></dd>
-+
-+      <dt><code>value</code></dt>
-+      <dd>The actual value. For latency this is delay in nanoseconds, for
-+      bandwidth this value is in kibibytes per second. Use additional
-+      <code>unit</code> attribute to change the units.</dd>
-+    </dl>
-+
-+    <p>
-+      To describe latency from one NUMA node to a cache of another NUMA node
-+      the <code>latency</code> element has optional <code>cache</code>
-+      attribute which in combination with <code>target</code> attribute creates
-+      full reference to distant NUMA node's cache level. For instance,
-+      <code>target='0' cache='1'</code> refers to the first level cache of NUMA
-+      node 0.
-+    </p>
-+
-     <h3><a id="elementsEvents">Events configuration</a></h3>
- 
-     <p>
-diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng
-index a1682a1003..ba30dbf9ff 100644
---- a/docs/schemas/cputypes.rng
-+++ b/docs/schemas/cputypes.rng
-@@ -102,9 +102,14 @@
- 
-   <define name="cpuNuma">
-     <element name="numa">
--      <oneOrMore>
--        <ref name="numaCell"/>
--      </oneOrMore>
-+      <interleave>
-+        <oneOrMore>
-+          <ref name="numaCell"/>
-+        </oneOrMore>
-+        <optional>
-+          <ref name="numaInterconnects"/>
-+        </optional>
-+      </interleave>
-     </element>
-   </define>
- 
-@@ -148,6 +153,9 @@
-           </oneOrMore>
-         </element>
-       </optional>
-+      <zeroOrMore>
-+        <ref name="numaCache"/>
-+      </zeroOrMore>
-     </element>
-   </define>
- 
-@@ -162,6 +170,102 @@
-     </element>
-   </define>
- 
-+  <define name="numaCache">
-+    <element name="cache">
-+      <attribute name="level">
-+        <ref name="unsignedInt"/>
-+      </attribute>
-+      <attribute name="associativity">
-+        <choice>
-+          <value>none</value>
-+          <value>direct</value>
-+          <value>full</value>
-+        </choice>
-+      </attribute>
-+      <attribute name="policy">
-+        <choice>
-+          <value>none</value>
-+          <value>writeback</value>
-+          <value>writethrough</value>
-+        </choice>
-+      </attribute>
-+      <interleave>
-+        <element name="size">
-+          <attribute name="value">
-+            <ref name="unsignedInt"/>
-+          </attribute>
-+          <attribute name="unit">
-+            <ref name="unit"/>
-+          </attribute>
-+        </element>
-+        <element name="line">
-+          <attribute name="value">
-+            <ref name="unsignedInt"/>
-+          </attribute>
-+          <attribute name="unit">
-+            <ref name="unit"/>
-+          </attribute>
-+        </element>
-+      </interleave>
-+    </element>
-+  </define>
-+
-+  <define name="numaInterconnects">
-+    <element name="interconnects">
-+      <interleave>
-+        <zeroOrMore>
-+          <element name="latency">
-+            <attribute name="initiator">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+            <attribute name="target">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+            <optional>
-+              <attribute name="cache">
-+                <ref name="unsignedInt"/>
-+              </attribute>
-+            </optional>
-+            <attribute name="type">
-+              <choice>
-+                <value>access</value>
-+                <value>read</value>
-+                <value>write</value>
-+              </choice>
-+            </attribute>
-+            <attribute name="value">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+            <empty/>
-+          </element>
-+        </zeroOrMore>
-+        <zeroOrMore>
-+          <element name="bandwidth">
-+            <attribute name="initiator">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+            <attribute name="target">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+            <attribute name="type">
-+              <choice>
-+                <value>access</value>
-+                <value>read</value>
-+                <value>write</value>
-+              </choice>
-+            </attribute>
-+            <attribute name="value">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+            <attribute name="unit">
-+              <ref name="unit"/>
-+            </attribute>
-+          </element>
-+        </zeroOrMore>
-+      </interleave>
-+    </element>
-+  </define>
-+
-   <!-- Memory as an attribute is in KiB, no way to express a unit -->
-   <define name="memoryKB">
-     <data type="unsignedLong"/>
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index a805336d16..5c764190c3 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -59,9 +59,37 @@ VIR_ENUM_IMPL(virDomainMemoryAccess,
-               "private",
- );
- 
-+VIR_ENUM_IMPL(virDomainCacheAssociativity,
-+              VIR_DOMAIN_CACHE_ASSOCIATIVITY_LAST,
-+              "none",
-+              "direct",
-+              "full",
-+);
-+
-+VIR_ENUM_IMPL(virDomainCachePolicy,
-+              VIR_DOMAIN_CACHE_POLICY_LAST,
-+              "none",
-+              "writeback",
-+              "writethrough",
-+);
-+
-+VIR_ENUM_IMPL(virDomainMemoryLatency,
-+              VIR_DOMAIN_MEMORY_LATENCY_LAST,
-+              "none",
-+              "access",
-+              "read",
-+              "write"
-+);
-+
- typedef struct _virDomainNumaDistance virDomainNumaDistance;
- typedef virDomainNumaDistance *virDomainNumaDistancePtr;
- 
-+typedef struct _virDomainNumaCache virDomainNumaCache;
-+typedef virDomainNumaCache *virDomainNumaCachePtr;
-+
-+typedef struct _virDomainNumaInterconnect virDomainNumaInterconnect;
-+typedef virDomainNumaInterconnect *virDomainNumaInterconnectPtr;
-+
- typedef struct _virDomainNumaNode virDomainNumaNode;
- typedef virDomainNumaNode *virDomainNumaNodePtr;
- 
-@@ -86,9 +114,30 @@ struct _virDomainNuma {
-             unsigned int cellid;
-         } *distances;           /* remote node distances */
-         size_t ndistances;
-+
-+        struct _virDomainNumaCache {
-+            unsigned int level; /* cache level */
-+            unsigned int size;  /* cache size */
-+            unsigned int line;  /* line size, !!! in bytes !!! */
-+            virDomainCacheAssociativity associativity; /* cache associativity */
-+            virDomainCachePolicy policy; /* cache policy */
-+        } *caches;
-+        size_t ncaches;
-     } *mem_nodes;           /* guest node configuration */
-     size_t nmem_nodes;
- 
-+    struct _virDomainNumaInterconnect {
-+        virDomainNumaInterconnectType type;  /* whether structure describes latency
-+                                                or bandwidth */
-+        unsigned int initiator; /* the initiator NUMA node */
-+        unsigned int target;    /* the target NUMA node */
-+        unsigned int cache;     /* the target cache on @target; if 0 then the
-+                                   memory on @target */
-+        virDomainMemoryLatency accessType;  /* what type of access is defined */
-+        unsigned long value;    /* value itself */
-+    } *interconnects;
-+    size_t ninterconnects;
-+
-     /* Future NUMA tuning related stuff should go here. */
- };
- 
-@@ -368,9 +417,13 @@ virDomainNumaFree(virDomainNumaPtr numa)
- 
-         if (numa->mem_nodes[i].ndistances > 0)
-             VIR_FREE(numa->mem_nodes[i].distances);
-+
-+        VIR_FREE(numa->mem_nodes[i].caches);
-     }
-     VIR_FREE(numa->mem_nodes);
- 
-+    VIR_FREE(numa->interconnects);
-+
-     VIR_FREE(numa);
- }
- 
-@@ -841,6 +894,97 @@ virDomainNumaDefNodeDistanceParseXML(virDomainNumaPtr def,
-     return ret;
- }
- 
-+
-+static int
-+virDomainNumaDefNodeCacheParseXML(virDomainNumaPtr def,
-+                                  xmlXPathContextPtr ctxt,
-+                                  unsigned int cur_cell)
-+{
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    int n;
-+    size_t i;
-+
-+    if ((n = virXPathNodeSet("./cache", ctxt, &nodes)) < 0)
-+        return -1;
-+
-+    def->mem_nodes[cur_cell].caches = g_new0(virDomainNumaCache, n);
-+
-+    for (i = 0; i < n; i++) {
-+        VIR_XPATH_NODE_AUTORESTORE(ctxt);
-+        virDomainNumaCachePtr cache = &def->mem_nodes[cur_cell].caches[i];
-+        g_autofree char *tmp = NULL;
-+        unsigned int level;
-+        int associativity;
-+        int policy;
-+        unsigned long long size;
-+        unsigned long long line;
-+
-+        if (!(tmp = virXMLPropString(nodes[i], "level"))) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Missing 'level' attribute in cache "
-+                             "element for NUMA node %d"),
-+                           cur_cell);
-+            return -1;
-+        }
-+
-+        if (virStrToLong_uip(tmp, NULL, 10, &level) < 0 ||
-+            level == 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Invalid 'level' attribute in cache "
-+                             "element for NUMA node %d"),
-+                           cur_cell);
-+            return -1;
-+        }
-+        VIR_FREE(tmp);
-+
-+        if (!(tmp = virXMLPropString(nodes[i], "associativity"))) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Missing 'associativity' attribute in cache "
-+                             "element for NUMA node %d"),
-+                           cur_cell);
-+            return -1;
-+        }
-+
-+        if ((associativity = virDomainCacheAssociativityTypeFromString(tmp)) < 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Invalid cache associativity '%s'"),
-+                           tmp);
-+            return -1;
-+        }
-+        VIR_FREE(tmp);
-+
-+        if (!(tmp = virXMLPropString(nodes[i], "policy"))) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Missing 'policy' attribute in cache "
-+                             "element for NUMA node %d"),
-+                           cur_cell);
-+        }
-+
-+        if ((policy = virDomainCachePolicyTypeFromString(tmp)) < 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Invalid cache policy '%s'"),
-+                           tmp);
-+            return -1;
-+        }
-+        VIR_FREE(tmp);
-+
-+        ctxt->node = nodes[i];
-+        if (virDomainParseMemory("./size/@value", "./size/unit",
-+                                 ctxt, &size, true, false) < 0)
-+            return -1;
-+
-+        if (virParseScaledValue("./line/@value", "./line/unit",
-+                                ctxt, &line, 1, ULLONG_MAX, true) < 0)
-+            return -1;
-+
-+        *cache = (virDomainNumaCache){level, size, line, associativity, policy};
-+        def->mem_nodes[cur_cell].ncaches++;
-+    }
-+
-+    return 0;
-+}
-+
-+
- int
- virDomainNumaDefParseXML(virDomainNumaPtr def,
-                          xmlXPathContextPtr ctxt)
-@@ -867,6 +1011,7 @@ virDomainNumaDefParseXML(virDomainNumaPtr def,
-     def->nmem_nodes = n;
- 
-     for (i = 0; i < n; i++) {
-+        VIR_XPATH_NODE_AUTORESTORE(ctxt);
-         int rc;
-         unsigned int cur_cell = i;
- 
-@@ -953,7 +1098,109 @@ virDomainNumaDefParseXML(virDomainNumaPtr def,
- 
-         /* Parse NUMA distances info */
-         if (virDomainNumaDefNodeDistanceParseXML(def, ctxt, cur_cell) < 0)
-+            goto cleanup;
-+
-+        /* Parse cache info */
-+        if (virDomainNumaDefNodeCacheParseXML(def, ctxt, cur_cell) < 0)
-+            goto cleanup;
-+    }
-+
-+    VIR_FREE(nodes);
-+    if ((n = virXPathNodeSet("./cpu/numa[1]/interconnects[1]/latency|"
-+                             "./cpu/numa[1]/interconnects[1]/bandwidth", ctxt, &nodes)) < 0)
-+        goto cleanup;
-+
-+    def->interconnects = g_new0(virDomainNumaInterconnect, n);
-+    for (i = 0; i < n; i++) {
-+        virDomainNumaInterconnectType type;
-+        unsigned int initiator;
-+        unsigned int target;
-+        unsigned int cache = 0;
-+        int accessType;
-+        unsigned long long value;
-+
-+        if (virXMLNodeNameEqual(nodes[i], "latency")) {
-+            type = VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_LATENCY;
-+
-+            if (!(tmp = virXMLPropString(nodes[i], "value"))) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Missing 'value' attribute in NUMA interconnects"));
-                 goto cleanup;
-+            }
-+
-+            if (virStrToLong_ullp(tmp, NULL, 10, &value) < 0) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Invalid 'value' attribute in NUMA interconnects"));
-+                goto cleanup;
-+            }
-+            VIR_FREE(tmp);
-+        } else if (virXMLNodeNameEqual(nodes[i], "bandwidth")) {
-+            VIR_XPATH_NODE_AUTORESTORE(ctxt);
-+            type = VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_BANDWIDTH;
-+
-+            ctxt->node = nodes[i];
-+
-+            if (virDomainParseMemory("./@value", "./@unit", ctxt, &value, true, false) < 0)
-+                goto cleanup;
-+        } else {
-+            /* Ignore yet unknown child elements. */
-+            continue;
-+        }
-+
-+        if (!(tmp = virXMLPropString(nodes[i], "initiator"))) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Missing 'initiator' attribute in NUMA interconnects"));
-+            goto cleanup;
-+        }
-+
-+        if (virStrToLong_uip(tmp, NULL, 10, &initiator) < 0) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Invalid 'initiator' attribute in NUMA interconnects"));
-+            goto cleanup;
-+        }
-+        VIR_FREE(tmp);
-+
-+        if (!(tmp = virXMLPropString(nodes[i], "target"))) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Missing 'target' attribute in NUMA interconnects"));
-+            goto cleanup;
-+        }
-+
-+        if (virStrToLong_uip(tmp, NULL, 10, &target) < 0) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Invalid 'target' attribute in NUMA interconnects"));
-+            goto cleanup;
-+        }
-+        VIR_FREE(tmp);
-+
-+
-+        /* cache attribute is optional */
-+        if ((tmp = virXMLPropString(nodes[i], "cache"))) {
-+            if (virStrToLong_uip(tmp, NULL, 10, &cache) < 0 ||
-+                cache == 0) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Invalid 'cache' attribute in NUMA interconnects"));
-+                goto cleanup;
-+            }
-+        }
-+        VIR_FREE(tmp);
-+
-+        if (!(tmp = virXMLPropString(nodes[i], "type"))) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Missing 'type' attribute in NUMA interconnects"));
-+            goto cleanup;
-+        }
-+
-+        if ((accessType = virDomainMemoryLatencyTypeFromString(tmp)) <= 0) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Invalid 'type' attribute in NUMA interconnects"));
-+            goto cleanup;
-+        }
-+        VIR_FREE(tmp);
-+
-+        def->interconnects[i] = (virDomainNumaInterconnect) {type, initiator, target,
-+                                                             cache, accessType, value};
-+        def->ninterconnects++;
-     }
- 
-     ret = 0;
-@@ -983,6 +1230,7 @@ virDomainNumaDefFormatXML(virBufferPtr buf,
-     for (i = 0; i < ncells; i++) {
-         virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(def, i);
-         int ndistances;
-+        size_t ncaches;
- 
-         memAccess = virDomainNumaGetNodeMemoryAccessMode(def, i);
-         discard = virDomainNumaGetNodeDiscard(def, i);
-@@ -1009,30 +1257,107 @@ virDomainNumaDefFormatXML(virBufferPtr buf,
-                               virTristateBoolTypeToString(discard));
- 
-         ndistances = def->mem_nodes[i].ndistances;
--        if (ndistances == 0) {
-+        ncaches = def->mem_nodes[i].ncaches;
-+        if (ndistances == 0 && ncaches == 0) {
-             virBufferAddLit(buf, "/>\n");
-         } else {
-             size_t j;
--            virDomainNumaDistancePtr distances = def->mem_nodes[i].distances;
- 
-             virBufferAddLit(buf, ">\n");
-             virBufferAdjustIndent(buf, 2);
--            virBufferAddLit(buf, "<distances>\n");
--            virBufferAdjustIndent(buf, 2);
--            for (j = 0; j < ndistances; j++) {
--                if (distances[j].value) {
--                    virBufferAddLit(buf, "<sibling");
--                    virBufferAsprintf(buf, " id='%d'", distances[j].cellid);
--                    virBufferAsprintf(buf, " value='%d'", distances[j].value);
--                    virBufferAddLit(buf, "/>\n");
-+
-+            if (ndistances) {
-+                virDomainNumaDistancePtr distances = def->mem_nodes[i].distances;
-+
-+                virBufferAddLit(buf, "<distances>\n");
-+                virBufferAdjustIndent(buf, 2);
-+                for (j = 0; j < ndistances; j++) {
-+                    if (distances[j].value) {
-+                        virBufferAddLit(buf, "<sibling");
-+                        virBufferAsprintf(buf, " id='%d'", distances[j].cellid);
-+                        virBufferAsprintf(buf, " value='%d'", distances[j].value);
-+                        virBufferAddLit(buf, "/>\n");
-+                    }
-                 }
-+                virBufferAdjustIndent(buf, -2);
-+                virBufferAddLit(buf, "</distances>\n");
-+            }
-+
-+            for (j = 0; j < ncaches; j++) {
-+                virDomainNumaCachePtr cache = &def->mem_nodes[i].caches[j];
-+
-+                virBufferAsprintf(buf, "<cache level='%u'", cache->level);
-+                if (cache->associativity) {
-+                    virBufferAsprintf(buf, " associativity='%s'",
-+                                      virDomainCacheAssociativityTypeToString(cache->associativity));
-+                }
-+
-+                if (cache->policy) {
-+                    virBufferAsprintf(buf, " policy='%s'",
-+                                      virDomainCachePolicyTypeToString(cache->policy));
-+                }
-+                virBufferAddLit(buf, ">\n");
-+
-+                virBufferAdjustIndent(buf, 2);
-+                virBufferAsprintf(buf,
-+                                  "<size value='%u' unit='KiB'/>\n",
-+                                  cache->size);
-+
-+                if (cache->line) {
-+                    virBufferAsprintf(buf,
-+                                      "<line value='%u' unit='B'/>\n",
-+                                      cache->line);
-+                }
-+
-+                virBufferAdjustIndent(buf, -2);
-+                virBufferAddLit(buf, "</cache>\n");
-             }
--            virBufferAdjustIndent(buf, -2);
--            virBufferAddLit(buf, "</distances>\n");
-             virBufferAdjustIndent(buf, -2);
-             virBufferAddLit(buf, "</cell>\n");
-         }
-     }
-+
-+    if (def->ninterconnects) {
-+        virBufferAddLit(buf, "<interconnects>\n");
-+        virBufferAdjustIndent(buf, 2);
-+    }
-+
-+    for (i = 0; i < def->ninterconnects; i++) {
-+        virDomainNumaInterconnectPtr l = &def->interconnects[i];
-+
-+        switch (l->type) {
-+        case VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_LATENCY:
-+            virBufferAddLit(buf, "<latency");
-+            break;
-+        case VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_BANDWIDTH:
-+            virBufferAddLit(buf, "<bandwidth");
-+        }
-+
-+        virBufferAsprintf(buf,
-+                          " initiator='%u' target='%u'",
-+                          l->initiator, l->target);
-+
-+        if (l->cache > 0) {
-+            virBufferAsprintf(buf,
-+                              " cache='%u'",
-+                              l->cache);
-+        }
-+
-+        virBufferAsprintf(buf,
-+                          " type='%s' value='%lu'",
-+                          virDomainMemoryLatencyTypeToString(l->accessType),
-+                          l->value);
-+
-+        if (l->type == VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_BANDWIDTH)
-+            virBufferAddLit(buf, " unit='KiB'");
-+        virBufferAddLit(buf, "/>\n");
-+    }
-+
-+    if (def->ninterconnects) {
-+        virBufferAdjustIndent(buf, -2);
-+        virBufferAddLit(buf, "</interconnects>\n");
-+    }
-+
-     virBufferAdjustIndent(buf, -2);
-     virBufferAddLit(buf, "</numa>\n");
- 
-diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
-index 6808439a7c..5043c5a6d4 100644
---- a/src/conf/numa_conf.h
-+++ b/src/conf/numa_conf.h
-@@ -52,6 +52,39 @@ typedef enum {
- } virDomainMemoryAccess;
- VIR_ENUM_DECL(virDomainMemoryAccess);
- 
-+typedef enum {
-+    VIR_DOMAIN_CACHE_ASSOCIATIVITY_NONE,    /* No associativity */
-+    VIR_DOMAIN_CACHE_ASSOCIATIVITY_DIRECT,  /* Direct mapped cache */
-+    VIR_DOMAIN_CACHE_ASSOCIATIVITY_FULL,    /* Fully associative cache */
-+
-+    VIR_DOMAIN_CACHE_ASSOCIATIVITY_LAST
-+} virDomainCacheAssociativity;
-+VIR_ENUM_DECL(virDomainCacheAssociativity);
-+
-+typedef enum {
-+    VIR_DOMAIN_CACHE_POLICY_NONE,           /* No policy */
-+    VIR_DOMAIN_CACHE_POLICY_WRITEBACK,      /* Write-back policy */
-+    VIR_DOMAIN_CACHE_POLICY_WRITETHROUGH,   /* Write-through policy */
-+
-+    VIR_DOMAIN_CACHE_POLICY_LAST
-+} virDomainCachePolicy;
-+VIR_ENUM_DECL(virDomainCachePolicy);
-+
-+typedef enum {
-+    VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_LATENCY,
-+    VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_BANDWIDTH,
-+} virDomainNumaInterconnectType;
-+
-+typedef enum {
-+    VIR_DOMAIN_MEMORY_LATENCY_NONE = 0, /* No memory latency defined */
-+    VIR_DOMAIN_MEMORY_LATENCY_ACCESS,   /* Access latency */
-+    VIR_DOMAIN_MEMORY_LATENCY_READ,     /* Read latency */
-+    VIR_DOMAIN_MEMORY_LATENCY_WRITE,    /* Write latency */
-+
-+    VIR_DOMAIN_MEMORY_LATENCY_LAST
-+} virDomainMemoryLatency;
-+VIR_ENUM_DECL(virDomainMemoryLatency);
-+
- 
- virDomainNumaPtr virDomainNumaNew(void);
- void virDomainNumaFree(virDomainNumaPtr numa);
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index acb25eb8c8..de95e3b116 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -808,8 +808,14 @@ virNodeDeviceDeleteVport;
- virNodeDeviceGetParentName;
- 
- # conf/numa_conf.h
-+virDomainCacheAssociativityTypeFromString;
-+virDomainCacheAssociativityTypeToString;
-+virDomainCachePolicyTypeFromString;
-+virDomainCachePolicyTypeToString;
- virDomainMemoryAccessTypeFromString;
- virDomainMemoryAccessTypeToString;
-+virDomainMemoryLatencyTypeFromString;
-+virDomainMemoryLatencyTypeToString;
- virDomainNumaCheckABIStability;
- virDomainNumaEquals;
- virDomainNumaFree;
-diff --git a/tests/qemuxml2argvdata/numatune-hmat.xml b/tests/qemuxml2argvdata/numatune-hmat.xml
-new file mode 100644
-index 0000000000..83f0b56c9b
---- /dev/null
-+++ b/tests/qemuxml2argvdata/numatune-hmat.xml
-@@ -0,0 +1,52 @@
-+<domain type='qemu'>
-+  <name>QEMUGuest</name>
-+  <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
-+  <memory unit='KiB'>8388608</memory>
-+  <currentMemory unit='KiB'>8388608</currentMemory>
-+  <vcpu placement='static'>12</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+    <pae/>
-+  </features>
-+  <cpu>
-+    <numa>
-+      <cell id='0' cpus='0-3' memory='2097152' unit='KiB'>
-+        <cache level='1' associativity='direct' policy='writeback'>
-+          <size value='10' unit='KiB'/>
-+          <line value='8' unit='B'/>
-+        </cache>
-+      </cell>
-+      <cell id='1' cpus='4-7' memory='2097152' unit='KiB'/>
-+      <cell id='2' cpus='8-11' memory='2097152' unit='KiB'/>
-+      <cell id='3' memory='2097152' unit='KiB'/>
-+      <cell id='4' memory='2097152' unit='KiB'/>
-+      <cell id='5' memory='2097152' unit='KiB'/>
-+      <interconnects>
-+        <latency initiator='0' target='0' type='access' value='5'/>
-+        <latency initiator='0' target='0' cache='1' type='access' value='10'/>
-+        <bandwidth initiator='0' target='0' type='access' value='204800' unit='KiB'/>
-+      </interconnects>
-+    </numa>
-+  </cpu>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>restart</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='virtio'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+    </memballoon>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmloutdata/numatune-hmat.xml b/tests/qemuxml2xmloutdata/numatune-hmat.xml
-new file mode 120000
-index 0000000000..6903a80ab1
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/numatune-hmat.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/numatune-hmat.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 1ddeba30f0..de1d720e1d 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1106,6 +1106,7 @@ mymain(void)
-     DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
-     DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
-     DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA);
-+    DO_TEST("numatune-hmat", NONE);
- 
-     DO_TEST("bios-nvram", NONE);
-     DO_TEST("bios-nvram-os-interleave", NONE);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-conf-Validate-NUMA-HMAT-configuration.patch b/SOURCES/libvirt-conf-Validate-NUMA-HMAT-configuration.patch
deleted file mode 100644
index 1ca6905..0000000
--- a/SOURCES/libvirt-conf-Validate-NUMA-HMAT-configuration.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-From 0ae283a1cb5224f3eb4fa32706e9b9c212577e51 Mon Sep 17 00:00:00 2001
-Message-Id: <0ae283a1cb5224f3eb4fa32706e9b9c212577e51@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:40 +0200
-Subject: [PATCH] conf: Validate NUMA HMAT configuration
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are several restrictions, for instance @initiator and
-@target have to refer to existing NUMA nodes (daa), @cache has to
-refer to a defined cache level and so on.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit f0611fe8830543d03d1871422f8c542453f0c8db)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <e8488a2e49fa251dd0e2ab51f5ab627e3b265440.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c |  3 ++
- src/conf/numa_conf.c   | 99 ++++++++++++++++++++++++++++++++++++++++++
- src/conf/numa_conf.h   |  1 +
- 3 files changed, 103 insertions(+)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 3229d5ec95..f41559f33e 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -7144,6 +7144,9 @@ virDomainDefValidateInternal(const virDomainDef *def,
-     if (virDomainDefCputuneValidate(def) < 0)
-         return -1;
- 
-+    if (virDomainNumaDefValidate(def->numa) < 0)
-+        return -1;
-+
-     return 0;
- }
- 
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index 5c764190c3..c90fb01bb6 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -1365,6 +1365,105 @@ virDomainNumaDefFormatXML(virBufferPtr buf,
- }
- 
- 
-+int
-+virDomainNumaDefValidate(const virDomainNuma *def)
-+{
-+    size_t i;
-+    size_t j;
-+
-+    if (!def)
-+        return 0;
-+
-+    for (i = 0; i < def->nmem_nodes; i++) {
-+        const virDomainNumaNode *node = &def->mem_nodes[i];
-+        g_autoptr(virBitmap) levelsSeen = virBitmapNewEmpty();
-+
-+        for (j = 0; j < node->ncaches; j++) {
-+            const virDomainNumaCache *cache = &node->caches[j];
-+
-+            /* Relax this if there's ever fourth layer of cache */
-+            if (cache->level > 3) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Ain't nobody heard of that much cache level"));
-+                return -1;
-+            }
-+
-+            if (virBitmapIsBitSet(levelsSeen, cache->level)) {
-+                virReportError(VIR_ERR_XML_ERROR,
-+                               _("Cache level '%u' already defined"),
-+                               cache->level);
-+                return -1;
-+            }
-+
-+            if (virBitmapSetBitExpand(levelsSeen, cache->level))
-+                return -1;
-+        }
-+    }
-+
-+    for (i = 0; i < def->ninterconnects; i++) {
-+        const virDomainNumaInterconnect *l = &def->interconnects[i];
-+
-+        if (l->initiator >= def->nmem_nodes) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("'initiator' refers to a non-existent NUMA node"));
-+            return -1;
-+        }
-+
-+        if (l->target >= def->nmem_nodes) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("'target' refers to a non-existent NUMA node"));
-+            return -1;
-+        }
-+
-+        if (!def->mem_nodes[l->initiator].cpumask) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("NUMA nodes without CPUs can't be initiator"));
-+            return -1;
-+        }
-+
-+        if (l->cache > 0) {
-+            for (j = 0; j < def->mem_nodes[l->target].ncaches; j++) {
-+                const virDomainNumaCache *cache = def->mem_nodes[l->target].caches;
-+
-+                if (l->cache == cache->level)
-+                    break;
-+            }
-+
-+            if (j == def->mem_nodes[l->target].ncaches) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("'cache' refers to a non-existent NUMA node cache"));
-+                return -1;
-+            }
-+        }
-+
-+        for (j = 0; j < i; j++) {
-+            const virDomainNumaInterconnect *ll = &def->interconnects[j];
-+
-+            if (l->type == ll->type &&
-+                l->initiator == ll->initiator &&
-+                l->target == ll->target &&
-+                l->cache == ll->cache &&
-+                l->accessType == ll->accessType) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Duplicate info for NUMA latencies"));
-+                return -1;
-+            }
-+
-+
-+            if (l->initiator != l->target &&
-+                l->initiator == ll->target &&
-+                l->target == ll->initiator) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Link already defined"));
-+                return -1;
-+            }
-+        }
-+    }
-+
-+    return 0;
-+}
-+
-+
- unsigned int
- virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa)
- {
-diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
-index 5043c5a6d4..2963004c94 100644
---- a/src/conf/numa_conf.h
-+++ b/src/conf/numa_conf.h
-@@ -217,5 +217,6 @@ bool virDomainNumatuneNodeSpecified(virDomainNumaPtr numatune,
- 
- int virDomainNumaDefParseXML(virDomainNumaPtr def, xmlXPathContextPtr ctxt);
- int virDomainNumaDefFormatXML(virBufferPtr buf, virDomainNumaPtr def);
-+int virDomainNumaDefValidate(const virDomainNuma *def);
- 
- unsigned int virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-conf-add-new-PCI_CONNECT-flag-AUTOASSIGN.patch b/SOURCES/libvirt-conf-add-new-PCI_CONNECT-flag-AUTOASSIGN.patch
deleted file mode 100644
index 7e0dba2..0000000
--- a/SOURCES/libvirt-conf-add-new-PCI_CONNECT-flag-AUTOASSIGN.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From 2780cb41f7682741be2bbe662d629dd1bd3b4f6e Mon Sep 17 00:00:00 2001
-Message-Id: <2780cb41f7682741be2bbe662d629dd1bd3b4f6e@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:10 -0400
-Subject: [PATCH] conf: add new PCI_CONNECT flag AUTOASSIGN
-
-This new flag will be set for any controller that we decide can have
-devices assigned to it automatically during PCI device assignment. In
-the past PCI_CONNECT_TYPE_HOTPLUGGABLE was used for this purpose, but
-that is overloading that flag, and no longer technically correct; what
-we *really* want is to auto-assign devices to any pcie-root-port or
-pcie-switch-downstream-port regardless of whether or not that
-controller happens to have hotplug enabled.
-
-This patch just adds the flag, but doesn't use it at all. Note that
-the numbering of all the other flags was changed in order to insert
-the new flag near the beginning of the list; that doesn't cause any
-problem because the connect flags aren't stored anywhere between runs
-of libvirtd.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit c296a846ad7de3066a17404f4f407d3e1b6d7935)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-8-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_addr.h | 41 +++++++++++++++++++++--------------------
- 1 file changed, 21 insertions(+), 20 deletions(-)
-
-diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h
-index dcb90618f8..40738ddb72 100644
---- a/src/conf/domain_addr.h
-+++ b/src/conf/domain_addr.h
-@@ -32,26 +32,27 @@ typedef enum {
- } virPCIDeviceAddressExtensionFlags;
- 
- typedef enum {
--   VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 0, /* is hotplug needed/supported */
--
--   /* set for devices that can share a single slot in auto-assignment
--    * (by assigning one device to each of the 8 functions on the slot)
--    */
--   VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 1,
--
--   /* kinds of devices as a bitmap so they can be combined (some PCI
--    * controllers permit connecting multiple types of devices)
--    */
--   VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 2,
--   VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 3,
--   VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 4,
--   VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 5,
--   VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 6,
--   VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 7,
--   VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 8,
--   VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 9,
--   VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 10,
--   VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 11,
-+    VIR_PCI_CONNECT_AUTOASSIGN = 1 << 0, /* okay to autoassign a device to this controller */
-+    VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 1, /* is hotplug needed/supported */
-+
-+    /* set for devices that can share a single slot in auto-assignment
-+     * (by assigning one device to each of the 8 functions on the slot)
-+     */
-+    VIR_PCI_CONNECT_AGGREGATE_SLOT = 1 << 2,
-+
-+    /* kinds of devices as a bitmap so they can be combined (some PCI
-+     * controllers permit connecting multiple types of devices)
-+     */
-+    VIR_PCI_CONNECT_TYPE_PCI_DEVICE = 1 << 3,
-+    VIR_PCI_CONNECT_TYPE_PCIE_DEVICE = 1 << 4,
-+    VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT = 1 << 5,
-+    VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT = 1 << 6,
-+    VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_DOWNSTREAM_PORT = 1 << 7,
-+    VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE = 1 << 8,
-+    VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS = 1 << 9,
-+    VIR_PCI_CONNECT_TYPE_PCIE_EXPANDER_BUS = 1 << 10,
-+    VIR_PCI_CONNECT_TYPE_PCI_BRIDGE = 1 << 11,
-+    VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE = 1 << 12,
- } virDomainPCIConnectFlags;
- 
- /* a combination of all bits that describe the type of connections
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-conf-add-support-for-specifying-CPU-dies-parameter.patch b/SOURCES/libvirt-conf-add-support-for-specifying-CPU-dies-parameter.patch
deleted file mode 100644
index 341c98f..0000000
--- a/SOURCES/libvirt-conf-add-support-for-specifying-CPU-dies-parameter.patch
+++ /dev/null
@@ -1,1510 +0,0 @@
-From c86535685add6ff59a6cce0fa48ee27a23d71815 Mon Sep 17 00:00:00 2001
-Message-Id: <c86535685add6ff59a6cce0fa48ee27a23d71815@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Mon, 3 Feb 2020 18:07:22 +0000
-Subject: [PATCH] conf: add support for specifying CPU "dies" parameter
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Recently CPU hardware vendors have started to support a new structure
-inside the CPU package topology known as a "die". Thus the hierarchy
-is now:
-
-  sockets > dies > cores > threads
-
-This adds support for "dies" in the XML parser, with the value
-defaulting to 1 if not specified for backwards compatibility.
-
-For example a system with 64 logical CPUs might report
-
-   <topology sockets="4" dies="2" cores="4" threads="2"/>
-
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit fbf27730a36da573b1065c179f4d96b9a751f22f)
-
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785207
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785211
-Message-Id: <20200203180726.2203691-2-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/formatcaps.html.in                       |  2 +-
- docs/formatdomain.html.in                     | 22 ++++++++++--------
- docs/schemas/cputypes.rng                     |  5 ++++
- src/bhyve/bhyve_command.c                     |  5 ++++
- src/conf/cpu_conf.c                           | 23 +++++++++++++++++--
- src/conf/cpu_conf.h                           |  1 +
- src/conf/domain_conf.c                        |  3 ++-
- src/cpu/cpu.c                                 |  1 +
- src/libxl/libxl_capabilities.c                |  1 +
- src/qemu/qemu_command.c                       |  5 ++++
- src/vmx/vmx.c                                 |  7 ++++++
- .../x86_64-host+guest,model486-result.xml     |  2 +-
- .../x86_64-host+guest,models-result.xml       |  2 +-
- .../cputestdata/x86_64-host+guest-result.xml  |  2 +-
- tests/cputestdata/x86_64-host+guest.xml       |  2 +-
- .../x86_64-host+host-model-nofallback.xml     |  2 +-
- ...t-Haswell-noTSX+Haswell,haswell-result.xml |  2 +-
- ...ell-noTSX+Haswell-noTSX,haswell-result.xml |  2 +-
- ...ost-Haswell-noTSX+Haswell-noTSX-result.xml |  2 +-
- .../x86_64-host-worse+guest-result.xml        |  2 +-
- .../ppc64-modern-bulk-result-conf.xml         |  2 +-
- .../ppc64-modern-bulk-result-live.xml         |  2 +-
- .../ppc64-modern-individual-result-conf.xml   |  2 +-
- .../ppc64-modern-individual-result-live.xml   |  2 +-
- .../x86-modern-bulk-result-conf.xml           |  2 +-
- .../x86-modern-bulk-result-live.xml           |  2 +-
- .../x86-modern-individual-add-result-conf.xml |  2 +-
- .../x86-modern-individual-add-result-live.xml |  2 +-
- .../x86-old-bulk-result-conf.xml              |  2 +-
- .../x86-old-bulk-result-live.xml              |  2 +-
- .../cpu-hotplug-granularity.xml               |  2 +-
- .../qemuxml2argvdata/cpu-hotplug-startup.xml  |  2 +-
- tests/qemuxml2argvdata/cpu-numa-disjoint.xml  |  2 +-
- .../qemuxml2argvdata/cpu-numa-disordered.xml  |  2 +-
- tests/qemuxml2argvdata/cpu-numa-memshared.xml |  2 +-
- .../cpu-numa-no-memory-element.xml            |  2 +-
- tests/qemuxml2argvdata/cpu-numa1.xml          |  2 +-
- tests/qemuxml2argvdata/cpu-numa2.xml          |  2 +-
- tests/qemuxml2argvdata/cpu-numa3.xml          |  2 +-
- tests/qemuxml2argvdata/cpu-topology1.xml      |  2 +-
- tests/qemuxml2argvdata/cpu-topology2.xml      |  2 +-
- tests/qemuxml2argvdata/cpu-topology3.xml      |  2 +-
- .../fd-memory-no-numa-topology.xml            |  2 +-
- .../fd-memory-numa-topology.xml               |  2 +-
- .../fd-memory-numa-topology2.xml              |  2 +-
- .../fd-memory-numa-topology3.xml              |  2 +-
- .../graphics-spice-timeout.xml                |  2 +-
- tests/qemuxml2argvdata/hugepages-nvdimm.xml   |  2 +-
- .../memfd-memory-default-hugepage.xml         |  2 +-
- tests/qemuxml2argvdata/memfd-memory-numa.xml  |  2 +-
- tests/qemuxml2argvdata/memory-align-fail.xml  |  2 +-
- .../memory-hotplug-dimm-addr.xml              |  2 +-
- .../qemuxml2argvdata/memory-hotplug-dimm.xml  |  2 +-
- .../memory-hotplug-nvdimm-access.xml          |  2 +-
- .../memory-hotplug-nvdimm-align.xml           |  2 +-
- .../memory-hotplug-nvdimm-label.xml           |  2 +-
- .../memory-hotplug-nvdimm-pmem.xml            |  2 +-
- .../memory-hotplug-nvdimm-readonly.xml        |  2 +-
- .../memory-hotplug-nvdimm.xml                 |  2 +-
- tests/qemuxml2argvdata/memory-hotplug.xml     |  2 +-
- .../numad-auto-memory-vcpu-cpuset.xml         |  2 +-
- ...to-memory-vcpu-no-cpuset-and-placement.xml |  2 +-
- .../numad-auto-vcpu-no-numatune.xml           |  2 +-
- ...d-auto-vcpu-static-numatune-no-nodeset.xml |  2 +-
- .../numad-auto-vcpu-static-numatune.xml       |  2 +-
- .../numad-static-memory-auto-vcpu.xml         |  2 +-
- .../numad-static-vcpu-no-numatune.xml         |  2 +-
- tests/qemuxml2argvdata/numad.xml              |  2 +-
- .../numatune-auto-nodeset-invalid.xml         |  2 +-
- .../numatune-memory-invalid-nodeset.xml       |  2 +-
- tests/qemuxml2argvdata/numatune-memory.xml    |  2 +-
- .../pci-expander-bus-bad-machine.xml          |  2 +-
- tests/qemuxml2argvdata/pci-expander-bus.xml   |  2 +-
- .../pcie-expander-bus-bad-bus.xml             |  2 +-
- .../pcie-expander-bus-bad-machine.xml         |  2 +-
- tests/qemuxml2argvdata/pcie-expander-bus.xml  |  2 +-
- .../pseries-default-phb-numa-node.xml         |  2 +-
- .../pseries-phb-numa-node.xml                 |  2 +-
- tests/qemuxml2argvdata/smp.xml                |  2 +-
- .../qemuxml2xmloutdata/cpu-numa-disjoint.xml  |  2 +-
- .../cpu-numa-disordered.xml                   |  2 +-
- .../qemuxml2xmloutdata/cpu-numa-memshared.xml |  2 +-
- .../cpu-numa-no-memory-element.xml            |  2 +-
- tests/qemuxml2xmloutdata/cpu-numa1.xml        |  2 +-
- tests/qemuxml2xmloutdata/cpu-numa2.xml        |  2 +-
- .../graphics-spice-timeout.xml                |  2 +-
- .../memory-hotplug-dimm.xml                   |  2 +-
- tests/qemuxml2xmloutdata/memory-hotplug.xml   |  2 +-
- .../numad-auto-memory-vcpu-cpuset.xml         |  2 +-
- ...to-memory-vcpu-no-cpuset-and-placement.xml |  2 +-
- .../numad-auto-vcpu-no-numatune.xml           |  2 +-
- .../numad-static-vcpu-no-numatune.xml         |  2 +-
- tests/qemuxml2xmloutdata/pci-expander-bus.xml |  2 +-
- .../qemuxml2xmloutdata/pcie-expander-bus.xml  |  2 +-
- .../pseries-phb-numa-node.xml                 |  2 +-
- tests/qemuxml2xmloutdata/smp.xml              |  2 +-
- .../vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml |  2 +-
- .../vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml |  2 +-
- 98 files changed, 148 insertions(+), 101 deletions(-)
-
-diff --git a/docs/formatcaps.html.in b/docs/formatcaps.html.in
-index 2a0aa963bb..59d21a7d9e 100644
---- a/docs/formatcaps.html.in
-+++ b/docs/formatcaps.html.in
-@@ -173,7 +173,7 @@
-       &lt;/features&gt;
-       &lt;model&gt;core2duo&lt;/model&gt;
-       &lt;vendor&gt;Intel&lt;/vendor&gt;
--      &lt;topology sockets="1" cores="2" threads="1"/&gt;
-+      &lt;topology sockets="1" dies="1" cores="2" threads="1"/&gt;
-       &lt;feature name="lahf_lm"/&gt;
-       &lt;feature name='xtpr'/&gt;
-       ...
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 6e86d057a8..4db9c292b7 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -1470,7 +1470,7 @@
- &lt;cpu match='exact'&gt;
-   &lt;model fallback='allow'&gt;core2duo&lt;/model&gt;
-   &lt;vendor&gt;Intel&lt;/vendor&gt;
--  &lt;topology sockets='1' cores='2' threads='1'/&gt;
-+  &lt;topology sockets='1' dies='1' cores='2' threads='1'/&gt;
-   &lt;cache level='3' mode='emulate'/&gt;
-   &lt;feature policy='disable' name='lahf_lm'/&gt;
- &lt;/cpu&gt;
-@@ -1479,7 +1479,7 @@
- <pre>
- &lt;cpu mode='host-model'&gt;
-   &lt;model fallback='forbid'/&gt;
--  &lt;topology sockets='1' cores='2' threads='1'/&gt;
-+  &lt;topology sockets='1' dies='1' cores='2' threads='1'/&gt;
- &lt;/cpu&gt;
- ...</pre>
- 
-@@ -1498,7 +1498,7 @@
- <pre>
- ...
- &lt;cpu&gt;
--  &lt;topology sockets='1' cores='2' threads='1'/&gt;
-+  &lt;topology sockets='1' dies='1' cores='2' threads='1'/&gt;
- &lt;/cpu&gt;
- ...</pre>
- 
-@@ -1673,13 +1673,15 @@
- 
-       <dt><code>topology</code></dt>
-       <dd>The <code>topology</code> element specifies requested topology of
--        virtual CPU provided to the guest. Three non-zero values have to be
--        given for <code>sockets</code>, <code>cores</code>, and
--        <code>threads</code>: total number of CPU sockets, number of cores per
--        socket, and number of threads per core, respectively. Hypervisors may
--        require that the maximum number of vCPUs specified by the
--        <code>cpus</code> element equals to the number of vcpus resulting
--        from the topology.</dd>
-+        virtual CPU provided to the guest. Four attributes, <code>sockets</code>,
-+        <code>dies</code>, <code>cores</code>, and <code>threads</code>,
-+        accept non-zero positive integer values. They refer to the total number
-+        of CPU sockets, number of dies per socket, number of cores per die, and
-+        number of threads per core, respectively. The <code>dies</code>
-+        attribute is optional and will default to 1 if omitted, while the other
-+        attributes are all mandatory. Hypervisors may require that the maximum
-+        number of vCPUs specified by the <code>cpus</code> element equals to
-+        the number of vcpus resulting from the topology.</dd>
- 
-       <dt><code>feature</code></dt>
-       <dd>The <code>cpu</code> element can contain zero or more
-diff --git a/docs/schemas/cputypes.rng b/docs/schemas/cputypes.rng
-index 1f1e0e36d5..e2744acad3 100644
---- a/docs/schemas/cputypes.rng
-+++ b/docs/schemas/cputypes.rng
-@@ -86,6 +86,11 @@
-       <attribute name="sockets">
-         <ref name="positiveInteger"/>
-       </attribute>
-+      <optional>
-+        <attribute name="dies">
-+          <ref name="positiveInteger"/>
-+        </attribute>
-+      </optional>
-       <attribute name="cores">
-         <ref name="positiveInteger"/>
-       </attribute>
-diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
-index 48336ffa1b..d78221aea8 100644
---- a/src/bhyve/bhyve_command.c
-+++ b/src/bhyve/bhyve_command.c
-@@ -453,6 +453,11 @@ virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
-     /* CPUs */
-     virCommandAddArg(cmd, "-c");
-     if (def->cpu && def->cpu->sockets) {
-+        if (def->dies != 1) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("Only 1 die per socket is supported"));
-+            goto cleanup;
-+        }
-         if (nvcpus != def->cpu->sockets * def->cpu->cores * def->cpu->threads) {
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                            _("Invalid CPU topology: total number of vCPUs "
-diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
-index b463981de0..837d77581c 100644
---- a/src/conf/cpu_conf.c
-+++ b/src/conf/cpu_conf.c
-@@ -239,6 +239,7 @@ virCPUDefCopyWithoutModel(const virCPUDef *cpu)
-     copy->check = cpu->check;
-     copy->fallback = cpu->fallback;
-     copy->sockets = cpu->sockets;
-+    copy->dies = cpu->dies;
-     copy->cores = cpu->cores;
-     copy->threads = cpu->threads;
-     copy->arch = cpu->arch;
-@@ -535,6 +536,17 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
-         }
-         def->sockets = (unsigned int) ul;
- 
-+        if (virXPathNode("./topology[1]/@dies", ctxt)) {
-+            if (virXPathULong("string(./topology[1]/@dies)", ctxt, &ul) < 0) {
-+                virReportError(VIR_ERR_XML_ERROR, "%s",
-+                               _("Malformed 'dies' attribute in CPU topology"));
-+                goto cleanup;
-+            }
-+            def->dies = (unsigned int) ul;
-+        } else {
-+            def->dies = 1;
-+        }
-+
-         if (virXPathULong("string(./topology[1]/@cores)", ctxt, &ul) < 0) {
-             virReportError(VIR_ERR_XML_ERROR, "%s",
-                            _("Missing 'cores' attribute in CPU topology"));
-@@ -549,7 +561,7 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
-         }
-         def->threads = (unsigned int) ul;
- 
--        if (!def->sockets || !def->cores || !def->threads) {
-+        if (!def->sockets || !def->cores || !def->threads || !def->dies) {
-             virReportError(VIR_ERR_XML_ERROR, "%s",
-                            _("Invalid CPU topology"));
-             goto cleanup;
-@@ -817,9 +829,10 @@ virCPUDefFormatBuf(virBufferPtr buf,
-         virBufferAddLit(buf, "/>\n");
-     }
- 
--    if (def->sockets && def->cores && def->threads) {
-+    if (def->sockets && def->dies && def->cores && def->threads) {
-         virBufferAddLit(buf, "<topology");
-         virBufferAsprintf(buf, " sockets='%u'", def->sockets);
-+        virBufferAsprintf(buf, " dies='%u'", def->dies);
-         virBufferAsprintf(buf, " cores='%u'", def->cores);
-         virBufferAsprintf(buf, " threads='%u'", def->threads);
-         virBufferAddLit(buf, "/>\n");
-@@ -1058,6 +1071,12 @@ virCPUDefIsEqual(virCPUDefPtr src,
-         return false;
-     }
- 
-+    if (src->dies != dst->dies) {
-+        MISMATCH(_("Target CPU dies %d does not match source %d"),
-+                 dst->dies, src->dies);
-+        return false;
-+    }
-+
-     if (src->cores != dst->cores) {
-         MISMATCH(_("Target CPU cores %d does not match source %d"),
-                  dst->cores, src->cores);
-diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h
-index ec3d2379cf..6cef9e9726 100644
---- a/src/conf/cpu_conf.h
-+++ b/src/conf/cpu_conf.h
-@@ -134,6 +134,7 @@ struct _virCPUDef {
-     char *vendor;
-     unsigned int microcodeVersion;
-     unsigned int sockets;
-+    unsigned int dies;
-     unsigned int cores;
-     unsigned int threads;
-     size_t nfeatures;
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index ee57152da7..0478914c69 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -2053,7 +2053,8 @@ virDomainDefGetVcpusTopology(const virDomainDef *def,
-     tmp = def->cpu->sockets;
- 
-     /* multiplication of 32bit numbers fits into a 64bit variable */
--    if ((tmp *= def->cpu->cores) > UINT_MAX ||
-+    if ((tmp *= def->cpu->dies) > UINT_MAX ||
-+        (tmp *= def->cpu->cores) > UINT_MAX ||
-         (tmp *= def->cpu->threads) > UINT_MAX) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                        _("cpu topology results in more than %u cpus"), UINT_MAX);
-diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
-index d99466472b..ae3a0acc10 100644
---- a/src/cpu/cpu.c
-+++ b/src/cpu/cpu.c
-@@ -421,6 +421,7 @@ virCPUGetHost(virArch arch,
- 
-     if (nodeInfo) {
-         cpu->sockets = nodeInfo->sockets;
-+        cpu->dies = 1;
-         cpu->cores = nodeInfo->cores;
-         cpu->threads = nodeInfo->threads;
-     }
-diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c
-index e9f958cd8a..beac8c8cfc 100644
---- a/src/libxl/libxl_capabilities.c
-+++ b/src/libxl/libxl_capabilities.c
-@@ -186,6 +186,7 @@ libxlCapsInitCPU(virCapsPtr caps, libxl_physinfo *phy_info,
-     cpu->type = VIR_CPU_TYPE_HOST;
-     cpu->cores = phy_info->cores_per_socket;
-     cpu->threads = phy_info->threads_per_core;
-+    cpu->dies = 1;
-     cpu->sockets = phy_info->nr_cpus / (cpu->cores * cpu->threads);
-     caps->host.cpu = cpu;
- 
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index e10cc7fc74..d7e8216092 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -7130,6 +7130,11 @@ qemuBuildSmpCommandLine(virCommandPtr cmd,
-     /* sockets, cores, and threads are either all zero
-      * or all non-zero, thus checking one of them is enough */
-     if (def->cpu && def->cpu->sockets) {
-+        if (def->cpu->dies != 1) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("Only 1 die per socket is supported"));
-+            return -1;
-+        }
-         virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets);
-         virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores);
-         virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads);
-diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
-index aa88dfcb5d..4362da6cee 100644
---- a/src/vmx/vmx.c
-+++ b/src/vmx/vmx.c
-@@ -1485,6 +1485,7 @@ virVMXParseConfig(virVMXContext *ctx,
-                              "'numvcpus'"));
-             goto cleanup;
-         }
-+        cpu->dies = 1;
-         cpu->cores = coresPerSocket;
-         cpu->threads = 1;
- 
-@@ -3206,6 +3207,12 @@ virVMXFormatConfig(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virDomainDe
-             goto cleanup;
-         }
- 
-+        if (def->cpu->dies != 1) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("Only 1 die per socket is supported"));
-+            goto cleanup;
-+        }
-+
-         calculated_vcpus = def->cpu->sockets * def->cpu->cores;
-         if (calculated_vcpus != maxvcpus) {
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-diff --git a/tests/cputestdata/x86_64-host+guest,model486-result.xml b/tests/cputestdata/x86_64-host+guest,model486-result.xml
-index 85564ff458..ea8e2d3a48 100644
---- a/tests/cputestdata/x86_64-host+guest,model486-result.xml
-+++ b/tests/cputestdata/x86_64-host+guest,model486-result.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>486</model>
--  <topology sockets='2' cores='4' threads='1'/>
-+  <topology sockets='2' dies='1' cores='4' threads='1'/>
-   <feature policy='require' name='de'/>
-   <feature policy='require' name='tsc'/>
-   <feature policy='require' name='msr'/>
-diff --git a/tests/cputestdata/x86_64-host+guest,models-result.xml b/tests/cputestdata/x86_64-host+guest,models-result.xml
-index f79ed324c1..0dd6955898 100644
---- a/tests/cputestdata/x86_64-host+guest,models-result.xml
-+++ b/tests/cputestdata/x86_64-host+guest,models-result.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Nehalem</model>
--  <topology sockets='2' cores='4' threads='1'/>
-+  <topology sockets='2' dies='1' cores='4' threads='1'/>
-   <feature policy='force' name='pbe'/>
-   <feature policy='force' name='monitor'/>
-   <feature policy='require' name='xtpr'/>
-diff --git a/tests/cputestdata/x86_64-host+guest-result.xml b/tests/cputestdata/x86_64-host+guest-result.xml
-index 137a3d6647..28e3152cbf 100644
---- a/tests/cputestdata/x86_64-host+guest-result.xml
-+++ b/tests/cputestdata/x86_64-host+guest-result.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Penryn</model>
--  <topology sockets='2' cores='4' threads='1'/>
-+  <topology sockets='2' dies='1' cores='4' threads='1'/>
-   <feature policy='require' name='dca'/>
-   <feature policy='require' name='xtpr'/>
-   <feature policy='disable' name='sse4.2'/>
-diff --git a/tests/cputestdata/x86_64-host+guest.xml b/tests/cputestdata/x86_64-host+guest.xml
-index 137a3d6647..28e3152cbf 100644
---- a/tests/cputestdata/x86_64-host+guest.xml
-+++ b/tests/cputestdata/x86_64-host+guest.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Penryn</model>
--  <topology sockets='2' cores='4' threads='1'/>
-+  <topology sockets='2' dies='1' cores='4' threads='1'/>
-   <feature policy='require' name='dca'/>
-   <feature policy='require' name='xtpr'/>
-   <feature policy='disable' name='sse4.2'/>
-diff --git a/tests/cputestdata/x86_64-host+host-model-nofallback.xml b/tests/cputestdata/x86_64-host+host-model-nofallback.xml
-index 0c3ede0f6a..16d6e1daf2 100644
---- a/tests/cputestdata/x86_64-host+host-model-nofallback.xml
-+++ b/tests/cputestdata/x86_64-host+host-model-nofallback.xml
-@@ -1,7 +1,7 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='forbid'>Penryn</model>
-   <vendor>Intel</vendor>
--  <topology sockets='1' cores='2' threads='1'/>
-+  <topology sockets='1' dies='1' cores='2' threads='1'/>
-   <feature policy='require' name='dca'/>
-   <feature policy='require' name='xtpr'/>
-   <feature policy='require' name='tm2'/>
-diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml
-index 2dbe06c314..8eda6684a0 100644
---- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml
-+++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell,haswell-result.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Haswell</model>
--  <topology sockets='1' cores='2' threads='2'/>
-+  <topology sockets='1' dies='1' cores='2' threads='2'/>
-   <feature policy='disable' name='rtm'/>
-   <feature policy='disable' name='hle'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml
-index 5d149bb295..cb02449d60 100644
---- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml
-+++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Haswell</model>
--  <topology sockets='1' cores='2' threads='2'/>
-+  <topology sockets='1' dies='1' cores='2' threads='2'/>
-   <feature policy='disable' name='hle'/>
-   <feature policy='disable' name='rtm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml
-index 3b74089647..7ee926aba8 100644
---- a/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml
-+++ b/tests/cputestdata/x86_64-host-Haswell-noTSX+Haswell-noTSX-result.xml
-@@ -1,4 +1,4 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Haswell-noTSX</model>
--  <topology sockets='1' cores='2' threads='2'/>
-+  <topology sockets='1' dies='1' cores='2' threads='2'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-host-worse+guest-result.xml b/tests/cputestdata/x86_64-host-worse+guest-result.xml
-index 2edc8756c4..9d54c66a8f 100644
---- a/tests/cputestdata/x86_64-host-worse+guest-result.xml
-+++ b/tests/cputestdata/x86_64-host-worse+guest-result.xml
-@@ -1,6 +1,6 @@
- <cpu mode='custom' match='exact'>
-   <model fallback='allow'>Penryn</model>
--  <topology sockets='2' cores='4' threads='1'/>
-+  <topology sockets='2' dies='1' cores='4' threads='1'/>
-   <feature policy='disable' name='dca'/>
-   <feature policy='disable' name='xtpr'/>
-   <feature policy='disable' name='sse4.2'/>
-diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml
-index 1a769235a3..f80c4367df 100644
---- a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml
-+++ b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-conf.xml
-@@ -43,7 +43,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='4' threads='8'/>
-+    <topology sockets='1' dies='1' cores='4' threads='8'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml
-index 43e6267250..7998b978fb 100644
---- a/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml
-+++ b/tests/qemuhotplugtestcpus/ppc64-modern-bulk-result-live.xml
-@@ -43,7 +43,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='4' threads='8'/>
-+    <topology sockets='1' dies='1' cores='4' threads='8'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml
-index cfb44cc433..2a48a97eef 100644
---- a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml
-+++ b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-conf.xml
-@@ -43,7 +43,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='4' threads='8'/>
-+    <topology sockets='1' dies='1' cores='4' threads='8'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml
-index 0a8d372149..90518d1fa9 100644
---- a/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml
-+++ b/tests/qemuhotplugtestcpus/ppc64-modern-individual-result-live.xml
-@@ -43,7 +43,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='4' threads='8'/>
-+    <topology sockets='1' dies='1' cores='4' threads='8'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml
-index 6457f4056b..0d622fc8ae 100644
---- a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml
-+++ b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-conf.xml
-@@ -19,7 +19,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml
-index fe9a81a091..ed9deaea4a 100644
---- a/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml
-+++ b/tests/qemuhotplugtestcpus/x86-modern-bulk-result-live.xml
-@@ -19,7 +19,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml
-index 58c088de88..342f172108 100644
---- a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml
-+++ b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-conf.xml
-@@ -19,7 +19,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml
-index 12b28be5fe..b8341c74e5 100644
---- a/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml
-+++ b/tests/qemuhotplugtestcpus/x86-modern-individual-add-result-live.xml
-@@ -19,7 +19,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml b/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml
-index f635e37b82..29da89f5bc 100644
---- a/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml
-+++ b/tests/qemuhotplugtestcpus/x86-old-bulk-result-conf.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml b/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml
-index 6f50bb5c12..f81194db5b 100644
---- a/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml
-+++ b/tests/qemuhotplugtestcpus/x86-old-bulk-result-live.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/cpu-hotplug-granularity.xml b/tests/qemuxml2argvdata/cpu-hotplug-granularity.xml
-index a94f41e46a..bf6a42c306 100644
---- a/tests/qemuxml2argvdata/cpu-hotplug-granularity.xml
-+++ b/tests/qemuxml2argvdata/cpu-hotplug-granularity.xml
-@@ -7,7 +7,7 @@
-     <type arch='ppc64' machine='pseries'>hvm</type>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='2' threads='4'/>
-+    <topology sockets='1' dies='1' cores='2' threads='4'/>
-   </cpu>
-   <devices>
-     <emulator>/usr/bin/qemu-system-ppc64</emulator>
-diff --git a/tests/qemuxml2argvdata/cpu-hotplug-startup.xml b/tests/qemuxml2argvdata/cpu-hotplug-startup.xml
-index 99987ba15a..9d764e2f8c 100644
---- a/tests/qemuxml2argvdata/cpu-hotplug-startup.xml
-+++ b/tests/qemuxml2argvdata/cpu-hotplug-startup.xml
-@@ -17,7 +17,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets="3" cores="2" threads="1"/>
-+    <topology sockets="3" dies="1" cores="2" threads="1"/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/cpu-numa-disjoint.xml b/tests/qemuxml2argvdata/cpu-numa-disjoint.xml
-index b022384e97..c164b15e82 100644
---- a/tests/qemuxml2argvdata/cpu-numa-disjoint.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa-disjoint.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-3,8-11' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='4-7,12-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/cpu-numa-disordered.xml b/tests/qemuxml2argvdata/cpu-numa-disordered.xml
-index e209150a55..6e00b91281 100644
---- a/tests/qemuxml2argvdata/cpu-numa-disordered.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa-disordered.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-5' memory='109550' unit='KiB'/>
-       <cell id='2' cpus='6-10' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/cpu-numa-memshared.xml b/tests/qemuxml2argvdata/cpu-numa-memshared.xml
-index 7e05916f78..f2ef035b00 100644
---- a/tests/qemuxml2argvdata/cpu-numa-memshared.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa-memshared.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB' memAccess='shared'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB' memAccess='private'/>
-diff --git a/tests/qemuxml2argvdata/cpu-numa-no-memory-element.xml b/tests/qemuxml2argvdata/cpu-numa-no-memory-element.xml
-index ee6b6aa870..97dac01e84 100644
---- a/tests/qemuxml2argvdata/cpu-numa-no-memory-element.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa-no-memory-element.xml
-@@ -8,7 +8,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/cpu-numa1.xml b/tests/qemuxml2argvdata/cpu-numa1.xml
-index b21941d51a..867d21e152 100644
---- a/tests/qemuxml2argvdata/cpu-numa1.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa1.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell cpus='0-7' memory='109550' unit='KiB'/>
-       <cell cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/cpu-numa2.xml b/tests/qemuxml2argvdata/cpu-numa2.xml
-index b85b19f5e0..e589948dc7 100644
---- a/tests/qemuxml2argvdata/cpu-numa2.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa2.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/cpu-numa3.xml b/tests/qemuxml2argvdata/cpu-numa3.xml
-index e2b9e9014d..350fbe7c07 100644
---- a/tests/qemuxml2argvdata/cpu-numa3.xml
-+++ b/tests/qemuxml2argvdata/cpu-numa3.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='1' cpus='0-7' memory='109550' unit='KiB'/>
-       <cell id='2' cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/cpu-topology1.xml b/tests/qemuxml2argvdata/cpu-topology1.xml
-index 9d77d10a5c..af82a1c51a 100644
---- a/tests/qemuxml2argvdata/cpu-topology1.xml
-+++ b/tests/qemuxml2argvdata/cpu-topology1.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets="3" cores="2" threads="1"/>
-+    <topology sockets="3" dies="1" cores="2" threads="1"/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/cpu-topology2.xml b/tests/qemuxml2argvdata/cpu-topology2.xml
-index 9d9701914a..1b113b8b13 100644
---- a/tests/qemuxml2argvdata/cpu-topology2.xml
-+++ b/tests/qemuxml2argvdata/cpu-topology2.xml
-@@ -10,7 +10,7 @@
-   </os>
-   <cpu match='exact'>
-     <model>core2duo</model>
--    <topology sockets="1" cores="2" threads="3"/>
-+    <topology sockets="1" dies="1" cores="2" threads="3"/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/cpu-topology3.xml b/tests/qemuxml2argvdata/cpu-topology3.xml
-index 9d77d10a5c..af82a1c51a 100644
---- a/tests/qemuxml2argvdata/cpu-topology3.xml
-+++ b/tests/qemuxml2argvdata/cpu-topology3.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets="3" cores="2" threads="1"/>
-+    <topology sockets="3" dies="1" cores="2" threads="1"/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml
-index 4c30761110..eb3300b1fb 100644
---- a/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml
-+++ b/tests/qemuxml2argvdata/fd-memory-no-numa-topology.xml
-@@ -14,7 +14,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='8' cores='1' threads='1'/>
-+    <topology sockets='8' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology.xml
-index f22a8e81f8..b7b5a19166 100644
---- a/tests/qemuxml2argvdata/fd-memory-numa-topology.xml
-+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology.xml
-@@ -14,7 +14,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='8' threads='1'/>
-+    <topology sockets='1' dies='1' cores='8' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml
-index 925f39b6ab..07de0bd717 100644
---- a/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml
-+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology2.xml
-@@ -14,7 +14,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='8' threads='1'/>
-+    <topology sockets='1' dies='1' cores='8' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
-       <cell id='1' cpus='8-15' memory='14680064' unit='KiB' memAccess='shared'/>
-diff --git a/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml b/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml
-index 71a8e083c9..8711641b68 100644
---- a/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml
-+++ b/tests/qemuxml2argvdata/fd-memory-numa-topology3.xml
-@@ -14,7 +14,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='24' threads='1'/>
-+    <topology sockets='1' dies='1' cores='24' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='14680064' unit='KiB'/>
-       <cell id='1' cpus='2-3' memory='14680064' unit='KiB' memAccess='shared'/>
-diff --git a/tests/qemuxml2argvdata/graphics-spice-timeout.xml b/tests/qemuxml2argvdata/graphics-spice-timeout.xml
-index 6bb4eb8f4c..d96f519bf8 100644
---- a/tests/qemuxml2argvdata/graphics-spice-timeout.xml
-+++ b/tests/qemuxml2argvdata/graphics-spice-timeout.xml
-@@ -18,7 +18,7 @@
-   <cpu match='exact'>
-     <model>core2duo</model>
-     <vendor>Intel</vendor>
--    <topology sockets='1' cores='2' threads='1'/>
-+    <topology sockets='1' dies='1' cores='2' threads='1'/>
-     <feature policy='require' name='ds'/>
-     <feature policy='require' name='acpi'/>
-     <feature policy='require' name='ss'/>
-diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.xml b/tests/qemuxml2argvdata/hugepages-nvdimm.xml
-index b784777805..144d02b56e 100644
---- a/tests/qemuxml2argvdata/hugepages-nvdimm.xml
-+++ b/tests/qemuxml2argvdata/hugepages-nvdimm.xml
-@@ -16,7 +16,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml
-index 45ff012711..ded56dd538 100644
---- a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml
-+++ b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.xml
-@@ -18,7 +18,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='8' threads='1'/>
-+    <topology sockets='1' dies='1' cores='8' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.xml b/tests/qemuxml2argvdata/memfd-memory-numa.xml
-index f088f01d11..ebe638f600 100644
---- a/tests/qemuxml2argvdata/memfd-memory-numa.xml
-+++ b/tests/qemuxml2argvdata/memfd-memory-numa.xml
-@@ -20,7 +20,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='1' cores='8' threads='1'/>
-+    <topology sockets='1' dies='1' cores='8' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='14680064' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-align-fail.xml b/tests/qemuxml2argvdata/memory-align-fail.xml
-index 75c1a46068..636f0e3d8e 100644
---- a/tests/qemuxml2argvdata/memory-align-fail.xml
-+++ b/tests/qemuxml2argvdata/memory-align-fail.xml
-@@ -10,7 +10,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='9007199254740991' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.xml b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.xml
-index c289fdd5ff..ea4f4fd745 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.xml
-@@ -10,7 +10,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm.xml b/tests/qemuxml2argvdata/memory-hotplug-dimm.xml
-index c68336f871..585e0a5f51 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-dimm.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-dimm.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
-index 4e62dd0e18..a1cc1264eb 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
-index defa109e80..018a693aaf 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
-index 89d01d672f..c9d54a6088 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
-index e6a4f7901a..391d70f20e 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
-index dd48540712..09b2c5c833 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml
-index 9c76dda6c8..a32474da06 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='1048576' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/memory-hotplug.xml b/tests/qemuxml2argvdata/memory-hotplug.xml
-index e1f086567b..8d09856e95 100644
---- a/tests/qemuxml2argvdata/memory-hotplug.xml
-+++ b/tests/qemuxml2argvdata/memory-hotplug.xml
-@@ -10,7 +10,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.xml b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.xml
-index 50dbc3c466..5758e65d09 100644
---- a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.xml
-+++ b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-cpuset.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml
-index d9cd6b83f1..80314d05a3 100644
---- a/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml
-+++ b/tests/qemuxml2argvdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.xml b/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.xml
-index f21ba0a786..0edf8ee46f 100644
---- a/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.xml
-+++ b/tests/qemuxml2argvdata/numad-auto-vcpu-no-numatune.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune-no-nodeset.xml b/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune-no-nodeset.xml
-index 378d17face..517dd5dbd7 100644
---- a/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune-no-nodeset.xml
-+++ b/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune-no-nodeset.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.xml b/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.xml
-index e20bd8db0b..a7f32b6802 100644
---- a/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.xml
-+++ b/tests/qemuxml2argvdata/numad-auto-vcpu-static-numatune.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.xml b/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.xml
-index 50dbc3c466..5758e65d09 100644
---- a/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.xml
-+++ b/tests/qemuxml2argvdata/numad-static-memory-auto-vcpu.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.xml b/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.xml
-index 7ccaa5aff4..3237e7c7c5 100644
---- a/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.xml
-+++ b/tests/qemuxml2argvdata/numad-static-vcpu-no-numatune.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numad.xml b/tests/qemuxml2argvdata/numad.xml
-index 081a59a013..ae995e2d6b 100644
---- a/tests/qemuxml2argvdata/numad.xml
-+++ b/tests/qemuxml2argvdata/numad.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.xml b/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.xml
-index 44ec55a810..e6ca895b0d 100644
---- a/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.xml
-+++ b/tests/qemuxml2argvdata/numatune-auto-nodeset-invalid.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numatune-memory-invalid-nodeset.xml b/tests/qemuxml2argvdata/numatune-memory-invalid-nodeset.xml
-index 441f2b8989..70e7b92f34 100644
---- a/tests/qemuxml2argvdata/numatune-memory-invalid-nodeset.xml
-+++ b/tests/qemuxml2argvdata/numatune-memory-invalid-nodeset.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/numatune-memory.xml b/tests/qemuxml2argvdata/numatune-memory.xml
-index c9887dbebc..93ee70cc0b 100644
---- a/tests/qemuxml2argvdata/numatune-memory.xml
-+++ b/tests/qemuxml2argvdata/numatune-memory.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2argvdata/pci-expander-bus-bad-machine.xml b/tests/qemuxml2argvdata/pci-expander-bus-bad-machine.xml
-index 606ddfd73c..5093944a1c 100644
---- a/tests/qemuxml2argvdata/pci-expander-bus-bad-machine.xml
-+++ b/tests/qemuxml2argvdata/pci-expander-bus-bad-machine.xml
-@@ -8,7 +8,7 @@
-     <type arch='x86_64' machine='q35'>hvm</type>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell cpus='0-7' memory='109550' unit='KiB'/>
-       <cell cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/pci-expander-bus.xml b/tests/qemuxml2argvdata/pci-expander-bus.xml
-index 79c959346d..d9aeda1757 100644
---- a/tests/qemuxml2argvdata/pci-expander-bus.xml
-+++ b/tests/qemuxml2argvdata/pci-expander-bus.xml
-@@ -8,7 +8,7 @@
-     <type arch='x86_64' machine='pc-i440fx-2.5'>hvm</type>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell cpus='0-7' memory='109550' unit='KiB'/>
-       <cell cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/pcie-expander-bus-bad-bus.xml b/tests/qemuxml2argvdata/pcie-expander-bus-bad-bus.xml
-index f0ab0a16d1..4a6cb492bb 100644
---- a/tests/qemuxml2argvdata/pcie-expander-bus-bad-bus.xml
-+++ b/tests/qemuxml2argvdata/pcie-expander-bus-bad-bus.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell cpus='0-7' memory='109550' unit='KiB'/>
-       <cell cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/pcie-expander-bus-bad-machine.xml b/tests/qemuxml2argvdata/pcie-expander-bus-bad-machine.xml
-index dc64d97b83..1c27047b75 100644
---- a/tests/qemuxml2argvdata/pcie-expander-bus-bad-machine.xml
-+++ b/tests/qemuxml2argvdata/pcie-expander-bus-bad-machine.xml
-@@ -8,7 +8,7 @@
-     <type arch='x86_64' machine='pc-i440fx-2.5'>hvm</type>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell cpus='0-7' memory='109550' unit='KiB'/>
-       <cell cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/pcie-expander-bus.xml b/tests/qemuxml2argvdata/pcie-expander-bus.xml
-index 5c5d34d1e0..80693f8a1c 100644
---- a/tests/qemuxml2argvdata/pcie-expander-bus.xml
-+++ b/tests/qemuxml2argvdata/pcie-expander-bus.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell cpus='0-7' memory='109550' unit='KiB'/>
-       <cell cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/pseries-default-phb-numa-node.xml b/tests/qemuxml2argvdata/pseries-default-phb-numa-node.xml
-index 12d277aaf8..27f211d59d 100644
---- a/tests/qemuxml2argvdata/pseries-default-phb-numa-node.xml
-+++ b/tests/qemuxml2argvdata/pseries-default-phb-numa-node.xml
-@@ -7,7 +7,7 @@
-     <memnode cellid="0" mode="strict" nodeset="1"/>
-   </numatune>
-   <cpu>
--    <topology sockets='3' cores='1' threads='8'/>
-+    <topology sockets='3' dies='1' cores='1' threads='8'/>
-     <numa>
-       <cell id='0' cpus='0-23' memory='1048576' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2argvdata/pseries-phb-numa-node.xml b/tests/qemuxml2argvdata/pseries-phb-numa-node.xml
-index aeccb14dfb..52c39d5dbd 100644
---- a/tests/qemuxml2argvdata/pseries-phb-numa-node.xml
-+++ b/tests/qemuxml2argvdata/pseries-phb-numa-node.xml
-@@ -8,7 +8,7 @@
-     <memnode cellid="1" mode="strict" nodeset="2"/>
-   </numatune>
-   <cpu>
--    <topology sockets='2' cores='1' threads='4'/>
-+    <topology sockets='2' dies='1' cores='1' threads='4'/>
-     <numa>
-       <cell id='0' cpus='0-3' memory='1048576' unit='KiB'/>
-       <cell id='1' cpus='4-7' memory='1048576' unit='KiB'/>
-diff --git a/tests/qemuxml2argvdata/smp.xml b/tests/qemuxml2argvdata/smp.xml
-index 55d5cdeff2..6041506ed8 100644
---- a/tests/qemuxml2argvdata/smp.xml
-+++ b/tests/qemuxml2argvdata/smp.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml b/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml
-index f0ca39b5d3..d7f5372fbc 100644
---- a/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-numa-disjoint.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-3,8-11' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='4-7,12-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml b/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml
-index 1e672adc44..487ced1008 100644
---- a/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-numa-disordered.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-5' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='11-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml b/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml
-index 3db0db047c..f472bffec3 100644
---- a/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-numa-memshared.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB' memAccess='shared'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB' memAccess='private'/>
-diff --git a/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml b/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml
-index 8596baae6c..2ef7f84646 100644
---- a/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-numa-no-memory-element.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/cpu-numa1.xml b/tests/qemuxml2xmloutdata/cpu-numa1.xml
-index 8596baae6c..2ef7f84646 100644
---- a/tests/qemuxml2xmloutdata/cpu-numa1.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-numa1.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/cpu-numa2.xml b/tests/qemuxml2xmloutdata/cpu-numa2.xml
-index 8596baae6c..2ef7f84646 100644
---- a/tests/qemuxml2xmloutdata/cpu-numa2.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-numa2.xml
-@@ -9,7 +9,7 @@
-     <boot dev='network'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml b/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml
-index 3f0babd8fc..6e23652448 100644
---- a/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml
-+++ b/tests/qemuxml2xmloutdata/graphics-spice-timeout.xml
-@@ -18,7 +18,7 @@
-   <cpu mode='custom' match='exact' check='partial'>
-     <model fallback='allow'>core2duo</model>
-     <vendor>Intel</vendor>
--    <topology sockets='1' cores='2' threads='1'/>
-+    <topology sockets='1' dies='1' cores='2' threads='1'/>
-     <feature policy='require' name='ds'/>
-     <feature policy='require' name='acpi'/>
-     <feature policy='require' name='ss'/>
-diff --git a/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml b/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml
-index f4a118cea5..326b5c954c 100644
---- a/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml
-+++ b/tests/qemuxml2xmloutdata/memory-hotplug-dimm.xml
-@@ -14,7 +14,7 @@
-     <gid start='0' target='1000' count='10'/>
-   </idmap>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2xmloutdata/memory-hotplug.xml b/tests/qemuxml2xmloutdata/memory-hotplug.xml
-index 0e02f210bc..0e5295dcd0 100644
---- a/tests/qemuxml2xmloutdata/memory-hotplug.xml
-+++ b/tests/qemuxml2xmloutdata/memory-hotplug.xml
-@@ -10,7 +10,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-     <numa>
-       <cell id='0' cpus='0-1' memory='219136' unit='KiB'/>
-     </numa>
-diff --git a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml
-index 133177b679..841ea699a1 100644
---- a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml
-+++ b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-cpuset.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml
-index dc14ecd139..2e3998e155 100644
---- a/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml
-+++ b/tests/qemuxml2xmloutdata/numad-auto-memory-vcpu-no-cpuset-and-placement.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml b/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml
-index 76d7c3b835..7c1f18c216 100644
---- a/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml
-+++ b/tests/qemuxml2xmloutdata/numad-auto-vcpu-no-numatune.xml
-@@ -12,7 +12,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml b/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml
-index 523962117e..3d05790c0e 100644
---- a/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml
-+++ b/tests/qemuxml2xmloutdata/numad-static-vcpu-no-numatune.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/qemuxml2xmloutdata/pci-expander-bus.xml b/tests/qemuxml2xmloutdata/pci-expander-bus.xml
-index e0d787e57c..60e4e4af7f 100644
---- a/tests/qemuxml2xmloutdata/pci-expander-bus.xml
-+++ b/tests/qemuxml2xmloutdata/pci-expander-bus.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/pcie-expander-bus.xml b/tests/qemuxml2xmloutdata/pcie-expander-bus.xml
-index 643b4823bb..452d476da6 100644
---- a/tests/qemuxml2xmloutdata/pcie-expander-bus.xml
-+++ b/tests/qemuxml2xmloutdata/pcie-expander-bus.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='4' threads='2'/>
-+    <topology sockets='2' dies='1' cores='4' threads='2'/>
-     <numa>
-       <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
-       <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml b/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml
-index 80b771e89d..b05ac334a6 100644
---- a/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml
-+++ b/tests/qemuxml2xmloutdata/pseries-phb-numa-node.xml
-@@ -13,7 +13,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='4'/>
-+    <topology sockets='2' dies='1' cores='1' threads='4'/>
-     <numa>
-       <cell id='0' cpus='0-3' memory='1048576' unit='KiB'/>
-       <cell id='1' cpus='4-7' memory='1048576' unit='KiB'/>
-diff --git a/tests/qemuxml2xmloutdata/smp.xml b/tests/qemuxml2xmloutdata/smp.xml
-index d3712cb7df..3e00f578e5 100644
---- a/tests/qemuxml2xmloutdata/smp.xml
-+++ b/tests/qemuxml2xmloutdata/smp.xml
-@@ -9,7 +9,7 @@
-     <boot dev='hd'/>
-   </os>
-   <cpu>
--    <topology sockets='2' cores='1' threads='1'/>
-+    <topology sockets='2' dies='1' cores='1' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml
-index eba5f4734a..2011bfb3b9 100644
---- a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml
-+++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml
-@@ -11,7 +11,7 @@
-     <type arch='x86_64'>hvm</type>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='2' threads='1'/>
-+    <topology sockets='4' dies='1' cores='2' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-diff --git a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml
-index f1fe6dd4c9..fa428c1986 100644
---- a/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml
-+++ b/tests/vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml
-@@ -12,7 +12,7 @@
-     <type arch='x86_64'>hvm</type>
-   </os>
-   <cpu>
--    <topology sockets='4' cores='4' threads='1'/>
-+    <topology sockets='4' dies='1' cores='4' threads='1'/>
-   </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-add-virtiofs-related-elements-and-attributes.patch b/SOURCES/libvirt-conf-add-virtiofs-related-elements-and-attributes.patch
deleted file mode 100644
index 7cf26c8..0000000
--- a/SOURCES/libvirt-conf-add-virtiofs-related-elements-and-attributes.patch
+++ /dev/null
@@ -1,395 +0,0 @@
-From c811bd72130364673dd4a0d2a997a1d8f675eb71 Mon Sep 17 00:00:00 2001
-Message-Id: <c811bd72130364673dd4a0d2a997a1d8f675eb71@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:42 +0100
-Subject: [PATCH] conf: add virtiofs-related elements and attributes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add more elements for tuning the virtiofsd daemon
-and the vhost-user-fs device:
-
-  <driver type='virtiofs' queue='1024' xattr='on'>
-    <binary path='/usr/libexec/virtiofsd'>
-      <cache mode='always'/>
-      <lock posix='off' flock='off'/>
-    </binary>
-  </driver>
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 66079339847dc942b9b673e3040b56b055a8d8f5)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <506d0532c6043a9b8c946bdc42c3d9c5529f6fb8.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/formatdomain.html.in                     |  25 ++++-
- docs/schemas/domaincommon.rng                 |  48 ++++++++
- src/conf/domain_conf.c                        | 104 +++++++++++++++++-
- src/conf/domain_conf.h                        |  15 +++
- src/libvirt_private.syms                      |   1 +
- .../vhost-user-fs-fd-memory.xml               |   6 +-
- .../vhost-user-fs-hugepages.xml               |   1 +
- 7 files changed, 197 insertions(+), 3 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 337ab01316..e9830ab231 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -3936,7 +3936,11 @@
-     &lt;readonly/&gt;
-   &lt;/filesystem&gt;
-   &lt;filesystem type='mount' accessmode='passthrough'&gt;
--      &lt;driver type='virtiofs'/&gt;
-+      &lt;driver type='virtiofs queue='1024'/&gt;
-+      &lt;binary path='/usr/libexec/virtiofsd' xattr='on'&gt;
-+         &lt;cache mode='always'/&gt;
-+         &lt;lock posix='on' flock='on'/&gt;
-+      &lt;/binary&gt;
-       &lt;source dir='/path'/&gt;
-       &lt;target dir='mount_tag'/&gt;
-   &lt;/filesystem&gt;
-@@ -4063,9 +4067,28 @@
-           <a href="#elementsVirtio">Virtio-specific options</a> can also be
-           set. (<span class="since">Since 3.5.0</span>)
-           </li>
-+          <li>
-+            For <code>virtiofs</code>, the <code>queue</code> attribute can be used
-+            to specify the queue size (i.e. how many requests can the queue fit).
-+            (<span class="since">Since 6.2.0</span>)
-+          </li>
-         </ul>
-       </dd>
- 
-+      <dt><code>binary</code></dt>
-+      <dd>
-+        The optional <code>binary</code> element can tune the options for virtiofsd.
-+        All of the following attributes and elements are optional.
-+        The attribute <code>path</code> can be used to override the path to the daemon.
-+        Attribute <code>xattr</code> enables the use of filesystem extended attributes.
-+        Caching can be tuned via the <code>cache</code> element, possible <code>mode</code>
-+        values being <code>none</code> and <code>always</code>.
-+        Locking can be controlled via the <code>lock</code>
-+        element - attributes <code>posix</code> and <code>flock</code> both accepting
-+        values <code>on</code> or <code>off</code>.
-+        (<span class="since">Since 6.2.0</span>)
-+      </dd>
-+
-       <dt><code>source</code></dt>
-       <dd>
-         The resource on the host that is being accessed in the guest. The
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 5a9291b443..aa70e340b9 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -2500,6 +2500,9 @@
-           <optional>
-             <ref name="fsDriver"/>
-           </optional>
-+          <optional>
-+            <ref name="fsBinary"/>
-+          </optional>
-           <interleave>
-             <element name="source">
-               <attribute name="dir">
-@@ -2649,12 +2652,57 @@
-           <attribute name="type">
-             <value>virtiofs</value>
-           </attribute>
-+          <optional>
-+            <attribute name="queue">
-+              <ref name="unsignedInt"/>
-+            </attribute>
-+          </optional>
-           <ref name='virtioOptions'/>
-         </group>
-         <empty/>
-       </choice>
-     </element>
-   </define>
-+  <define name="fsBinary">
-+    <element name="binary">
-+      <optional>
-+        <attribute name="path">
-+          <ref name="absFilePath"/>
-+        </attribute>
-+      </optional>
-+      <optional>
-+        <attribute name="xattr">
-+          <ref name="virOnOff"/>
-+        </attribute>
-+      </optional>
-+      <optional>
-+        <element name="cache">
-+          <optional>
-+            <attribute name="mode">
-+              <choice>
-+                <value>none</value>
-+                <value>always</value>
-+              </choice>
-+            </attribute>
-+          </optional>
-+        </element>
-+      </optional>
-+      <optional>
-+        <element name="lock">
-+          <optional>
-+            <attribute name="posix">
-+              <ref name="virOnOff"/>
-+            </attribute>
-+          </optional>
-+          <optional>
-+            <attribute name="flock">
-+              <ref name="virOnOff"/>
-+            </attribute>
-+          </optional>
-+        </element>
-+      </optional>
-+    </element>
-+  </define>
- 
-   <define name="interface-network-attributes">
-     <attribute name="network">
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 31d4828802..3a370e6b90 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -500,6 +500,14 @@ VIR_ENUM_IMPL(virDomainFSModel,
-               "virtio-non-transitional",
- );
- 
-+VIR_ENUM_IMPL(virDomainFSCacheMode,
-+              VIR_DOMAIN_FS_CACHE_MODE_LAST,
-+              "default",
-+              "none",
-+              "always",
-+);
-+
-+
- VIR_ENUM_IMPL(virDomainNet,
-               VIR_DOMAIN_NET_TYPE_LAST,
-               "user",
-@@ -2322,6 +2330,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
-     virDomainDeviceInfoClear(&def->info);
-     VIR_FREE(def->virtio);
-     virObjectUnref(def->privateData);
-+    VIR_FREE(def->binary);
- 
-     VIR_FREE(def);
- }
-@@ -11293,6 +11302,63 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt,
-         }
-     }
- 
-+    if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
-+        g_autofree char *queue_size = virXPathString("string(./driver/@queue)", ctxt);
-+        g_autofree char *binary = virXPathString("string(./binary/@path)", ctxt);
-+        g_autofree char *xattr = virXPathString("string(./binary/@xattr)", ctxt);
-+        g_autofree char *cache = virXPathString("string(./binary/cache/@mode)", ctxt);
-+        g_autofree char *posix_lock = virXPathString("string(./binary/lock/@posix)", ctxt);
-+        g_autofree char *flock = virXPathString("string(./binary/lock/@flock)", ctxt);
-+        int val;
-+
-+        if (queue_size && virStrToLong_ull(queue_size, NULL, 10, &def->queue_size) < 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("cannot parse queue size '%s' for virtiofs"),
-+                           queue_size);
-+            goto error;
-+        }
-+
-+        if (binary)
-+            def->binary = virFileSanitizePath(binary);
-+
-+        if (xattr) {
-+            if ((val = virTristateSwitchTypeFromString(xattr)) <= 0) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("unknown xattr value '%s'"), xattr);
-+                goto error;
-+            }
-+            def->xattr = val;
-+        }
-+
-+        if (cache) {
-+            if ((val = virDomainFSCacheModeTypeFromString(cache)) <= 0) {
-+                virReportError(VIR_ERR_XML_ERROR,
-+                               _("cannot parse cache mode '%s' for virtiofs"),
-+                               cache);
-+                goto error;
-+            }
-+            def->cache = val;
-+        }
-+
-+        if (posix_lock) {
-+            if ((val = virTristateSwitchTypeFromString(posix_lock)) <= 0) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("unknown posix lock value '%s'"), posix_lock);
-+                goto error;
-+            }
-+            def->posix_lock = val;
-+        }
-+
-+        if (flock) {
-+            if ((val = virTristateSwitchTypeFromString(flock)) <= 0) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("unknown flock value '%s'"), flock);
-+                goto error;
-+            }
-+            def->flock = val;
-+        }
-+    }
-+
-     if (format) {
-         if ((def->format = virStorageFileFormatTypeFromString(format)) <= 0) {
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-@@ -24994,6 +25060,9 @@ virDomainFSDefFormat(virBufferPtr buf,
-     const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
-     const char *src = def->src->path;
-     g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
-+    g_auto(virBuffer) driverBuf = VIR_BUFFER_INIT_CHILD(buf);
-+    g_auto(virBuffer) binaryAttrBuf = VIR_BUFFER_INITIALIZER;
-+    g_auto(virBuffer) binaryBuf = VIR_BUFFER_INIT_CHILD(buf);
- 
-     if (!type) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-@@ -25017,6 +25086,8 @@ virDomainFSDefFormat(virBufferPtr buf,
-     virBufferAddLit(buf, ">\n");
- 
-     virBufferAdjustIndent(buf, 2);
-+    virBufferAdjustIndent(&driverBuf, 2);
-+    virBufferAdjustIndent(&binaryBuf, 2);
-     if (def->fsdriver) {
-         virBufferAsprintf(&driverAttrBuf, " type='%s'", fsdriver);
- 
-@@ -25028,11 +25099,42 @@ virDomainFSDefFormat(virBufferPtr buf,
-         if (def->wrpolicy)
-             virBufferAsprintf(&driverAttrBuf, " wrpolicy='%s'", wrpolicy);
- 
-+        if (def->queue_size)
-+            virBufferAsprintf(&driverAttrBuf, " queue='%llu'", def->queue_size);
-+
-+    }
-+
-+    if (def->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
-+        g_auto(virBuffer) lockAttrBuf = VIR_BUFFER_INITIALIZER;
-+        virBufferEscapeString(&binaryAttrBuf, " path='%s'", def->binary);
-+
-+        if (def->xattr != VIR_TRISTATE_SWITCH_ABSENT) {
-+            virBufferAsprintf(&binaryAttrBuf, " xattr='%s'",
-+                              virTristateSwitchTypeToString(def->xattr));
-+        }
-+
-+        if (def->cache != VIR_DOMAIN_FS_CACHE_MODE_DEFAULT) {
-+            virBufferAsprintf(&binaryBuf, "<cache mode='%s'/>\n",
-+                              virDomainFSCacheModeTypeToString(def->cache));
-+        }
-+
-+        if (def->posix_lock != VIR_TRISTATE_SWITCH_ABSENT) {
-+            virBufferAsprintf(&lockAttrBuf, " posix='%s'",
-+                              virTristateSwitchTypeToString(def->posix_lock));
-+        }
-+
-+        if (def->flock != VIR_TRISTATE_SWITCH_ABSENT) {
-+            virBufferAsprintf(&lockAttrBuf, " flock='%s'",
-+                              virTristateSwitchTypeToString(def->flock));
-+        }
-+
-+        virXMLFormatElement(&binaryBuf, "lock", &lockAttrBuf, NULL);
-     }
- 
-     virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
- 
--    virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
-+    virXMLFormatElement(buf, "driver", &driverAttrBuf, &driverBuf);
-+    virXMLFormatElement(buf, "binary", &binaryAttrBuf, &binaryBuf);
- 
-     switch (def->type) {
-     case VIR_DOMAIN_FS_TYPE_MOUNT:
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index 921cc42a57..2a382ede72 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -802,6 +802,14 @@ typedef enum {
-     VIR_DOMAIN_FS_MODEL_LAST
- } virDomainFSModel;
- 
-+typedef enum {
-+    VIR_DOMAIN_FS_CACHE_MODE_DEFAULT = 0,
-+    VIR_DOMAIN_FS_CACHE_MODE_NONE,
-+    VIR_DOMAIN_FS_CACHE_MODE_ALWAYS,
-+
-+    VIR_DOMAIN_FS_CACHE_MODE_LAST
-+} virDomainFSCacheMode;
-+
- struct _virDomainFSDef {
-     int type;
-     int fsdriver; /* enum virDomainFSDriverType */
-@@ -817,6 +825,12 @@ struct _virDomainFSDef {
-     unsigned long long space_hard_limit; /* in bytes */
-     unsigned long long space_soft_limit; /* in bytes */
-     bool symlinksResolved;
-+    char *binary;
-+    unsigned long long queue_size;
-+    virTristateSwitch xattr;
-+    virDomainFSCacheMode cache;
-+    virTristateSwitch posix_lock;
-+    virTristateSwitch flock;
-     virDomainVirtioOptionsPtr virtio;
-     virObjectPtr privateData;
- };
-@@ -3437,6 +3451,7 @@ VIR_ENUM_DECL(virDomainFSDriver);
- VIR_ENUM_DECL(virDomainFSAccessMode);
- VIR_ENUM_DECL(virDomainFSWrpolicy);
- VIR_ENUM_DECL(virDomainFSModel);
-+VIR_ENUM_DECL(virDomainFSCacheMode);
- VIR_ENUM_DECL(virDomainNet);
- VIR_ENUM_DECL(virDomainNetBackend);
- VIR_ENUM_DECL(virDomainNetVirtioTxMode);
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index bc2858fc00..5dc99e03cf 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -389,6 +389,7 @@ virDomainDiskSourceFormat;
- virDomainDiskTranslateSourcePool;
- virDomainFeatureTypeFromString;
- virDomainFeatureTypeToString;
-+virDomainFSCacheModeTypeToString;
- virDomainFSDefFree;
- virDomainFSDefNew;
- virDomainFSDriverTypeToString;
-diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
-index a6b6279fb8..f6bb663e97 100644
---- a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
-+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
-@@ -27,7 +27,11 @@
-     <controller type='usb' index='0' model='none'/>
-     <controller type='pci' index='0' model='pci-root'/>
-     <filesystem type='mount' accessmode='passthrough'>
--      <driver type='virtiofs'/>
-+      <driver type='virtiofs' queue='1024'/>
-+      <binary path='/usr/libexec/virtiofsd' xattr='on'>
-+        <cache mode='always'/>
-+        <lock posix='off' flock='off'/>
-+      </binary>
-       <source dir='/path'/>
-       <target dir='mount_tag'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
-index 70df7b890d..96b9774704 100644
---- a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
-+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
-@@ -63,6 +63,7 @@
-     </controller>
-     <filesystem type='mount' accessmode='passthrough'>
-       <driver type='virtiofs'/>
-+      <binary path='/usr/libexec/virtiofsd'/>
-       <source dir='/path'/>
-       <target dir='mount_tag'/>
-       <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-backup-Allow-configuration-of-names-exported-via-NBD.patch b/SOURCES/libvirt-conf-backup-Allow-configuration-of-names-exported-via-NBD.patch
deleted file mode 100644
index 1f1335e..0000000
--- a/SOURCES/libvirt-conf-backup-Allow-configuration-of-names-exported-via-NBD.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From 100ae962cd0f4dbfd5270bc2d61f05ec1c524c0a Mon Sep 17 00:00:00 2001
-Message-Id: <100ae962cd0f4dbfd5270bc2d61f05ec1c524c0a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:40 +0100
-Subject: [PATCH] conf: backup: Allow configuration of names exported via NBD
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If users wish to use different name for exported disks or bitmaps
-the new fields allow to do so. Additionally they also document the
-current settings.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 12ccd8d4db12d71a270d903701a8edb83d41f127)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <8043f75d8d4b4ae7e7ae3671d71407f733e6a3cf.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatbackup.html.in                             |  9 +++++++++
- docs/schemas/domainbackup.rng                         |  8 ++++++++
- src/conf/backup_conf.c                                | 10 ++++++++++
- src/conf/backup_conf.h                                |  2 ++
- tests/domainbackupxml2xmlin/backup-pull-seclabel.xml  |  2 +-
- tests/domainbackupxml2xmlout/backup-pull-seclabel.xml |  2 +-
- 6 files changed, 31 insertions(+), 2 deletions(-)
-
-diff --git a/docs/formatbackup.html.in b/docs/formatbackup.html.in
-index 1c690901c7..543d913072 100644
---- a/docs/formatbackup.html.in
-+++ b/docs/formatbackup.html.in
-@@ -85,6 +85,15 @@
-               <dd>Setting this attribute to <code>yes</code>(default) specifies
-                 that the disk should take part in the backup and using
-                 <code>no</code> excludes the disk from the backup.</dd>
-+              <dt><code>exportname</code></dt>
-+              <dd>Allows modification of the NBD export name for the given disk.
-+                By default equal to disk target.
-+                Valid only for pull mode backups.</dd>
-+              <dt><code>exportbitmap</code></dt>
-+              <dd>Allows modification of the name of the bitmap describing dirty
-+                blocks for an incremental backup exported via NBD export name
-+                for the given disk.
-+                Valid only for pull mode backups.</dd>
-               <dt><code>type</code></dt>
-               <dd>A mandatory attribute to describe the type of the
-                 disk, except when <code>backup='no'</code> is
-diff --git a/docs/schemas/domainbackup.rng b/docs/schemas/domainbackup.rng
-index c1e4d80302..395ea841f9 100644
---- a/docs/schemas/domainbackup.rng
-+++ b/docs/schemas/domainbackup.rng
-@@ -165,6 +165,14 @@
-             <attribute name='name'>
-               <ref name='diskTarget'/>
-             </attribute>
-+            <optional>
-+              <attribute name='exportname'>
-+                <text/>
-+              </attribute>
-+              <attribute name='exportbitmap'>
-+                <text/>
-+              </attribute>
-+            </optional>
-             <choice>
-               <group>
-                 <attribute name='backup'>
-diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
-index 61dc8cd4b2..b370b686f1 100644
---- a/src/conf/backup_conf.c
-+++ b/src/conf/backup_conf.c
-@@ -71,6 +71,8 @@ virDomainBackupDefFree(virDomainBackupDefPtr def)
-         virDomainBackupDiskDefPtr disk = def->disks + i;
- 
-         g_free(disk->name);
-+        g_free(disk->exportname);
-+        g_free(disk->exportbitmap);
-         virObjectUnref(disk->store);
-     }
- 
-@@ -124,6 +126,11 @@ virDomainBackupDiskDefParseXML(xmlNodePtr node,
-     if (def->backup == VIR_TRISTATE_BOOL_NO)
-         return 0;
- 
-+    if (!push) {
-+        def->exportname = virXMLPropString(node, "exportname");
-+        def->exportbitmap = virXMLPropString(node, "exportbitmap");
-+    }
-+
-     if (internal) {
-         if (!(state = virXMLPropString(node, "state")) ||
-             (tmp = virDomainBackupDiskStateTypeFromString(state)) < 0) {
-@@ -333,6 +340,9 @@ virDomainBackupDiskDefFormat(virBufferPtr buf,
-     if (disk->backup == VIR_TRISTATE_BOOL_YES) {
-         virBufferAsprintf(&attrBuf, " type='%s'", virStorageTypeToString(disk->store->type));
- 
-+        virBufferEscapeString(&attrBuf, " exportname='%s'", disk->exportname);
-+        virBufferEscapeString(&attrBuf, " exportbitmap='%s'", disk->exportbitmap);
-+
-         if (disk->store->format > 0)
-             virBufferEscapeString(&childBuf, "<driver type='%s'/>\n",
-                                   virStorageFileFormatTypeToString(disk->store->format));
-diff --git a/src/conf/backup_conf.h b/src/conf/backup_conf.h
-index 7cf44245d4..672fd52ee7 100644
---- a/src/conf/backup_conf.h
-+++ b/src/conf/backup_conf.h
-@@ -51,6 +51,8 @@ typedef virDomainBackupDiskDef *virDomainBackupDiskDefPtr;
- struct _virDomainBackupDiskDef {
-     char *name;     /* name matching the <target dev='...' of the domain */
-     virTristateBool backup; /* whether backup is requested */
-+    char *exportname; /* name of the NBD export for pull mode backup */
-+    char *exportbitmap; /* name of the bitmap exposed in NBD for pull mode backup */
- 
-     /* details of target for push-mode, or of the scratch file for pull-mode */
-     virStorageSourcePtr store;
-diff --git a/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml b/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
-index a00d8758bb..4e6e602c19 100644
---- a/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
-+++ b/tests/domainbackupxml2xmlin/backup-pull-seclabel.xml
-@@ -2,7 +2,7 @@
-   <incremental>1525889631</incremental>
-   <server transport='tcp' name='localhost' port='10809'/>
-   <disks>
--    <disk name='vda' type='file'>
-+    <disk name='vda' type='file' exportname='test-vda' exportbitmap='blah'>
-       <driver type='qcow2'/>
-       <scratch file='/path/to/file'>
-         <seclabel model='dac' relabel='no'/>
-diff --git a/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml b/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
-index c631c9b979..450f007d3a 100644
---- a/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
-+++ b/tests/domainbackupxml2xmlout/backup-pull-seclabel.xml
-@@ -2,7 +2,7 @@
-   <incremental>1525889631</incremental>
-   <server transport='tcp' name='localhost' port='10809'/>
-   <disks>
--    <disk name='vda' backup='yes' type='file'>
-+    <disk name='vda' backup='yes' type='file' exportname='test-vda' exportbitmap='blah'>
-       <driver type='qcow2'/>
-       <scratch file='/path/to/file'>
-         <seclabel model='dac' relabel='no'/>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-backup-Store-incremental-backup-checkpoint-name-per-disk.patch b/SOURCES/libvirt-conf-backup-Store-incremental-backup-checkpoint-name-per-disk.patch
deleted file mode 100644
index acc76c3..0000000
--- a/SOURCES/libvirt-conf-backup-Store-incremental-backup-checkpoint-name-per-disk.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 7f5c44bfd2b6290e142380775b6a6205ccc43840 Mon Sep 17 00:00:00 2001
-Message-Id: <7f5c44bfd2b6290e142380775b6a6205ccc43840@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:37 +0200
-Subject: [PATCH] conf: backup: Store incremental backup checkpoint name
- per-disk
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In preparation to allow heterogenous backups store the 'incremental'
-field per-disk and fill it by default from the per-backup field.
-
-Having this will be important once we'll want to allow incremental
-backup working while hotplugging a new disk.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit b8295160c36e555d8bcaef5015d0c1e3ae85fb17)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <ee6c31ce5f3400523559793fe40e789656068f7c.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/backup_conf.c | 8 ++++++++
- src/conf/backup_conf.h | 1 +
- 2 files changed, 9 insertions(+)
-
-diff --git a/src/conf/backup_conf.c b/src/conf/backup_conf.c
-index 64c8f6cc09..58fb3ec759 100644
---- a/src/conf/backup_conf.c
-+++ b/src/conf/backup_conf.c
-@@ -71,6 +71,7 @@ virDomainBackupDefFree(virDomainBackupDefPtr def)
-         virDomainBackupDiskDefPtr disk = def->disks + i;
- 
-         g_free(disk->name);
-+        g_free(disk->incremental);
-         g_free(disk->exportname);
-         g_free(disk->exportbitmap);
-         virObjectUnref(disk->store);
-@@ -503,5 +504,12 @@ virDomainBackupAlignDisks(virDomainBackupDefPtr def,
-         }
-     }
- 
-+    for (i = 0; i < def->ndisks; i++) {
-+        virDomainBackupDiskDefPtr backupdisk = &def->disks[i];
-+
-+        if (def->incremental && !backupdisk->incremental)
-+            backupdisk->incremental = g_strdup(def->incremental);
-+    }
-+
-     return 0;
- }
-diff --git a/src/conf/backup_conf.h b/src/conf/backup_conf.h
-index 672fd52ee7..7ce7a46ad4 100644
---- a/src/conf/backup_conf.h
-+++ b/src/conf/backup_conf.h
-@@ -51,6 +51,7 @@ typedef virDomainBackupDiskDef *virDomainBackupDiskDefPtr;
- struct _virDomainBackupDiskDef {
-     char *name;     /* name matching the <target dev='...' of the domain */
-     virTristateBool backup; /* whether backup is requested */
-+    char *incremental; /* name of the starting point checkpoint of an incremental backup */
-     char *exportname; /* name of the NBD export for pull mode backup */
-     char *exportbitmap; /* name of the bitmap exposed in NBD for pull mode backup */
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-conf-check-HOTPLUGGABLE-connect-flag-when-validating-a-PCI-address.patch b/SOURCES/libvirt-conf-check-HOTPLUGGABLE-connect-flag-when-validating-a-PCI-address.patch
deleted file mode 100644
index f93050e..0000000
--- a/SOURCES/libvirt-conf-check-HOTPLUGGABLE-connect-flag-when-validating-a-PCI-address.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 28094095fe6e4b05b25e459a34d93d195b7afb62 Mon Sep 17 00:00:00 2001
-Message-Id: <28094095fe6e4b05b25e459a34d93d195b7afb62@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:17:02 -0400
-Subject: [PATCH] conf: check HOTPLUGGABLE connect flag when validating a PCI
- address
-
-The HOTPLUGGABLE flag is set for appropriates buses in a PCI address
-set, and thnis patch updates virDomainPCIAddressFlagsCompatible() to
-check the HOTPLUGGABLE flag when searching for a suitable bus/slot for
-a device. No devices request HOTPLUGGABLE though (yet), so there is no
-observable effect.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit a283189f8c64882681ea99259ccfc8d1b8e524dd)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426171703.18808-2-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_addr.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index cc45a0bbf1..ed41eca114 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -376,6 +376,18 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
-         return false;
-     }
- 
-+    if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
-+        !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
-+        if (reportError) {
-+            virReportError(errType,
-+                           _("The device at PCI address %s requires "
-+                             "hotplug capability, but the PCI controller "
-+                             "with index='%d' doesn't support hotplug"),
-+                           addrStr, addr->bus);
-+        }
-+        return false;
-+    }
-+
-     /* If this bus doesn't allow the type of connection (PCI
-      * vs. PCIe) required by the device, or if the device requires
-      * hot-plug and this bus doesn't have it, return false.
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-conf-do-not-generate-machine-names-ending-with-a-dash.patch b/SOURCES/libvirt-conf-do-not-generate-machine-names-ending-with-a-dash.patch
deleted file mode 100644
index e67d233..0000000
--- a/SOURCES/libvirt-conf-do-not-generate-machine-names-ending-with-a-dash.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From f9fdeb29a61a98868d1a9f5284a85c57f826d6d1 Mon Sep 17 00:00:00 2001
-Message-Id: <f9fdeb29a61a98868d1a9f5284a85c57f826d6d1@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:08 +0100
-Subject: [PATCH] conf: do not generate machine names ending with a dash
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-As of systemd commit:
-
-commit d65652f1f21a4b0c59711320f34266c635393c89
-Author:     Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
-CommitDate: 2018-12-10 09:56:56 +0100
-
-    Partially unify hostname_is_valid() and dns_name_is_valid()
-
-Dashes are no longer allowed at the end of machine names.
-
-Trim the trailing dashes from the generated name before passing
-it to machined.
-
-Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=1790409
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 45464db8ba502764cf37ec9335770248bdb3d9a8)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <ae17f80d69ee7772d32dd5c34c332be6b77e7afb.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 3 +++
- tests/virsystemdtest.c | 4 ++++
- 2 files changed, 7 insertions(+)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 77e3d25a2d..4b297c96bc 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -30708,6 +30708,9 @@ virDomainMachineNameAppendValid(virBufferPtr buf,
- 
-         virBufferAddChar(buf, *name);
-     }
-+
-+    /* trailing dashes are not allowed */
-+    virBufferTrimChars(buf, "-");
- }
- 
- #undef HOSTNAME_CHARS
-diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
-index 9b95ca6789..26876850b8 100644
---- a/tests/virsystemdtest.c
-+++ b/tests/virsystemdtest.c
-@@ -740,6 +740,10 @@ mymain(void)
-                  "qemu-7-123456789012345678901234567890123456789012345678901234567");
-     TEST_MACHINE("123456789012345678901234567890123456789012345678901234567890", 8,
-                  "qemu-8-123456789012345678901234567890123456789012345678901234567");
-+    TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec-acdc-56b3f8c5f678)", 100,
-+                 "qemu-100-kstest-network-device-default-httpksc9eed63e-981e-48ec");
-+    TEST_MACHINE("kstest-network-device-default-httpks_(c9eed63e-981e-48ec--cdc-56b3f8c5f678)", 10,
-+                 "qemu-10-kstest-network-device-default-httpksc9eed63e-981e-48ec");
- 
- # define TESTS_PM_SUPPORT_HELPER(name, function) \
-     do { \
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-domain-Remove-checking-of-return-value-of-virHashCreateFull.patch b/SOURCES/libvirt-conf-domain-Remove-checking-of-return-value-of-virHashCreateFull.patch
deleted file mode 100644
index fe8367a..0000000
--- a/SOURCES/libvirt-conf-domain-Remove-checking-of-return-value-of-virHashCreateFull.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 04792aa0715be4e779fca81fa8f7e9f2c5c1b71f Mon Sep 17 00:00:00 2001
-Message-Id: <04792aa0715be4e779fca81fa8f7e9f2c5c1b71f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:00 +0100
-Subject: [PATCH] conf: domain: Remove checking of return value of
- virHashCreateFull
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This module has last two direct checks whether the value returned by
-virHashCreateFull is NULL. Remove them so that static analyzers don't
-get the false idea that checking the value is necessary.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 2a5ea0a0c1843c7c43e673b3d2082cc3abdef602)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <2e310ad44b341511caba735608bc0bba4b072d6c.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_addr.c | 30 ++++++++++++------------------
- 1 file changed, 12 insertions(+), 18 deletions(-)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index 607ba56efd..f07b3d9725 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -1044,28 +1044,22 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs,
-         if (VIR_ALLOC(addrs->zpciIds) < 0)
-             return -1;
- 
--        if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL,
--                                                       virZPCIAddrKeyCode,
--                                                       virZPCIAddrKeyEqual,
--                                                       virZPCIAddrKeyCopy,
--                                                       virZPCIAddrKeyPrintHuman,
--                                                       virZPCIAddrKeyFree)))
--            goto error;
-+        addrs->zpciIds->uids = virHashCreateFull(10, NULL,
-+                                                 virZPCIAddrKeyCode,
-+                                                 virZPCIAddrKeyEqual,
-+                                                 virZPCIAddrKeyCopy,
-+                                                 virZPCIAddrKeyPrintHuman,
-+                                                 virZPCIAddrKeyFree);
- 
--        if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL,
--                                                       virZPCIAddrKeyCode,
--                                                       virZPCIAddrKeyEqual,
--                                                       virZPCIAddrKeyCopy,
--                                                       virZPCIAddrKeyPrintHuman,
--                                                       virZPCIAddrKeyFree)))
--            goto error;
-+        addrs->zpciIds->fids = virHashCreateFull(10, NULL,
-+                                                 virZPCIAddrKeyCode,
-+                                                 virZPCIAddrKeyEqual,
-+                                                 virZPCIAddrKeyCopy,
-+                                                 virZPCIAddrKeyPrintHuman,
-+                                                 virZPCIAddrKeyFree);
-     }
- 
-     return 0;
--
-- error:
--    virDomainPCIAddressSetExtensionFree(addrs);
--    return -1;
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-during-PCI-hotplug-require-that-the-controller-support-hotplug.patch b/SOURCES/libvirt-conf-during-PCI-hotplug-require-that-the-controller-support-hotplug.patch
deleted file mode 100644
index a66d8c1..0000000
--- a/SOURCES/libvirt-conf-during-PCI-hotplug-require-that-the-controller-support-hotplug.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 5ec240811e391f97378d0b6b726e0dee13ae8a40 Mon Sep 17 00:00:00 2001
-Message-Id: <5ec240811e391f97378d0b6b726e0dee13ae8a40@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:17:03 -0400
-Subject: [PATCH] conf: during PCI hotplug, require that the controller support
- hotplug
-
-Before this patch we would simply rely on QEMU failing to attach the
-device. Since we have a flag in the address set telling us which
-controllers support hotplug, we can fail the operation sooner.
-
-This also assures that when hotplugging with no provided PCI address,
-that we skip any controllers with hotplug='off', and attempt to assign
-the device to a controller that not only supports hotplug, but also
-has it enabled.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 7118bdee1550b6022e7362402ca8204add4cf80b)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426171703.18808-3-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_addr.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index ed41eca114..34ea7bc051 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -936,6 +936,11 @@ virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs,
-     if (!flags)
-        return 0;
- 
-+    /* This function is only called during hotplug, so we require hotplug
-+     * support from the controller.
-+     */
-+    flags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
-+
-     if (!(addrStr = virPCIDeviceAddressAsString(&dev->addr.pci)))
-         goto cleanup;
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-conf-introduce-support-for-firmware-auto-selection-feature-filtering.patch b/SOURCES/libvirt-conf-introduce-support-for-firmware-auto-selection-feature-filtering.patch
deleted file mode 100644
index 2b876eb..0000000
--- a/SOURCES/libvirt-conf-introduce-support-for-firmware-auto-selection-feature-filtering.patch
+++ /dev/null
@@ -1,415 +0,0 @@
-From 6f02748897062d40b411177ef752644505189a72 Mon Sep 17 00:00:00 2001
-Message-Id: <6f02748897062d40b411177ef752644505189a72@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:11 +0200
-Subject: [PATCH] conf: introduce support for firmware auto-selection feature
- filtering
-
-When the firmware auto-selection was introduced it always picked first
-usable firmware based on the JSON descriptions on the host. It is
-possible to add/remove/change the JSON files but it will always be for
-the whole host.
-
-This patch introduces support for configuring the auto-selection per VM
-by adding users an option to limit what features they would like to have
-available in the firmware.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit cff524af6c5e1ddc11149394ed7f985242ebea0f)
-
-Conflicts:
-    docs/formatdomain.rst
-        - we still have formatdomain.html.in in downstream
-    src/conf/domain_conf.c
-        - missing following upstream commits:
-            0280fc72708b9d0f162a808bcc8d78137a68d58d
-            104dadcff6023da676df3905d1ed8688aea15e86
-            2d5f7a49ae0780143566932ab38215433982c89f
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <631e05bc5363abb3e48d8b652a806324801cce16.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/formatdomain.html.in                     | 58 +++++++++++++
- docs/schemas/domaincommon.rng                 | 23 +++++
- src/conf/domain_conf.c                        | 83 ++++++++++++++++++-
- src/conf/domain_conf.h                        | 10 +++
- ...os-firmware-invalid-type.x86_64-latest.err |  1 +
- .../os-firmware-invalid-type.xml              | 28 +++++++
- tests/qemuxml2argvtest.c                      |  1 +
- ...aarch64-os-firmware-efi.aarch64-latest.xml |  1 +
- .../os-firmware-bios.x86_64-latest.xml        |  1 +
- .../os-firmware-efi-secboot.x86_64-latest.xml |  1 +
- .../os-firmware-efi.x86_64-latest.xml         |  1 +
- tests/vmx2xmldata/vmx2xml-firmware-efi.xml    |  1 +
- 12 files changed, 206 insertions(+), 3 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/os-firmware-invalid-type.x86_64-latest.err
- create mode 100644 tests/qemuxml2argvdata/os-firmware-invalid-type.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index a40bed347b..11f31618af 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -180,6 +180,64 @@
-         <code>ESX</code> and <code>VMWare</code> hypervisor drivers, however,
-         the <code>i686</code> arch will always be chosen even on an
-         <code>x86_64</code> host. <span class="since">Since 0.0.1</span></dd>
-+      <dt><a id="elementFirmware"><code>firmware</code></a></dt>
-+      <dd>
-+        <p><span class="since">Since 7.2.0 QEMU/KVM only</span></p>
-+        <p>
-+          When used together with <code>firmware</code> attribute of
-+          <code>os</code> element the <code>type</code> attribute must
-+          have the same value.
-+        </p>
-+        <p>
-+          List of mandatory attributes:
-+          <ul>
-+            <li>
-+              <code>type</code> (accepted values are <code>bios</code>
-+              and <code>efi</code>) same as the <code>firmware</code>
-+              attribute of <code>os</code> element.
-+            </li>
-+          </ul>
-+        </p>
-+        <p>
-+          When using firmware auto-selection there are different features
-+          enabled in the firmwares. The list of features can be used to
-+          limit what firmware should be automatically selected for the VM.
-+          The list of features can be specified using zero or more
-+          <code>feature</code> elements. Libvirt will take into consideration
-+          only the listed features and ignore the rest when selecting the firmware.
-+
-+          <dl>
-+            <dt><code>feature</code></dt>
-+            <dd>
-+              The list of mandatory attributes:
-+
-+              <ul>
-+                <li>
-+                  <code>enabled</code> (accepted values are <code>yes</code>
-+                  and <code>no</code>) is used to tell libvirt if the feature
-+                  must be enabled or not in the automatically selected firmware
-+                </li>
-+                <li>
-+                  <code>name</code> the name of the feature, the list of the features:
-+                  <ul>
-+                    <li>
-+                      <code>enrolled-keys</code> whether the selected nvram template
-+                      has default certificate enrolled. Firmware with Secure Boot
-+                      feature but without enrolled keys will successfully boot
-+                      non-signed binaries as well. Valid only for firmwares with
-+                      Secure Boot feature.
-+                    </li>
-+                    <li>
-+                      <code>secure-boot</code> whether the firmware implements
-+                      UEFI Secure boot feature.
-+                    </li>
-+                  </ul>
-+                </li>
-+              </ul>
-+            </dd>
-+          </dl>
-+        </p>
-+      </dd>
-       <dt><a id="elementLoader"><code>loader</code></a></dt>
-       <dd>The optional <code>loader</code> tag refers to a firmware blob,
-         which is specified by absolute path,
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 6671ef3dfa..b7f6a6b494 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -268,6 +268,29 @@
-           </attribute>
-         </optional>
-         <ref name="ostypehvm"/>
-+        <optional>
-+          <element name="firmware">
-+            <attribute name="type">
-+              <choice>
-+                <value>bios</value>
-+                <value>efi</value>
-+              </choice>
-+            </attribute>
-+            <zeroOrMore>
-+              <element name="feature">
-+                <attribute name="enabled">
-+                  <ref name="virYesNo"/>
-+                </attribute>
-+                <attribute name="name">
-+                  <choice>
-+                    <value>enrolled-keys</value>
-+                    <value>secure-boot</value>
-+                  </choice>
-+                </attribute>
-+              </element>
-+            </zeroOrMore>
-+          </element>
-+        </optional>
-         <optional>
-           <element name="loader">
-             <optional>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 93a78f8277..28c8d0ecbd 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -1240,6 +1240,12 @@ VIR_ENUM_IMPL(virDomainOsDefFirmware,
-               "efi",
- );
- 
-+VIR_ENUM_IMPL(virDomainOsDefFirmwareFeature,
-+              VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST,
-+              "enrolled-keys",
-+              "secure-boot",
-+);
-+
- /* Internal mapping: subset of block job types that can be present in
-  * <mirror> XML (remaining types are not two-phase). */
- VIR_ENUM_DECL(virDomainBlockJob);
-@@ -19382,22 +19388,67 @@ virDomainDefParseBootFirmwareOptions(virDomainDefPtr def,
-                                      xmlXPathContextPtr ctxt)
- {
-     g_autofree char *firmware = virXPathString("string(./os/@firmware)", ctxt);
-+    g_autofree char *type = virXPathString("string(./os/firmware/@type)", ctxt);
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    g_autofree int *features = NULL;
-     int fw = 0;
-+    int n = 0;
-+    size_t i;
- 
--    if (!firmware)
-+    if (!firmware && !type)
-         return 0;
- 
--    fw = virDomainOsDefFirmwareTypeFromString(firmware);
-+    if (firmware && type && STRNEQ(firmware, type)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("firmware attribute and firmware type has to be the same"));
-+        return -1;
-+    }
-+
-+    if (!type)
-+        type = g_steal_pointer(&firmware);
-+
-+    fw = virDomainOsDefFirmwareTypeFromString(type);
- 
-     if (fw <= 0) {
-         virReportError(VIR_ERR_XML_ERROR,
-                        _("unknown firmware value %s"),
--                       firmware);
-+                       type);
-         return -1;
-     }
- 
-     def->os.firmware = fw;
- 
-+    if ((n = virXPathNodeSet("./os/firmware/feature", ctxt, &nodes)) < 0)
-+        return -1;
-+
-+    if (n > 0)
-+        features = g_new0(int, VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST);
-+
-+    for (i = 0; i < n; i++) {
-+        g_autofree char *name = virXMLPropString(nodes[i], "name");
-+        g_autofree char *enabled = virXMLPropString(nodes[i], "enabled");
-+        int feature = virDomainOsDefFirmwareFeatureTypeFromString(name);
-+        int val = virTristateBoolTypeFromString(enabled);
-+
-+        if (feature < 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("invalid firmware feature name '%s'"),
-+                           name);
-+            return -1;
-+        }
-+
-+        if (val < 0) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("invalid firmware feature enabled value '%s'"),
-+                           enabled);
-+            return -1;
-+        }
-+
-+        features[feature] = val;
-+    }
-+
-+    def->os.firmwareFeatures = g_steal_pointer(&features);
-+
-     return 0;
- }
- 
-@@ -28987,6 +29038,32 @@ virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
-         virBufferAsprintf(buf, ">%s</type>\n",
-                           virDomainOSTypeToString(def->os.type));
- 
-+    if (def->os.firmware) {
-+        virBufferAsprintf(buf, "<firmware type='%s'",
-+                          virDomainOsDefFirmwareTypeToString(def->os.firmware));
-+
-+        if (def->os.firmwareFeatures) {
-+            virBufferAddLit(buf, ">\n");
-+
-+            virBufferAdjustIndent(buf, 2);
-+
-+            for (i = 0; i < VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST; i++) {
-+                if (def->os.firmwareFeatures[i] == VIR_TRISTATE_BOOL_ABSENT)
-+                    continue;
-+
-+                virBufferAsprintf(buf, "<feature enabled='%s' name='%s'/>\n",
-+                                  virTristateBoolTypeToString(def->os.firmwareFeatures[i]),
-+                                  virDomainOsDefFirmwareFeatureTypeToString(i));
-+            }
-+
-+            virBufferAdjustIndent(buf, -2);
-+
-+            virBufferAddLit(buf, "</firmware>\n");
-+        } else {
-+            virBufferAddLit(buf, "/>\n");
-+        }
-+    }
-+
-     virBufferEscapeString(buf, "<init>%s</init>\n",
-                           def->os.init);
-     for (i = 0; def->os.initargv && def->os.initargv[i]; i++)
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index 3aed1fb22a..1ad77ecac6 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -1967,9 +1967,19 @@ G_STATIC_ASSERT((int)VIR_DOMAIN_OS_DEF_FIRMWARE_LAST == (int)VIR_DOMAIN_LOADER_T
- 
- VIR_ENUM_DECL(virDomainOsDefFirmware);
- 
-+typedef enum {
-+    VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_ENROLLED_KEYS,
-+    VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_SECURE_BOOT,
-+
-+    VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST
-+} virDomainOsDefFirmwareFeature;
-+
-+VIR_ENUM_DECL(virDomainOsDefFirmwareFeature);
-+
- struct _virDomainOSDef {
-     int type;
-     virDomainOsDefFirmware firmware;
-+    int *firmwareFeatures;
-     virArch arch;
-     char *machine;
-     size_t nBootDevs;
-diff --git a/tests/qemuxml2argvdata/os-firmware-invalid-type.x86_64-latest.err b/tests/qemuxml2argvdata/os-firmware-invalid-type.x86_64-latest.err
-new file mode 100644
-index 0000000000..c8174b1c8b
---- /dev/null
-+++ b/tests/qemuxml2argvdata/os-firmware-invalid-type.x86_64-latest.err
-@@ -0,0 +1 @@
-+unsupported configuration: firmware attribute and firmware type has to be the same
-diff --git a/tests/qemuxml2argvdata/os-firmware-invalid-type.xml b/tests/qemuxml2argvdata/os-firmware-invalid-type.xml
-new file mode 100644
-index 0000000000..41360df0f7
---- /dev/null
-+++ b/tests/qemuxml2argvdata/os-firmware-invalid-type.xml
-@@ -0,0 +1,28 @@
-+<domain type='kvm'>
-+  <name>fedora</name>
-+  <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
-+  <memory unit='KiB'>8192</memory>
-+  <currentMemory unit='KiB'>8192</currentMemory>
-+  <vcpu placement='static'>1</vcpu>
-+  <os firmware='efi'>
-+    <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
-+    <firmware type='bios'/>
-+    <loader secure='no'/>
-+    <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-+    <boot dev='hd'/>
-+    <bootmenu enable='yes'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+    <pae/>
-+  </features>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>restart</on_crash>
-+  <devices>
-+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index a22e3ba157..bc04bea692 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -3094,6 +3094,7 @@ mymain(void)
-     DO_TEST_CAPS_LATEST("os-firmware-bios");
-     DO_TEST_CAPS_LATEST("os-firmware-efi");
-     DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
-+    DO_TEST_CAPS_LATEST_PARSE_ERROR("os-firmware-invalid-type");
-     DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");
- 
-     DO_TEST_CAPS_LATEST("vhost-user-vga");
-diff --git a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
-index 1e51d55305..3cac8fc5c6 100644
---- a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
-@@ -6,6 +6,7 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='aarch64' machine='virt-4.0'>hvm</type>
-+    <firmware type='efi'/>
-     <kernel>/aarch64.kernel</kernel>
-     <initrd>/aarch64.initrd</initrd>
-     <cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
-index 60d3498765..ef24f2fece 100644
---- a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
-@@ -6,6 +6,7 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='bios'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
-+    <firmware type='bios'/>
-     <loader secure='no'/>
-     <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-     <boot dev='hd'/>
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
-index 938da73711..3757191e8e 100644
---- a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
-@@ -6,6 +6,7 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
-+    <firmware type='efi'/>
-     <loader secure='yes'/>
-     <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-     <boot dev='hd'/>
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
-index 97ce8a75c7..f2e6b7f36d 100644
---- a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
-@@ -6,6 +6,7 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
-+    <firmware type='efi'/>
-     <loader secure='no'/>
-     <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-     <boot dev='hd'/>
-diff --git a/tests/vmx2xmldata/vmx2xml-firmware-efi.xml b/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
-index e21158cebf..375c47d281 100644
---- a/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
-+++ b/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
-@@ -5,6 +5,7 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='i686'>hvm</type>
-+    <firmware type='efi'/>
-   </os>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootAcpiOptions.patch b/SOURCES/libvirt-conf-introduce-virDomainDefParseBootAcpiOptions.patch
deleted file mode 100644
index f3d6fd4..0000000
--- a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootAcpiOptions.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 7ba2905bfcab4dbe4a491ee8587dd4c9ef457c0b Mon Sep 17 00:00:00 2001
-Message-Id: <7ba2905bfcab4dbe4a491ee8587dd4c9ef457c0b@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:09 +0200
-Subject: [PATCH] conf: introduce virDomainDefParseBootAcpiOptions
-
-Extract the code to it's own function.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 108cb29c1c7eec7b9089dd431e0bdcd82a0b07f1)
-
-Conflicts:
-    src/conf/domain_conf.c
-        - missing upstream commit d293a556d710754d8aa8d5caac0bb01a365fcbd8
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <5fb7ee0165340ff517b3f7f16ddc542813ac385d.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 71 ++++++++++++++++++++++++------------------
- 1 file changed, 41 insertions(+), 30 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 493700ed6b..f8d8d33245 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19429,13 +19429,51 @@ virDomainDefParseBootLoaderOptions(virDomainDefPtr def,
- 
- 
- static int
--virDomainDefParseBootOptions(virDomainDefPtr def,
--                             xmlXPathContextPtr ctxt)
-+virDomainDefParseBootAcpiOptions(virDomainDefPtr def,
-+                                 xmlXPathContextPtr ctxt)
- {
-     int n;
-     g_autofree xmlNodePtr *nodes = NULL;
-     g_autofree char *tmp = NULL;
- 
-+    if ((n = virXPathNodeSet("./os/acpi/table", ctxt, &nodes)) < 0)
-+        return -1;
-+
-+    if (n > 1) {
-+        virReportError(VIR_ERR_XML_ERROR, "%s",
-+                       _("Only one acpi table is supported"));
-+        return -1;
-+    }
-+
-+    if (n == 1) {
-+        tmp = virXMLPropString(nodes[0], "type");
-+
-+        if (!tmp) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("Missing acpi table type"));
-+            return -1;
-+        }
-+
-+        if (STREQ_NULLABLE(tmp, "slic")) {
-+            VIR_FREE(tmp);
-+            tmp = virXMLNodeContentString(nodes[0]);
-+            def->os.slic_table = virFileSanitizePath(tmp);
-+        } else {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("Unknown acpi table type: %s"),
-+                           tmp);
-+            return -1;
-+        }
-+    }
-+
-+    return 0;
-+}
-+
-+
-+static int
-+virDomainDefParseBootOptions(virDomainDefPtr def,
-+                             xmlXPathContextPtr ctxt)
-+{
-     /*
-      * Booting options for different OS types....
-      *
-@@ -19467,36 +19505,9 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
-     }
- 
-     if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
--        if ((n = virXPathNodeSet("./os/acpi/table", ctxt, &nodes)) < 0)
-+        if (virDomainDefParseBootAcpiOptions(def, ctxt) < 0)
-             return -1;
- 
--        if (n > 1) {
--            virReportError(VIR_ERR_XML_ERROR, "%s",
--                           _("Only one acpi table is supported"));
--            return -1;
--        }
--
--        if (n == 1) {
--            tmp = virXMLPropString(nodes[0], "type");
--
--            if (!tmp) {
--                virReportError(VIR_ERR_XML_ERROR, "%s",
--                               _("Missing acpi table type"));
--                return -1;
--            }
--
--            if (STREQ_NULLABLE(tmp, "slic")) {
--                VIR_FREE(tmp);
--                tmp = virXMLNodeContentString(nodes[0]);
--                def->os.slic_table = virFileSanitizePath(tmp);
--            } else {
--                virReportError(VIR_ERR_XML_ERROR,
--                               _("Unknown acpi table type: %s"),
--                               tmp);
--                return -1;
--            }
--        }
--
-         if (virDomainDefParseBootXML(ctxt, def) < 0)
-             return -1;
-     }
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootFirmwareOptions.patch b/SOURCES/libvirt-conf-introduce-virDomainDefParseBootFirmwareOptions.patch
deleted file mode 100644
index 409c3bd..0000000
--- a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootFirmwareOptions.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 2a019bfa26e697c60893afd09fcc2f0c3218691b Mon Sep 17 00:00:00 2001
-Message-Id: <2a019bfa26e697c60893afd09fcc2f0c3218691b@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:07 +0200
-Subject: [PATCH] conf: introduce virDomainDefParseBootFirmwareOptions
-
-Extract the code to it's own function.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit bcf97abfc6b45694f0d789ae2bdf87c8d082fddf)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <9a090d9f2a43b261ed1b6db608779a01a7594f4a.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 39 +++++++++++++++++++++++++++------------
- 1 file changed, 27 insertions(+), 12 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 432ad938f9..bb484a57c6 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19377,6 +19377,31 @@ virDomainDefParseBootKernelOptions(virDomainDefPtr def,
- }
- 
- 
-+static int
-+virDomainDefParseBootFirmwareOptions(virDomainDefPtr def,
-+                                     xmlXPathContextPtr ctxt)
-+{
-+    g_autofree char *firmware = virXPathString("string(./os/@firmware)", ctxt);
-+    int fw = 0;
-+
-+    if (!firmware)
-+        return 0;
-+
-+    fw = virDomainOsDefFirmwareTypeFromString(firmware);
-+
-+    if (fw <= 0) {
-+        virReportError(VIR_ERR_XML_ERROR,
-+                       _("unknown firmware value %s"),
-+                       firmware);
-+        return -1;
-+    }
-+
-+    def->os.firmware = fw;
-+
-+    return 0;
-+}
-+
-+
- static int
- virDomainDefParseBootOptions(virDomainDefPtr def,
-                              xmlXPathContextPtr ctxt)
-@@ -19403,23 +19428,13 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
-         def->os.type == VIR_DOMAIN_OSTYPE_XENPVH ||
-         def->os.type == VIR_DOMAIN_OSTYPE_HVM ||
-         def->os.type == VIR_DOMAIN_OSTYPE_UML) {
--        g_autofree char *firmware = NULL;
-         xmlNodePtr loader_node;
- 
-         virDomainDefParseBootKernelOptions(def, ctxt);
- 
--        if (def->os.type == VIR_DOMAIN_OSTYPE_HVM &&
--            (firmware = virXPathString("string(./os/@firmware)", ctxt))) {
--            int fw = virDomainOsDefFirmwareTypeFromString(firmware);
--
--            if (fw <= 0) {
--                virReportError(VIR_ERR_XML_ERROR,
--                               _("unknown firmware value %s"),
--                               firmware);
-+        if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
-+            if (virDomainDefParseBootFirmwareOptions(def, ctxt) < 0)
-                 return -1;
--            }
--
--            def->os.firmware = fw;
-         }
- 
-         if ((loader_node = virXPathNode("./os/loader[1]", ctxt))) {
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootInitOptions.patch b/SOURCES/libvirt-conf-introduce-virDomainDefParseBootInitOptions.patch
deleted file mode 100644
index 4195af7..0000000
--- a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootInitOptions.patch
+++ /dev/null
@@ -1,173 +0,0 @@
-From adafaa880b67f1025c64515352e5e851daa62ae9 Mon Sep 17 00:00:00 2001
-Message-Id: <adafaa880b67f1025c64515352e5e851daa62ae9@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:05 +0200
-Subject: [PATCH] conf: introduce virDomainDefParseBootInitOptions
-
-Extract the code to it's own function.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit b07116438c96fddfa00bdb57878a707240574b42)
-
-Conflicts:
-    src/conf/domain_conf.c
-        - using VIR_ALLOC in downstream instead of g_new0
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <cb7f11437bdbc14b0791645c39c963118d0f9806.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 115 +++++++++++++++++++++++------------------
- 1 file changed, 64 insertions(+), 51 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 444657c9a1..9eb418c7c0 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19302,76 +19302,89 @@ virDomainVcpuParse(virDomainDefPtr def,
- 
- 
- static int
--virDomainDefParseBootOptions(virDomainDefPtr def,
--                             xmlXPathContextPtr ctxt)
-+virDomainDefParseBootInitOptions(virDomainDefPtr def,
-+                                 xmlXPathContextPtr ctxt)
- {
-     char *name = NULL;
-     size_t i;
-     int n;
-     g_autofree xmlNodePtr *nodes = NULL;
--    g_autofree char *tmp = NULL;
- 
--    /*
--     * Booting options for different OS types....
--     *
--     *   - A bootloader (and optional kernel+initrd)  (xen)
--     *   - A kernel + initrd                          (xen)
--     *   - A boot device (and optional kernel+initrd) (hvm)
--     *   - An init script                             (exe)
--     */
-+    def->os.init = virXPathString("string(./os/init[1])", ctxt);
-+    def->os.cmdline = virXPathString("string(./os/cmdline[1])", ctxt);
-+    def->os.initdir = virXPathString("string(./os/initdir[1])", ctxt);
-+    def->os.inituser = virXPathString("string(./os/inituser[1])", ctxt);
-+    def->os.initgroup = virXPathString("string(./os/initgroup[1])", ctxt);
- 
--    if (def->os.type == VIR_DOMAIN_OSTYPE_EXE) {
--        def->os.init = virXPathString("string(./os/init[1])", ctxt);
--        def->os.cmdline = virXPathString("string(./os/cmdline[1])", ctxt);
--        def->os.initdir = virXPathString("string(./os/initdir[1])", ctxt);
--        def->os.inituser = virXPathString("string(./os/inituser[1])", ctxt);
--        def->os.initgroup = virXPathString("string(./os/initgroup[1])", ctxt);
-+    if ((n = virXPathNodeSet("./os/initarg", ctxt, &nodes)) < 0)
-+        return -1;
- 
--        if ((n = virXPathNodeSet("./os/initarg", ctxt, &nodes)) < 0)
-+    if (VIR_ALLOC_N(def->os.initargv, n+1) < 0)
-+        return -1;
-+    for (i = 0; i < n; i++) {
-+        if (!nodes[i]->children ||
-+            !nodes[i]->children->content) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("No data supplied for <initarg> element"));
-             return -1;
-+        }
-+        def->os.initargv[i] = g_strdup((const char *)nodes[i]->children->content);
-+    }
-+    def->os.initargv[n] = NULL;
-+    VIR_FREE(nodes);
- 
--        if (VIR_ALLOC_N(def->os.initargv, n+1) < 0)
-+    if ((n = virXPathNodeSet("./os/initenv", ctxt, &nodes)) < 0)
-+        return -1;
-+
-+    if (VIR_ALLOC_N(def->os.initenv, n+1) < 0)
-+        return -1;
-+    for (i = 0; i < n; i++) {
-+        if (!(name = virXMLPropString(nodes[i], "name"))) {
-+            virReportError(VIR_ERR_XML_ERROR, "%s",
-+                           _("No name supplied for <initenv> element"));
-             return -1;
--        for (i = 0; i < n; i++) {
--            if (!nodes[i]->children ||
--                !nodes[i]->children->content) {
--                virReportError(VIR_ERR_XML_ERROR, "%s",
--                               _("No data supplied for <initarg> element"));
--                return -1;
--            }
--            def->os.initargv[i] = g_strdup((const char *)nodes[i]->children->content);
-         }
--        def->os.initargv[n] = NULL;
--        VIR_FREE(nodes);
- 
--        if ((n = virXPathNodeSet("./os/initenv", ctxt, &nodes)) < 0)
-+        if (!nodes[i]->children ||
-+            !nodes[i]->children->content) {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("No value supplied for <initenv name='%s'> element"),
-+                           name);
-             return -1;
-+        }
- 
--        if (VIR_ALLOC_N(def->os.initenv, n+1) < 0)
-+        if (VIR_ALLOC(def->os.initenv[i]) < 0)
-             return -1;
--        for (i = 0; i < n; i++) {
--            if (!(name = virXMLPropString(nodes[i], "name"))) {
--                virReportError(VIR_ERR_XML_ERROR, "%s",
--                                _("No name supplied for <initenv> element"));
--                return -1;
--            }
- 
--            if (!nodes[i]->children ||
--                !nodes[i]->children->content) {
--                virReportError(VIR_ERR_XML_ERROR,
--                               _("No value supplied for <initenv name='%s'> element"),
--                               name);
--                return -1;
--            }
-+        def->os.initenv[i]->name = name;
-+        def->os.initenv[i]->value = g_strdup((const char *)nodes[i]->children->content);
-+    }
-+    def->os.initenv[n] = NULL;
- 
--            if (VIR_ALLOC(def->os.initenv[i]) < 0)
--                return -1;
-+    return 0;
-+}
- 
--            def->os.initenv[i]->name = name;
--            def->os.initenv[i]->value = g_strdup((const char *)nodes[i]->children->content);
--        }
--        def->os.initenv[n] = NULL;
--        VIR_FREE(nodes);
-+
-+static int
-+virDomainDefParseBootOptions(virDomainDefPtr def,
-+                             xmlXPathContextPtr ctxt)
-+{
-+    int n;
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    g_autofree char *tmp = NULL;
-+
-+    /*
-+     * Booting options for different OS types....
-+     *
-+     *   - A bootloader (and optional kernel+initrd)  (xen)
-+     *   - A kernel + initrd                          (xen)
-+     *   - A boot device (and optional kernel+initrd) (hvm)
-+     *   - An init script                             (exe)
-+     */
-+
-+    if (def->os.type == VIR_DOMAIN_OSTYPE_EXE) {
-+        if (virDomainDefParseBootInitOptions(def, ctxt) < 0)
-+            return -1;
-     }
- 
-     if (def->os.type == VIR_DOMAIN_OSTYPE_XEN ||
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootKernelOptions.patch b/SOURCES/libvirt-conf-introduce-virDomainDefParseBootKernelOptions.patch
deleted file mode 100644
index a418a03..0000000
--- a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootKernelOptions.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From a62075772680bd30ced25d7177048ab26db8ea09 Mon Sep 17 00:00:00 2001
-Message-Id: <a62075772680bd30ced25d7177048ab26db8ea09@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:06 +0200
-Subject: [PATCH] conf: introduce virDomainDefParseBootKernelOptions
-
-Extract the code to it's own function.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit bf9b3f8e573092cc98ea647f25cf116e22bbfe3c)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <936428a5fa6d4104361ac8080639a55111c14965.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 18 +++++++++++++-----
- 1 file changed, 13 insertions(+), 5 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 9eb418c7c0..432ad938f9 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19365,6 +19365,18 @@ virDomainDefParseBootInitOptions(virDomainDefPtr def,
- }
- 
- 
-+static void
-+virDomainDefParseBootKernelOptions(virDomainDefPtr def,
-+                                   xmlXPathContextPtr ctxt)
-+{
-+    def->os.kernel = virXPathString("string(./os/kernel[1])", ctxt);
-+    def->os.initrd = virXPathString("string(./os/initrd[1])", ctxt);
-+    def->os.cmdline = virXPathString("string(./os/cmdline[1])", ctxt);
-+    def->os.dtb = virXPathString("string(./os/dtb[1])", ctxt);
-+    def->os.root = virXPathString("string(./os/root[1])", ctxt);
-+}
-+
-+
- static int
- virDomainDefParseBootOptions(virDomainDefPtr def,
-                              xmlXPathContextPtr ctxt)
-@@ -19394,11 +19406,7 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
-         g_autofree char *firmware = NULL;
-         xmlNodePtr loader_node;
- 
--        def->os.kernel = virXPathString("string(./os/kernel[1])", ctxt);
--        def->os.initrd = virXPathString("string(./os/initrd[1])", ctxt);
--        def->os.cmdline = virXPathString("string(./os/cmdline[1])", ctxt);
--        def->os.dtb = virXPathString("string(./os/dtb[1])", ctxt);
--        def->os.root = virXPathString("string(./os/root[1])", ctxt);
-+        virDomainDefParseBootKernelOptions(def, ctxt);
- 
-         if (def->os.type == VIR_DOMAIN_OSTYPE_HVM &&
-             (firmware = virXPathString("string(./os/@firmware)", ctxt))) {
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootLoaderOptions.patch b/SOURCES/libvirt-conf-introduce-virDomainDefParseBootLoaderOptions.patch
deleted file mode 100644
index 599fbfc..0000000
--- a/SOURCES/libvirt-conf-introduce-virDomainDefParseBootLoaderOptions.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 6891ef941e693d86ebbab9e529e908dacf4a7dc6 Mon Sep 17 00:00:00 2001
-Message-Id: <6891ef941e693d86ebbab9e529e908dacf4a7dc6@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:08 +0200
-Subject: [PATCH] conf: introduce virDomainDefParseBootLoaderOptions
-
-Extract the code to it's own function.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit b8dd70db4ee2f3a5edcbbeb8515830db9652cb59)
-
-Conflicts:
-    src/conf/domain_conf.c
-        - using VIR_ALLOC in downstream instead of g_new0
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <e9d0f563b055b415deb7718d33f7661a797a48f1.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 44 +++++++++++++++++++++++++++---------------
- 1 file changed, 28 insertions(+), 16 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index bb484a57c6..493700ed6b 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19402,6 +19402,32 @@ virDomainDefParseBootFirmwareOptions(virDomainDefPtr def,
- }
- 
- 
-+static int
-+virDomainDefParseBootLoaderOptions(virDomainDefPtr def,
-+                                   xmlXPathContextPtr ctxt)
-+{
-+    xmlNodePtr loader_node = virXPathNode("./os/loader[1]", ctxt);
-+    const bool fwAutoSelect = def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE;
-+
-+    if (!loader_node)
-+        return 0;
-+
-+    if (VIR_ALLOC(def->os.loader) < 0)
-+        return -1;
-+
-+    if (virDomainLoaderDefParseXML(loader_node,
-+                                   def->os.loader,
-+                                   fwAutoSelect) < 0)
-+        return -1;
-+
-+    def->os.loader->nvram = virXPathString("string(./os/nvram[1])", ctxt);
-+    if (!fwAutoSelect)
-+        def->os.loader->templt = virXPathString("string(./os/nvram[1]/@template)", ctxt);
-+
-+    return 0;
-+}
-+
-+
- static int
- virDomainDefParseBootOptions(virDomainDefPtr def,
-                              xmlXPathContextPtr ctxt)
-@@ -19428,7 +19454,6 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
-         def->os.type == VIR_DOMAIN_OSTYPE_XENPVH ||
-         def->os.type == VIR_DOMAIN_OSTYPE_HVM ||
-         def->os.type == VIR_DOMAIN_OSTYPE_UML) {
--        xmlNodePtr loader_node;
- 
-         virDomainDefParseBootKernelOptions(def, ctxt);
- 
-@@ -19437,21 +19462,8 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
-                 return -1;
-         }
- 
--        if ((loader_node = virXPathNode("./os/loader[1]", ctxt))) {
--            const bool fwAutoSelect = def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE;
--
--            if (VIR_ALLOC(def->os.loader) < 0)
--                return -1;
--
--            if (virDomainLoaderDefParseXML(loader_node,
--                                           def->os.loader,
--                                           fwAutoSelect) < 0)
--                return -1;
--
--            def->os.loader->nvram = virXPathString("string(./os/nvram[1])", ctxt);
--            if (!fwAutoSelect)
--                def->os.loader->templt = virXPathString("string(./os/nvram[1]/@template)", ctxt);
--        }
-+        if (virDomainDefParseBootLoaderOptions(def, ctxt) < 0)
-+            return -1;
-     }
- 
-     if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-new-attribute-hotplug-for-pci-controllers.patch b/SOURCES/libvirt-conf-new-attribute-hotplug-for-pci-controllers.patch
deleted file mode 100644
index 7d6bd50..0000000
--- a/SOURCES/libvirt-conf-new-attribute-hotplug-for-pci-controllers.patch
+++ /dev/null
@@ -1,290 +0,0 @@
-From 12892e0376be4dc07dc317b807f2ec86c27a94b2 Mon Sep 17 00:00:00 2001
-Message-Id: <12892e0376be4dc07dc317b807f2ec86c27a94b2@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:07 -0400
-Subject: [PATCH] conf: new attribute "hotplug" for pci controllers
-
-a <controller type='pci'...> element can now have a "hotplug"
-attribute in the <target> subelement. This is intended to control
-whether or not the slot(s) of the controller support
-hotplugging/unplugging a device:
-
-   <controller type='pci' model='pcie-root-port'>
-     <target hotplug='off'/>
-   </controller>
-
-The default value of hotplug is "on".
-
-Since support for configuring such an option is hypervisor-dependent
-(and will vary among different types of PCI controllers even on a
-single hypervisor), no validation is done in this patch - that
-validation will be done in the patch that wires support for the
-setting into the hypervisor.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 78f4d5e6f188a9f0f8d6da6b1fe78b9f4172d9ad)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-
-Conflicts/Changes from upstread:
-
-  tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml:
-
-    had to be modified to remove reference to the qemu64 CPU type.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-5-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/formatdomain.html.in                     | 11 +++
- docs/schemas/domaincommon.rng                 |  5 ++
- src/conf/domain_conf.c                        | 20 +++++-
- src/conf/domain_conf.h                        |  1 +
- .../pcie-root-port-nohotplug.xml              | 35 ++++++++++
- ...pcie-root-port-nohotplug.x86_64-latest.xml | 67 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  2 +-
- 7 files changed, 139 insertions(+), 2 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
- create mode 100644 tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 9c588185df..76799f5ffc 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -4651,6 +4651,17 @@
-         which is visible to the virtual machine. If set, port must be
-         between 0 and 255.
-       </dd>
-+      <dt><code>hotplug</code></dt>
-+      <dd>
-+        pcie-root-port and pcie-switch-downstream-port controllers can
-+        also have a <code>hotplug</code> attribute in
-+        the <code>&lt;target&gt;</code> subelement, which is used to
-+        disable hotplug/unplug of devices on a particular
-+        controller. The default setting of <code>hotplug</code>
-+        is <code>on</code>; it should be set to <code>off</code> to
-+        disable hotplug/unplug of devices on a particular controller.
-+        <span class="since">Since 6.3.0</span>
-+      </dd>
-       <dt><code>busNr</code></dt>
-       <dd>
-         pci-expander-bus and pcie-expander-bus controllers can have an
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index dd8f27243a..9fda5f17e0 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -2475,6 +2475,11 @@
-                     <ref name='uint8'/>
-                   </attribute>
-                 </optional>
-+                <optional>
-+                  <attribute name='hotplug'>
-+                    <ref name="virOnOff"/>
-+                  </attribute>
-+                </optional>
-                 <optional>
-                   <element name='node'>
-                     <ref name='unsignedInt'/>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 28160a2967..ed9ca0e9d8 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -10933,6 +10933,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
-     g_autofree char *port = NULL;
-     g_autofree char *busNr = NULL;
-     g_autofree char *targetIndex = NULL;
-+    g_autofree char *hotplug = NULL;
-     g_autofree char *ioeventfd = NULL;
-     g_autofree char *portsStr = NULL;
-     g_autofree char *iothread = NULL;
-@@ -11004,6 +11005,7 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
-                 chassis = virXMLPropString(cur, "chassis");
-                 port = virXMLPropString(cur, "port");
-                 busNr = virXMLPropString(cur, "busNr");
-+                hotplug = virXMLPropString(cur, "hotplug");
-                 targetIndex = virXMLPropString(cur, "index");
-                 processedTarget = true;
-             }
-@@ -11240,6 +11242,17 @@ virDomainControllerDefParseXML(virDomainXMLOptionPtr xmlopt,
-             }
-             def->opts.pciopts.numaNode = numaNode;
-         }
-+        if (hotplug) {
-+            int val = virTristateSwitchTypeFromString(hotplug);
-+
-+            if (val <= 0) {
-+                virReportError(VIR_ERR_XML_ERROR,
-+                               _("PCI controller unrecognized hotplug setting '%s'"),
-+                               hotplug);
-+                goto error;
-+            }
-+            def->opts.pciopts.hotplug = val;
-+        }
-         break;
-     case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: {
-         g_autofree char *gntframes = virXMLPropString(node, "maxGrantFrames");
-@@ -25112,7 +25125,8 @@ virDomainControllerDefFormat(virBufferPtr buf,
-             def->opts.pciopts.port != -1 ||
-             def->opts.pciopts.busNr != -1 ||
-             def->opts.pciopts.targetIndex != -1 ||
--            def->opts.pciopts.numaNode != -1) {
-+            def->opts.pciopts.numaNode != -1 ||
-+            def->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
-             virBufferAddLit(&childBuf, "<target");
-             if (def->opts.pciopts.chassisNr != -1)
-                 virBufferAsprintf(&childBuf, " chassisNr='%d'",
-@@ -25129,6 +25143,10 @@ virDomainControllerDefFormat(virBufferPtr buf,
-             if (def->opts.pciopts.targetIndex != -1)
-                 virBufferAsprintf(&childBuf, " index='%d'",
-                                   def->opts.pciopts.targetIndex);
-+            if (def->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
-+                virBufferAsprintf(&childBuf, " hotplug='%s'",
-+                                  virTristateSwitchTypeToString(def->opts.pciopts.hotplug));
-+            }
-             if (def->opts.pciopts.numaNode == -1) {
-                 virBufferAddLit(&childBuf, "/>\n");
-             } else {
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index 2a382ede72..118077edaa 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -719,6 +719,7 @@ struct _virDomainPCIControllerOpts {
-      * item in memory target config) -1 == unspecified
-      */
-     int numaNode;
-+    virTristateSwitch hotplug; /* 'off' to prevent hotplug/unplug, default 'on' */
- };
- 
- struct _virDomainUSBControllerOpts {
-diff --git a/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
-new file mode 100644
-index 0000000000..8a01494470
---- /dev/null
-+++ b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.xml
-@@ -0,0 +1,35 @@
-+<domain type='qemu'>
-+  <name>guest</name>
-+  <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
-+  <memory unit='KiB'>2097152</memory>
-+  <currentMemory unit='KiB'>2097152</currentMemory>
-+  <vcpu placement='static'>2</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='q35'>hvm</type>
-+  </os>
-+  <devices>
-+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
-+    <controller type='pci' index='0' model='pcie-root'/>
-+    <controller type='pci' index='1' model='pcie-root-port'/>
-+    <controller type='pci' index='2' model='pcie-root-port'>
-+      <target hotplug='off'/>
-+    </controller>
-+    <controller type='pci' index='3' model='pcie-root-port'>
-+      <model name='ioh3420'/>
-+      <target hotplug='off'/>
-+    </controller>
-+    <controller type='pci' index='4' model='pcie-switch-upstream-port'/>
-+    <controller type='pci' index='5' model='pcie-switch-downstream-port'>
-+      <target hotplug='off'/>
-+    </controller>
-+    <controller type='pci' index='6' model='pcie-switch-downstream-port'>
-+      <target hotplug='on'/>
-+    </controller>
-+    <controller type='pci' index='7' model='pcie-switch-downstream-port'/>
-+    <controller type='pci' index='8' model='pcie-switch-downstream-port'>
-+      <model name='xio3130-downstream'/>
-+      <target chassis='30' port='0x27'/>
-+    </controller>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml b/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
-new file mode 100644
-index 0000000000..f7dbaccae9
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/pcie-root-port-nohotplug.x86_64-latest.xml
-@@ -0,0 +1,67 @@
-+<domain type='qemu'>
-+  <name>guest</name>
-+  <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
-+  <memory unit='KiB'>2097152</memory>
-+  <currentMemory unit='KiB'>2097152</currentMemory>
-+  <vcpu placement='static'>2</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='q35'>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-x86_64</emulator>
-+    <controller type='pci' index='0' model='pcie-root'/>
-+    <controller type='pci' index='1' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='1' port='0x8'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
-+    </controller>
-+    <controller type='pci' index='2' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='2' port='0x9' hotplug='off'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-+    </controller>
-+    <controller type='pci' index='3' model='pcie-root-port'>
-+      <model name='ioh3420'/>
-+      <target chassis='3' port='0xa' hotplug='off'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
-+    </controller>
-+    <controller type='pci' index='4' model='pcie-switch-upstream-port'>
-+      <model name='x3130-upstream'/>
-+      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
-+    </controller>
-+    <controller type='pci' index='5' model='pcie-switch-downstream-port'>
-+      <model name='xio3130-downstream'/>
-+      <target chassis='5' port='0x0' hotplug='off'/>
-+      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
-+    </controller>
-+    <controller type='pci' index='6' model='pcie-switch-downstream-port'>
-+      <model name='xio3130-downstream'/>
-+      <target chassis='6' port='0x1' hotplug='on'/>
-+      <address type='pci' domain='0x0000' bus='0x04' slot='0x01' function='0x0'/>
-+    </controller>
-+    <controller type='pci' index='7' model='pcie-switch-downstream-port'>
-+      <model name='xio3130-downstream'/>
-+      <target chassis='7' port='0x2'/>
-+      <address type='pci' domain='0x0000' bus='0x04' slot='0x02' function='0x0'/>
-+    </controller>
-+    <controller type='pci' index='8' model='pcie-switch-downstream-port'>
-+      <model name='xio3130-downstream'/>
-+      <target chassis='30' port='0x27'/>
-+      <address type='pci' domain='0x0000' bus='0x04' slot='0x03' function='0x0'/>
-+    </controller>
-+    <controller type='usb' index='0' model='qemu-xhci'>
-+      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
-+    </controller>
-+    <controller type='sata' index='0'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
-+    </controller>
-+    <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 15110dd104..c8218e423e 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -953,7 +953,7 @@ mymain(void)
-             QEMU_CAPS_DEVICE_IOH3420);
-     DO_TEST("pcie-root-port-model-ioh3420",
-             QEMU_CAPS_DEVICE_IOH3420);
--
-+    DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
-     DO_TEST("pcie-switch-upstream-port",
-             QEMU_CAPS_DEVICE_IOH3420,
-             QEMU_CAPS_DEVICE_X3130_UPSTREAM,
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-conf-parse-format-teaming-subelement-of-interface.patch b/SOURCES/libvirt-conf-parse-format-teaming-subelement-of-interface.patch
deleted file mode 100644
index 10aec7f..0000000
--- a/SOURCES/libvirt-conf-parse-format-teaming-subelement-of-interface.patch
+++ /dev/null
@@ -1,468 +0,0 @@
-From 653245c4de76aba4e75131da8d40eed5b15ffd0d Mon Sep 17 00:00:00 2001
-Message-Id: <653245c4de76aba4e75131da8d40eed5b15ffd0d@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 30 Jan 2020 14:12:40 -0500
-Subject: [PATCH] conf: parse/format <teaming> subelement of <interface>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The subelement <teaming> of <interface> devices is used to configure a
-simple teaming association between two interfaces in a domain. Example:
-
-  <interface type='bridge'>
-    <source bridge='br0'/>
-    <model type='virtio'/>
-    <mac address='00:11:22:33:44:55'/>
-    <alias name='ua-backup0'/>
-    <teaming type='persistent'/>
-  </interface>
-  <interface type='hostdev'>
-    <source>
-      <address type='pci' bus='0x02' slot='0x10' function='0x4'/>
-    </source>
-    <mac address='00:11:22:33:44:55'/>
-    <teaming type='transient' persistent='ua-backup0'/>
-  </interface>
-
-The interface with <teaming type='persistent'/> is assumed to always
-be present, while the interface with type='transient' may be be
-unplugged and later re-plugged; the persistent='blah' attribute (and
-in the one currently available implementation, also the matching MAC
-addresses) is what associates the two devices with each other. It is
-up to the hypervisor and the guest network drivers to determine what
-to do with this information.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit fb0509d06ac57434c2edbd81ee63deb32a0e598a)
-
-https://bugzilla.redhat.com/1693587
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200130191244.24174-3-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/schemas/domaincommon.rng                 | 19 ++++++
- src/conf/domain_conf.c                        | 47 +++++++++++++
- src/conf/domain_conf.h                        | 14 ++++
- .../net-virtio-teaming-network.xml            | 37 +++++++++++
- tests/qemuxml2argvdata/net-virtio-teaming.xml | 50 ++++++++++++++
- .../net-virtio-teaming-network.xml            | 51 ++++++++++++++
- .../qemuxml2xmloutdata/net-virtio-teaming.xml | 66 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  6 ++
- 8 files changed, 290 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming-network.xml
- create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming.xml
- create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
- create mode 100644 tests/qemuxml2xmloutdata/net-virtio-teaming.xml
-
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 76d94b156f..026e753567 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -3158,6 +3158,25 @@
-       <optional>
-         <ref name="vlan"/>
-       </optional>
-+      <optional>
-+        <element name="teaming">
-+          <choice>
-+            <group>
-+              <attribute name="type">
-+                <value>persistent</value>
-+              </attribute>
-+            </group>
-+            <group>
-+              <attribute name="type">
-+                <value>transient</value>
-+              </attribute>
-+              <attribute name="persistent">
-+                <ref name="aliasName"/>
-+              </attribute>
-+            </group>
-+          </choice>
-+        </element>
-+      </optional>
-     </interleave>
-   </define>
- 
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 0478914c69..58f72b3b0f 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -554,6 +554,13 @@ VIR_ENUM_IMPL(virDomainNetVirtioTxMode,
-               "timer",
- );
- 
-+VIR_ENUM_IMPL(virDomainNetTeaming,
-+              VIR_DOMAIN_NET_TEAMING_TYPE_LAST,
-+              "none",
-+              "persistent",
-+              "transient",
-+);
-+
- VIR_ENUM_IMPL(virDomainNetInterfaceLinkState,
-               VIR_DOMAIN_NET_INTERFACE_LINK_STATE_LAST,
-               "default",
-@@ -6276,6 +6283,21 @@ virDomainNetDefValidate(const virDomainNetDef *net)
-                        virDomainNetTypeToString(net->type));
-         return -1;
-     }
-+
-+    if (net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT) {
-+        if (!net->teaming.persistent) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("teaming persistent attribute must be set if teaming type is 'transient'"));
-+            return -1;
-+        }
-+    } else {
-+        if (net->teaming.persistent) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                           _("teaming persistent attribute not allowed if teaming type is '%s'"),
-+                           virDomainNetTeamingTypeToString(net->teaming.type));
-+            return -1;
-+        }
-+    }
-     return 0;
- }
- 
-@@ -11574,6 +11596,8 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
-     g_autofree char *vhostuser_type = NULL;
-     g_autofree char *trustGuestRxFilters = NULL;
-     g_autofree char *vhost_path = NULL;
-+    g_autofree char *teamingType = NULL;
-+    g_autofree char *teamingPersistent = NULL;
-     const char *prefix = xmlopt ? xmlopt->config.netPrefix : NULL;
- 
-     if (!(def = virDomainNetDefNew(xmlopt)))
-@@ -11775,6 +11799,10 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
-                 if (!vhost_path && (tmp = virXMLPropString(cur, "vhost")))
-                     vhost_path = virFileSanitizePath(tmp);
-                 VIR_FREE(tmp);
-+            } else if (virXMLNodeNameEqual(cur, "teaming") &&
-+                       !teamingType && !teamingPersistent) {
-+                teamingType = virXMLPropString(cur, "type");
-+                teamingPersistent =  virXMLPropString(cur, "persistent");
-             }
-         }
-         cur = cur->next;
-@@ -12296,6 +12324,19 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
-         }
-     }
- 
-+    if (teamingType) {
-+        int tmpTeaming;
-+
-+        if ((tmpTeaming = virDomainNetTeamingTypeFromString(teamingType)) <= 0) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                           _("unknown teaming type '%s'"),
-+                           teamingType);
-+            goto error;
-+        }
-+        def->teaming.type = tmpTeaming;
-+    }
-+    def->teaming.persistent = g_steal_pointer(&teamingPersistent);
-+
-     rv = virXPathULong("string(./tune/sndbuf)", ctxt, &def->tune.sndbuf);
-     if (rv >= 0) {
-         def->tune.sndbuf_specified = true;
-@@ -25741,6 +25782,12 @@ virDomainNetDefFormat(virBufferPtr buf,
-         virBufferAddLit(buf,   "</tune>\n");
-     }
- 
-+    if (def->teaming.type != VIR_DOMAIN_NET_TEAMING_TYPE_NONE) {
-+        virBufferAsprintf(buf, "<teaming type='%s'",
-+                          virDomainNetTeamingTypeToString(def->teaming.type));
-+        virBufferEscapeString(buf, " persistent='%s'", def->teaming.persistent);
-+        virBufferAddLit(buf, "/>\n");
-+    }
-     if (def->linkstate) {
-         virBufferAsprintf(buf, "<link state='%s'/>\n",
-                           virDomainNetInterfaceLinkStateTypeToString(def->linkstate));
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index 6ae89fa498..ee8eb3ddc0 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -884,6 +884,15 @@ typedef enum {
-     VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST
- } virDomainNetVirtioTxModeType;
- 
-+/* the type of teaming device */
-+typedef enum {
-+    VIR_DOMAIN_NET_TEAMING_TYPE_NONE,
-+    VIR_DOMAIN_NET_TEAMING_TYPE_PERSISTENT,
-+    VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT,
-+
-+    VIR_DOMAIN_NET_TEAMING_TYPE_LAST
-+} virDomainNetTeamingType;
-+
- /* link interface states */
- typedef enum {
-         VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT = 0, /* Default link state (up) */
-@@ -958,6 +967,10 @@ struct _virDomainNetDef {
-         char *tap;
-         char *vhost;
-     } backend;
-+    struct {
-+        virDomainNetTeamingType type;
-+        char *persistent; /* alias name of persistent device */
-+    } teaming;
-     union {
-         virDomainChrSourceDefPtr vhostuser;
-         struct {
-@@ -3425,6 +3438,7 @@ VIR_ENUM_DECL(virDomainFSModel);
- VIR_ENUM_DECL(virDomainNet);
- VIR_ENUM_DECL(virDomainNetBackend);
- VIR_ENUM_DECL(virDomainNetVirtioTxMode);
-+VIR_ENUM_DECL(virDomainNetTeaming);
- VIR_ENUM_DECL(virDomainNetInterfaceLinkState);
- VIR_ENUM_DECL(virDomainNetModel);
- VIR_ENUM_DECL(virDomainChrDevice);
-diff --git a/tests/qemuxml2argvdata/net-virtio-teaming-network.xml b/tests/qemuxml2argvdata/net-virtio-teaming-network.xml
-new file mode 100644
-index 0000000000..edab52f3a1
---- /dev/null
-+++ b/tests/qemuxml2argvdata/net-virtio-teaming-network.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-i386</emulator>
-+    <disk type='block' device='disk'>
-+      <source dev='/dev/HostVG/QEMUGuest1'/>
-+      <target dev='hda' bus='ide'/>
-+    </disk>
-+    <controller type='usb' index='0'/>
-+    <interface type='network'>
-+      <mac address='00:11:22:33:44:55'/>
-+      <source network='mybridge'/>
-+      <model type='virtio'/>
-+      <teaming type='persistent'/>
-+      <alias name='ua-backup0'/>
-+    </interface>
-+    <interface type='network'>
-+      <mac address='00:11:22:33:44:55'/>
-+      <source network='myhostdevpool'/>
-+      <model type='virtio'/>
-+      <teaming type='transient' persistent='ua-backup0'/>
-+    </interface>
-+    <memballoon model='virtio'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvdata/net-virtio-teaming.xml b/tests/qemuxml2argvdata/net-virtio-teaming.xml
-new file mode 100644
-index 0000000000..830ce28524
---- /dev/null
-+++ b/tests/qemuxml2argvdata/net-virtio-teaming.xml
-@@ -0,0 +1,50 @@
-+<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-i386</emulator>
-+    <disk type='block' device='disk'>
-+      <source dev='/dev/HostVG/QEMUGuest1'/>
-+      <target dev='hda' bus='ide'/>
-+    </disk>
-+    <controller type='usb' index='0'/>
-+    <interface type='user'>
-+      <mac address='00:11:22:33:44:55'/>
-+      <model type='virtio'/>
-+      <teaming type='persistent'/>
-+      <alias name='ua-backup0'/>
-+    </interface>
-+    <interface type='user'>
-+      <mac address='66:44:33:22:11:00'/>
-+      <model type='virtio'/>
-+      <teaming type='persistent'/>
-+      <alias name='ua-backup1'/>
-+    </interface>
-+    <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>
-+      <teaming type='transient' persistent='ua-backup0'/>
-+    </interface>
-+    <interface type='hostdev' managed='yes'>
-+      <mac address='66:44:33:22:11:00'/>
-+      <source>
-+        <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x2'/>
-+      </source>
-+      <teaming type='transient' persistent='ua-backup1'/>
-+    </interface>
-+    <memballoon model='virtio'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml b/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
-new file mode 100644
-index 0000000000..e0dbeafe02
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/net-virtio-teaming-network.xml
-@@ -0,0 +1,51 @@
-+<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-i386</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='pci' index='0' model='pci-root'/>
-+    <controller type='ide' index='0'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-+    </controller>
-+    <interface type='network'>
-+      <mac address='00:11:22:33:44:55'/>
-+      <source network='mybridge'/>
-+      <model type='virtio'/>
-+      <teaming type='persistent'/>
-+      <alias name='ua-backup0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+    </interface>
-+    <interface type='network'>
-+      <mac address='00:11:22:33:44:55'/>
-+      <source network='myhostdevpool'/>
-+      <model type='virtio'/>
-+      <teaming type='transient' persistent='ua-backup0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-+    </interface>
-+    <input type='mouse' bus='ps2'/>
-+    <input type='keyboard' bus='ps2'/>
-+    <memballoon model='virtio'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
-+    </memballoon>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmloutdata/net-virtio-teaming.xml b/tests/qemuxml2xmloutdata/net-virtio-teaming.xml
-new file mode 100644
-index 0000000000..5a5695794a
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/net-virtio-teaming.xml
-@@ -0,0 +1,66 @@
-+<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-i386</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='pci' index='0' model='pci-root'/>
-+    <controller type='ide' index='0'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-+    </controller>
-+    <interface type='user'>
-+      <mac address='00:11:22:33:44:55'/>
-+      <model type='virtio'/>
-+      <teaming type='persistent'/>
-+      <alias name='ua-backup0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+    </interface>
-+    <interface type='user'>
-+      <mac address='66:44:33:22:11:00'/>
-+      <model type='virtio'/>
-+      <teaming type='persistent'/>
-+      <alias name='ua-backup1'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-+    </interface>
-+    <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>
-+      <teaming type='transient' persistent='ua-backup0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
-+    </interface>
-+    <interface type='hostdev' managed='yes'>
-+      <mac address='66:44:33:22:11:00'/>
-+      <source>
-+        <address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x2'/>
-+      </source>
-+      <teaming type='transient' persistent='ua-backup1'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
-+    </interface>
-+    <input type='mouse' bus='ps2'/>
-+    <input type='keyboard' bus='ps2'/>
-+    <memballoon model='virtio'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
-+    </memballoon>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 3cefc64833..e54c540ef6 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -451,6 +451,12 @@ mymain(void)
-     DO_TEST("net-eth-unmanaged-tap", NONE);
-     DO_TEST("net-virtio-network-portgroup", NONE);
-     DO_TEST("net-virtio-rxtxqueuesize", NONE);
-+    DO_TEST("net-virtio-teaming",
-+            QEMU_CAPS_VIRTIO_NET_FAILOVER,
-+            QEMU_CAPS_DEVICE_VFIO_PCI);
-+    DO_TEST("net-virtio-teaming-network",
-+            QEMU_CAPS_VIRTIO_NET_FAILOVER,
-+            QEMU_CAPS_DEVICE_VFIO_PCI);
-     DO_TEST("net-hostdev", NONE);
-     DO_TEST("net-hostdev-bootorder", NONE);
-     DO_TEST("net-hostdev-vfio", QEMU_CAPS_DEVICE_VFIO_PCI);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-properly-clear-out-autogenerated-macvtap-names-when-formatting-parsing.patch b/SOURCES/libvirt-conf-properly-clear-out-autogenerated-macvtap-names-when-formatting-parsing.patch
deleted file mode 100644
index 0133af5..0000000
--- a/SOURCES/libvirt-conf-properly-clear-out-autogenerated-macvtap-names-when-formatting-parsing.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From b2e0155b59ae9f038bcf21da7c6b7fb0a99a7b67 Mon Sep 17 00:00:00 2001
-Message-Id: <b2e0155b59ae9f038bcf21da7c6b7fb0a99a7b67@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Tue, 1 Dec 2020 22:01:00 -0500
-Subject: [PATCH] conf: properly clear out autogenerated macvtap names when
- formatting/parsing
-
-Back when macvtap support was added in commit 315baab9443 in Feb. 2010
-(libvirt-0.7.7), it was setup to autogenerate a name for the device if
-one wasn't supplied, in the pattern "macvtap%d" (or "macvlan%d"),
-similar to the way an unspecified standard tap device name will lead
-to an autogenerated "vnet%d".
-
-As a matter of fact, in commit ca1b7cc8e45 added in May 2010, the code
-was changed to *always* ignore a supplied device name for macvtap
-interfaces by deleting *any* name immediately during the <interface>
-parsing (this was intended to prevent one domain which had failed to
-completely start from deleting the macvtap device of another domain
-which had subsequently been provided the same device name (this will
-seem mildly ironic later). This was later fixed to only clear the
-device name when inactive XML was being parsed. HOWEVER - this was
-only done if the xml was <interface type='direct'> - autogenerated
-names were not cleared for <interface type='network'> (which could
-also result in a macvtap device).
-
-Although the names of "vnetX" tap devices had always been
-automatically cleared when parsing <interface> (see commit d1304583d
-from July 2008 (!)), at the time macvtap support was added, both vnetX
-and macvtapX device names were always included when formatting the
-XML.
-
-Then in commit a8be259d0cc (July 2011, libvirt-0.9.4), <interface>
-formatting was changed to also clear out "vnetX" device names during
-XML formatting as well. However the same treatment wasn't given to
-"macvtapX".
-
-Now in 2020, there has been a report that a failed migration leads to
-the macvtap device of some other unrelated guest on the destination
-host losing its network connectivity. It was determined that this was
-due to the domain XML in the migration containing a macvtap device
-name, e.g. "macvtap0", that was already in use by the other guest on
-the destination. Normally this wouldn't be a problem, because libvirt
-would see that the device was already in use, and then find a
-different unused name. But in this case, other external problems were
-causing the migration to fail prior to selecting a macvtap device and
-successfully opening it, and during error recovery, qemuProcessStop()
-was called, which went through all def->nets objects and (if they were
-macvtap) deleted the device specified in net->ifname; since libvirt
-hadn't gotten to the point of replacing the incoming "macvtap0" with
-the name of a device it actually created for this guest, that meant
-that "macvtap0" was deleted, *even though it was currently in use by a
-different guest*!
-
-Whew!
-
-So, it turns out that when formatting "migratable" XML, "vnetX"
-devices are omitted, just as when formatting "inactive" XML. By making
-the code in both interface parsing and formatting consistent for
-"vnetX", "macvtapX", and "macvlanX", we can thus make sure that the
-autogenerated (and unneeded / completely *not* wanted) macvtap device
-name will not be sent with the migration XML. This way when a
-migration fails, net->ifname will be NULL, and libvirt won't have any
-device to try and (erroneously) delete.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 282d135ddbb7203565cd5527b451469b14953994)
-
-https://bugzilla.redhat.com/1872610
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20201202030100.458879-1-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 12 ++++--------
- 1 file changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index f41559f33e..cd5c15f297 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -12183,14 +12183,6 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
-         }
- 
-         def->data.direct.linkdev = g_steal_pointer(&dev);
--
--        if (ifname &&
--            flags & VIR_DOMAIN_DEF_PARSE_INACTIVE &&
--            (STRPREFIX(ifname, VIR_NET_GENERATED_MACVTAP_PREFIX) ||
--             STRPREFIX(ifname, VIR_NET_GENERATED_MACVLAN_PREFIX))) {
--            VIR_FREE(ifname);
--        }
--
-         break;
- 
-     case VIR_DOMAIN_NET_TYPE_HOSTDEV:
-@@ -12238,6 +12230,8 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
-     if (def->managed_tap != VIR_TRISTATE_BOOL_NO && ifname &&
-         (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) &&
-         (STRPREFIX(ifname, VIR_NET_GENERATED_TAP_PREFIX) ||
-+         STRPREFIX(ifname, VIR_NET_GENERATED_MACVTAP_PREFIX) ||
-+         STRPREFIX(ifname, VIR_NET_GENERATED_MACVLAN_PREFIX) ||
-          (prefix && STRPREFIX(ifname, prefix)))) {
-         /* An auto-generated target name, blank it out */
-         VIR_FREE(ifname);
-@@ -25996,6 +25990,8 @@ virDomainNetDefFormat(virBufferPtr buf,
-         (def->managed_tap == VIR_TRISTATE_BOOL_NO ||
-          !((flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE) &&
-            (STRPREFIX(def->ifname, VIR_NET_GENERATED_TAP_PREFIX) ||
-+            STRPREFIX(def->ifname, VIR_NET_GENERATED_MACVTAP_PREFIX) ||
-+            STRPREFIX(def->ifname, VIR_NET_GENERATED_MACVLAN_PREFIX) ||
-             (prefix && STRPREFIX(def->ifname, prefix)))))) {
-         /* Skip auto-generated target names for inactive config. */
-         virBufferEscapeString(&attrBuf, " dev='%s'", def->ifname);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-conf-qemu-add-virtiofs-fsdriver-type.patch b/SOURCES/libvirt-conf-qemu-add-virtiofs-fsdriver-type.patch
deleted file mode 100644
index edad185..0000000
--- a/SOURCES/libvirt-conf-qemu-add-virtiofs-fsdriver-type.patch
+++ /dev/null
@@ -1,327 +0,0 @@
-From 2fce649fb569ab21c224f387456c996428f8a251 Mon Sep 17 00:00:00 2001
-Message-Id: <2fce649fb569ab21c224f387456c996428f8a251@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:41 +0100
-Subject: [PATCH] conf: qemu: add virtiofs fsdriver type
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduce a new 'virtiofs' driver type for filesystem.
-
-<filesystem type='mount' accessmode='passthrough'>
-  <driver type='virtiofs'/>
-  <source dir='/path'/>
-  <target dir='mount_tag'>
-  <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-</filesystem>
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit ecc6ad6b90ad674a903c95d2a637f8b1b5833be2)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <abe26807f06ed14b2be3cbd098461afc307e88e3.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/formatdomain.html.in                     | 12 ++-
- docs/schemas/domaincommon.rng                 |  6 ++
- src/conf/domain_conf.c                        |  1 +
- src/conf/domain_conf.h                        |  1 +
- src/qemu/qemu_command.c                       |  4 +
- src/qemu/qemu_domain.c                        |  4 +
- src/qemu/qemu_domain_address.c                |  4 +
- .../vhost-user-fs-fd-memory.xml               | 39 ++++++++++
- .../vhost-user-fs-hugepages.xml               | 74 +++++++++++++++++++
- .../vhost-user-fs-fd-memory.x86_64-latest.xml |  1 +
- .../vhost-user-fs-hugepages.x86_64-latest.xml |  1 +
- tests/qemuxml2xmltest.c                       |  3 +
- 12 files changed, 149 insertions(+), 1 deletion(-)
- create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
- create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
- create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
- create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 50914a5207..337ab01316 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -3935,6 +3935,11 @@
-     &lt;target dir='/import/from/host'/&gt;
-     &lt;readonly/&gt;
-   &lt;/filesystem&gt;
-+  &lt;filesystem type='mount' accessmode='passthrough'&gt;
-+      &lt;driver type='virtiofs'/&gt;
-+      &lt;source dir='/path'/&gt;
-+      &lt;target dir='mount_tag'/&gt;
-+  &lt;/filesystem&gt;
-   ...
- &lt;/devices&gt;
- ...</pre>
-@@ -3963,6 +3968,9 @@
-         while the value <code>immediate</code> means that a host writeback
-         is immediately triggered for all pages touched during a guest file
-         write operation <span class="since">(since 0.9.10)</span>.
-+        <span class="since">Since 6.2.0</span>, <code>type='virtiofs'</code>
-+        is also supported. Using virtiofs requires setting up shared memory,
-+        see the guide: <a href="kbase/virtiofs.html">Virtio-FS</a>
-         </dd>
-         <dt><code>template</code></dt>
-         <dd>
-@@ -3998,7 +4006,9 @@
-       The filesystem element has an optional attribute <code>accessmode</code>
-       which specifies the security mode for accessing the source
-       <span class="since">(since 0.8.5)</span>. Currently this only works
--      with <code>type='mount'</code> for the QEMU/KVM driver. The possible
-+      with <code>type='mount'</code> for the QEMU/KVM driver.
-+      For driver type <code>virtiofs</code>, only <code>passthrough</code> is
-+      supported. For other driver types, the possible
-       values are:
- 
-         <dl>
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index bfd8786ea8..5a9291b443 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -2645,6 +2645,12 @@
-           </optional>
-           <ref name='virtioOptions'/>
-         </group>
-+        <group>
-+          <attribute name="type">
-+            <value>virtiofs</value>
-+          </attribute>
-+          <ref name='virtioOptions'/>
-+        </group>
-         <empty/>
-       </choice>
-     </element>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 990c5bcc1e..31d4828802 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -476,6 +476,7 @@ VIR_ENUM_IMPL(virDomainFSDriver,
-               "loop",
-               "nbd",
-               "ploop",
-+              "virtiofs",
- );
- 
- VIR_ENUM_IMPL(virDomainFSAccessMode,
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index ef2c1b80f7..921cc42a57 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -771,6 +771,7 @@ typedef enum {
-     VIR_DOMAIN_FS_DRIVER_TYPE_LOOP,
-     VIR_DOMAIN_FS_DRIVER_TYPE_NBD,
-     VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP,
-+    VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS,
- 
-     VIR_DOMAIN_FS_DRIVER_TYPE_LAST
- } virDomainFSDriverType;
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 252809a8d7..7fdf58f067 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -2695,6 +2695,10 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd,
-                 return -1;
-             break;
- 
-+        case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
-+            /* TODO: vhost-user-fs-pci */
-+            break;
-+
-         case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
-         case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
-         case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index ed35260712..402b079b09 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -8361,6 +8361,10 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
-                        _("Filesystem driver type not supported"));
-         return -1;
- 
-+    case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
-+        /* TODO: vhost-user-fs-pci */
-+        return 0;
-+
-     case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
-     default:
-         virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);
-diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
-index 9e3bcc434d..3c6ac62ff5 100644
---- a/src/qemu/qemu_domain_address.c
-+++ b/src/qemu/qemu_domain_address.c
-@@ -690,6 +690,10 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
-             }
-             break;
- 
-+        case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
-+            /* vhost-user-fs-pci */
-+            return virtioFlags;
-+
-         case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
-         case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
-         case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
-diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
-new file mode 100644
-index 0000000000..a6b6279fb8
---- /dev/null
-+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
-@@ -0,0 +1,39 @@
-+<domain type='kvm'>
-+  <name>guest</name>
-+  <uuid>126f2720-6f8e-45ab-a886-ec9277079a67</uuid>
-+  <memory unit='KiB'>14680064</memory>
-+  <currentMemory unit='KiB'>14680064</currentMemory>
-+  <memoryBacking>
-+    <source type='file'/>
-+    <access mode='shared'/>
-+  </memoryBacking>
-+  <vcpu placement='static'>2</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <cpu mode='custom' match='exact' check='none'>
-+    <model fallback='forbid'>qemu64</model>
-+    <numa>
-+      <cell id='0' cpus='0-1' memory='14680064' unit='KiB' memAccess='shared'/>
-+    </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' model='none'/>
-+    <controller type='pci' index='0' model='pci-root'/>
-+    <filesystem type='mount' accessmode='passthrough'>
-+      <driver type='virtiofs'/>
-+      <source dir='/path'/>
-+      <target dir='mount_tag'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-+    </filesystem>
-+    <input type='mouse' bus='ps2'/>
-+    <input type='keyboard' bus='ps2'/>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
-new file mode 100644
-index 0000000000..70df7b890d
---- /dev/null
-+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
-@@ -0,0 +1,74 @@
-+<domain type='qemu'>
-+  <name>guest</name>
-+  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
-+  <memory unit='KiB'>4194304</memory>
-+  <currentMemory unit='KiB'>4194304</currentMemory>
-+  <memoryBacking>
-+    <hugepages>
-+      <page size='2048' unit='KiB'/>
-+    </hugepages>
-+    <access mode='shared'/>
-+  </memoryBacking>
-+  <vcpu placement='static'>2</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='q35'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+  </features>
-+  <cpu mode='custom' match='exact' check='none'>
-+    <model fallback='forbid'>qemu64</model>
-+    <numa>
-+      <cell id='0' cpus='0-1' memory='2097152' unit='KiB' memAccess='shared'/>
-+    </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>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='qcow2'/>
-+      <source file='/var/lib/libvirt/images/guest.qcow2'/>
-+      <target dev='vda' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
-+    </disk>
-+    <controller type='usb' index='0' model='none'/>
-+    <controller type='sata' index='0'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
-+    </controller>
-+    <controller type='pci' index='0' model='pcie-root'/>
-+    <controller type='pci' index='1' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='1' port='0x8'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
-+    </controller>
-+    <controller type='pci' index='2' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='2' port='0x9'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-+    </controller>
-+    <controller type='pci' index='3' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='3' port='0xa'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
-+    </controller>
-+    <controller type='pci' index='4' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='4' port='0xb'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x3'/>
-+    </controller>
-+    <filesystem type='mount' accessmode='passthrough'>
-+      <driver type='virtiofs'/>
-+      <source dir='/path'/>
-+      <target dir='mount_tag'/>
-+      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
-+    </filesystem>
-+    <input type='mouse' bus='ps2'/>
-+    <input type='keyboard' bus='ps2'/>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
-new file mode 120000
-index 0000000000..fbc552ef94
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/vhost-user-fs-fd-memory.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
-new file mode 120000
-index 0000000000..0c0f05b254
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/vhost-user-fs-hugepages.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index d58259587b..f77f59fa3c 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1428,6 +1428,9 @@ mymain(void)
-     DO_TEST("vhost-vsock-ccw-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK,
-             QEMU_CAPS_CCW);
- 
-+    DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
-+    DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
-+
-     DO_TEST("riscv64-virt",
-             QEMU_CAPS_DEVICE_VIRTIO_MMIO);
-     DO_TEST("riscv64-virt-pci",
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-conf-qemu-s-VIR_PCI_CONNECT_HOTPLUGGABLE-VIR_PCI_CONNECT_AUTOASSIGN-g.patch b/SOURCES/libvirt-conf-qemu-s-VIR_PCI_CONNECT_HOTPLUGGABLE-VIR_PCI_CONNECT_AUTOASSIGN-g.patch
deleted file mode 100644
index b6c0102..0000000
--- a/SOURCES/libvirt-conf-qemu-s-VIR_PCI_CONNECT_HOTPLUGGABLE-VIR_PCI_CONNECT_AUTOASSIGN-g.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 4f2bf4edfb640c38281d63e54145433ce8a78d28 Mon Sep 17 00:00:00 2001
-Message-Id: <4f2bf4edfb640c38281d63e54145433ce8a78d28@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:11 -0400
-Subject: [PATCH] conf/qemu:
- s/VIR_PCI_CONNECT_HOTPLUGGABLE/VIR_PCI_CONNECT_AUTOASSIGN/g
-
-When the HOTPLUGGABLE flag was originally added, it was set for all
-the PCI controllers that accepted hotplugged devices, and requested
-for all devices that were auto-assigned to a controller. While we're
-still autoassigning to the same list of controllers, those controllers
-may or may not support hotplug, so let's use the flag that fits what
-we're actually doing.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 7c98f5e3652e19e4eb015d290c1eed2f1b58ee72)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-9-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_addr.c         | 18 +++++++++---------
- src/qemu/qemu_domain_address.c | 14 +++++++-------
- 2 files changed, 16 insertions(+), 16 deletions(-)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index e0be655772..53be6cd34b 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -362,8 +362,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
-          * libvirt's assumptions about whether or not hotplug
-          * capability will be required.
-          */
--        if (devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)
--            busFlags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
-+        if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
-+            busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
-         /* if the device is a pci-bridge, allow manually
-          * assigning to any bus that would also accept a
-          * standard PCI device.
-@@ -419,8 +419,8 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
-                        addrStr, addr->bus, connectStr);
-         return false;
-     }
--    if ((devFlags & VIR_PCI_CONNECT_HOTPLUGGABLE) &&
--        !(busFlags & VIR_PCI_CONNECT_HOTPLUGGABLE)) {
-+    if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
-+        !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
-         if (reportError) {
-             virReportError(errType,
-                            _("The device at PCI address %s requires "
-@@ -509,7 +509,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
-      */
-     switch (model) {
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
--        bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+        bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
-                       VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS);
-@@ -517,14 +517,14 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
-         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
-         break;
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
--        bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+        bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
-         bus->minSlot = 1;
-         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
-         break;
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
--        bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+        bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
-         bus->minSlot = 0;
-@@ -555,7 +555,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE:
-         /* Same as pci-bridge: 32 hotpluggable traditional PCI slots (0-31),
-          * the first of which is not usable because of the SHPC */
--        bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+        bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
-         bus->minSlot = 1;
-@@ -566,7 +566,7 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
-         /* provides one slot which is pcie, can be used by endpoint
-          * devices, pcie-switch-upstream-ports or pcie-to-pci-bridges,
-          * and is hotpluggable */
--        bus->flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+        bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT |
-                       VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE);
-diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
-index 3c6ac62ff5..e81585bc6c 100644
---- a/src/qemu/qemu_domain_address.c
-+++ b/src/qemu/qemu_domain_address.c
-@@ -571,7 +571,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
-                                          virDomainPCIConnectFlags virtioFlags)
- {
-     virDomainPCIConnectFlags pciFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
--                                         VIR_PCI_CONNECT_HOTPLUGGABLE);
-+                                         VIR_PCI_CONNECT_AUTOASSIGN);
- 
-     switch ((virDomainDeviceType)dev->type) {
-     case VIR_DOMAIN_DEVICE_CONTROLLER: {
-@@ -1063,17 +1063,17 @@ qemuDomainFillDevicePCIConnectFlagsIterInit(virDomainDefPtr def,
- 
-     if (qemuDomainHasPCIeRoot(def)) {
-         data->pcieFlags = (VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
--                           VIR_PCI_CONNECT_HOTPLUGGABLE);
-+                           VIR_PCI_CONNECT_AUTOASSIGN);
-     } else {
-         data->pcieFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
--                           VIR_PCI_CONNECT_HOTPLUGGABLE);
-+                           VIR_PCI_CONNECT_AUTOASSIGN);
-     }
- 
-     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY)) {
-         data->virtioFlags = data->pcieFlags;
-     } else {
-         data->virtioFlags = (VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
--                             VIR_PCI_CONNECT_HOTPLUGGABLE);
-+                             VIR_PCI_CONNECT_AUTOASSIGN);
-     }
- }
- 
-@@ -1729,7 +1729,7 @@ qemuDomainValidateDevicePCISlotsPIIX3(virDomainDefPtr def,
-     virPCIDeviceAddress tmp_addr;
-     bool qemuDeviceVideoUsable = virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY);
-     g_autofree char *addrStr = NULL;
--    virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_HOTPLUGGABLE
-+    virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_AUTOASSIGN
-                                       | VIR_PCI_CONNECT_TYPE_PCI_DEVICE);
- 
-     /* Verify that first IDE and USB controllers (if any) is on the PIIX3, fn 1 */
-@@ -2666,7 +2666,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
-              * domain.
-              */
-             virDomainDeviceInfo info = {
--                .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+                .pciConnectFlags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                                     VIR_PCI_CONNECT_TYPE_PCI_DEVICE),
-                 .pciAddrExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE
-             };
-@@ -2707,7 +2707,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
-             addrs->nbuses > max_idx + 1 &&
-             qemuDomainHasPCIeRoot(def)) {
-             virDomainDeviceInfo info = {
--                .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
-+                .pciConnectFlags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                                     VIR_PCI_CONNECT_TYPE_PCIE_DEVICE),
-                 .pciAddrExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE
-             };
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-conf-remove-duplicated-firmware-type-attribute.patch b/SOURCES/libvirt-conf-remove-duplicated-firmware-type-attribute.patch
deleted file mode 100644
index 3bc500f..0000000
--- a/SOURCES/libvirt-conf-remove-duplicated-firmware-type-attribute.patch
+++ /dev/null
@@ -1,317 +0,0 @@
-From 4ca3f2f590fb860b01f1eb5fec8929ceba702dc6 Mon Sep 17 00:00:00 2001
-Message-Id: <4ca3f2f590fb860b01f1eb5fec8929ceba702dc6@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Fri, 21 May 2021 14:16:14 +0200
-Subject: [PATCH] conf: remove duplicated firmware type attribute
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The
-
-  <os firmware='efi'>
-    <firmware type='efi'>
-      <feature enabled='no' name='enrolled-keys'/>
-    </firmware>
-  </os>
-
-repeats the firmware attribute twice. This has no functional benefit, as
-evidenced by fact that we use a single struct field to store both
-attributes, while needlessly introducing an error scenario. The XML can
-just be simplified to:
-
-  <os firmware='efi'>
-    <firmware>
-      <feature enabled='no' name='enrolled-keys'/>
-    </firmware>
-  </os>
-
-which also means that we don't need to emit the empty element
-<firmware type='efi'/> for all existing configs too.
-
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit a9b1375d7d2f7d240dce09c5f8b62e568e386051)
-
-Conflicts:
-    docs/formatdomain.rst
-        - we still have formatdomain.html.in in downstream
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <299fd16fc3ce632bf25ca55cc4bb65a225437d61.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/formatdomain.html.in                     | 15 ------
- docs/schemas/domaincommon.rng                 | 10 +---
- src/conf/domain_conf.c                        | 48 ++++++-------------
- .../os-firmware-efi-no-enrolled-keys.xml      |  2 +-
- .../os-firmware-invalid-type.xml              | 28 -----------
- tests/qemuxml2argvtest.c                      |  1 -
- ...aarch64-os-firmware-efi.aarch64-latest.xml |  1 -
- .../os-firmware-bios.x86_64-latest.xml        |  1 -
- .../os-firmware-efi-secboot.x86_64-latest.xml |  1 -
- .../os-firmware-efi.x86_64-latest.xml         |  1 -
- tests/vmx2xmldata/vmx2xml-firmware-efi.xml    |  1 -
- 11 files changed, 18 insertions(+), 91 deletions(-)
- delete mode 100644 tests/qemuxml2argvdata/os-firmware-invalid-type.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 11f31618af..79e2e51c54 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -183,21 +183,6 @@
-       <dt><a id="elementFirmware"><code>firmware</code></a></dt>
-       <dd>
-         <p><span class="since">Since 7.2.0 QEMU/KVM only</span></p>
--        <p>
--          When used together with <code>firmware</code> attribute of
--          <code>os</code> element the <code>type</code> attribute must
--          have the same value.
--        </p>
--        <p>
--          List of mandatory attributes:
--          <ul>
--            <li>
--              <code>type</code> (accepted values are <code>bios</code>
--              and <code>efi</code>) same as the <code>firmware</code>
--              attribute of <code>os</code> element.
--            </li>
--          </ul>
--        </p>
-         <p>
-           When using firmware auto-selection there are different features
-           enabled in the firmwares. The list of features can be used to
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index b7f6a6b494..ec8167e588 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -270,13 +270,7 @@
-         <ref name="ostypehvm"/>
-         <optional>
-           <element name="firmware">
--            <attribute name="type">
--              <choice>
--                <value>bios</value>
--                <value>efi</value>
--              </choice>
--            </attribute>
--            <zeroOrMore>
-+            <oneOrMore>
-               <element name="feature">
-                 <attribute name="enabled">
-                   <ref name="virYesNo"/>
-@@ -288,7 +282,7 @@
-                   </choice>
-                 </attribute>
-               </element>
--            </zeroOrMore>
-+            </oneOrMore>
-           </element>
-         </optional>
-         <optional>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 2ffa9c8a2a..6806064016 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19389,31 +19389,21 @@ virDomainDefParseBootFirmwareOptions(virDomainDefPtr def,
-                                      xmlXPathContextPtr ctxt)
- {
-     g_autofree char *firmware = virXPathString("string(./os/@firmware)", ctxt);
--    g_autofree char *type = virXPathString("string(./os/firmware/@type)", ctxt);
-     g_autofree xmlNodePtr *nodes = NULL;
-     g_autofree int *features = NULL;
-     int fw = 0;
-     int n = 0;
-     size_t i;
- 
--    if (!firmware && !type)
-+    if (!firmware)
-         return 0;
- 
--    if (firmware && type && STRNEQ(firmware, type)) {
--        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
--                       _("firmware attribute and firmware type has to be the same"));
--        return -1;
--    }
--
--    if (!type)
--        type = g_steal_pointer(&firmware);
--
--    fw = virDomainOsDefFirmwareTypeFromString(type);
-+    fw = virDomainOsDefFirmwareTypeFromString(firmware);
- 
-     if (fw <= 0) {
-         virReportError(VIR_ERR_XML_ERROR,
-                        _("unknown firmware value %s"),
--                       type);
-+                       firmware);
-         return -1;
-     }
- 
-@@ -29039,30 +29029,22 @@ virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
-         virBufferAsprintf(buf, ">%s</type>\n",
-                           virDomainOSTypeToString(def->os.type));
- 
--    if (def->os.firmware) {
--        virBufferAsprintf(buf, "<firmware type='%s'",
--                          virDomainOsDefFirmwareTypeToString(def->os.firmware));
--
--        if (def->os.firmwareFeatures) {
--            virBufferAddLit(buf, ">\n");
--
--            virBufferAdjustIndent(buf, 2);
-+    if (def->os.firmwareFeatures) {
-+        virBufferAddLit(buf, "<firmware>\n");
-+        virBufferAdjustIndent(buf, 2);
- 
--            for (i = 0; i < VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST; i++) {
--                if (def->os.firmwareFeatures[i] == VIR_TRISTATE_BOOL_ABSENT)
--                    continue;
-+        for (i = 0; i < VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST; i++) {
-+            if (def->os.firmwareFeatures[i] == VIR_TRISTATE_BOOL_ABSENT)
-+                continue;
- 
--                virBufferAsprintf(buf, "<feature enabled='%s' name='%s'/>\n",
--                                  virTristateBoolTypeToString(def->os.firmwareFeatures[i]),
--                                  virDomainOsDefFirmwareFeatureTypeToString(i));
--            }
-+            virBufferAsprintf(buf, "<feature enabled='%s' name='%s'/>\n",
-+                              virTristateBoolTypeToString(def->os.firmwareFeatures[i]),
-+                              virDomainOsDefFirmwareFeatureTypeToString(i));
-+        }
- 
--            virBufferAdjustIndent(buf, -2);
-+        virBufferAdjustIndent(buf, -2);
- 
--            virBufferAddLit(buf, "</firmware>\n");
--        } else {
--            virBufferAddLit(buf, "/>\n");
--        }
-+        virBufferAddLit(buf, "</firmware>\n");
-     }
- 
-     virBufferEscapeString(buf, "<init>%s</init>\n",
-diff --git a/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-index 7f8f57a859..4999c4f125 100644
---- a/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-+++ b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-@@ -6,7 +6,7 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
--    <firmware type='efi'>
-+    <firmware>
-       <feature enabled='no' name='enrolled-keys'/>
-     </firmware>
-     <boot dev='hd'/>
-diff --git a/tests/qemuxml2argvdata/os-firmware-invalid-type.xml b/tests/qemuxml2argvdata/os-firmware-invalid-type.xml
-deleted file mode 100644
-index 41360df0f7..0000000000
---- a/tests/qemuxml2argvdata/os-firmware-invalid-type.xml
-+++ /dev/null
-@@ -1,28 +0,0 @@
--<domain type='kvm'>
--  <name>fedora</name>
--  <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
--  <memory unit='KiB'>8192</memory>
--  <currentMemory unit='KiB'>8192</currentMemory>
--  <vcpu placement='static'>1</vcpu>
--  <os firmware='efi'>
--    <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
--    <firmware type='bios'/>
--    <loader secure='no'/>
--    <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
--    <boot dev='hd'/>
--    <bootmenu enable='yes'/>
--  </os>
--  <features>
--    <acpi/>
--    <apic/>
--    <pae/>
--  </features>
--  <clock offset='utc'/>
--  <on_poweroff>destroy</on_poweroff>
--  <on_reboot>restart</on_reboot>
--  <on_crash>restart</on_crash>
--  <devices>
--    <emulator>/usr/bin/qemu-system-x86_64</emulator>
--    <memballoon model='none'/>
--  </devices>
--</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 5e16d7fd31..be8054fa6a 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -3095,7 +3095,6 @@ mymain(void)
-     DO_TEST_CAPS_LATEST("os-firmware-efi");
-     DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
-     DO_TEST_CAPS_LATEST("os-firmware-efi-no-enrolled-keys");
--    DO_TEST_CAPS_LATEST_PARSE_ERROR("os-firmware-invalid-type");
-     DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");
- 
-     DO_TEST_CAPS_LATEST("vhost-user-vga");
-diff --git a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
-index 3cac8fc5c6..1e51d55305 100644
---- a/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/aarch64-os-firmware-efi.aarch64-latest.xml
-@@ -6,7 +6,6 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='aarch64' machine='virt-4.0'>hvm</type>
--    <firmware type='efi'/>
-     <kernel>/aarch64.kernel</kernel>
-     <initrd>/aarch64.initrd</initrd>
-     <cmdline>earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait</cmdline>
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
-index ef24f2fece..60d3498765 100644
---- a/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/os-firmware-bios.x86_64-latest.xml
-@@ -6,7 +6,6 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='bios'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
--    <firmware type='bios'/>
-     <loader secure='no'/>
-     <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-     <boot dev='hd'/>
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
-index 3757191e8e..938da73711 100644
---- a/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/os-firmware-efi-secboot.x86_64-latest.xml
-@@ -6,7 +6,6 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
--    <firmware type='efi'/>
-     <loader secure='yes'/>
-     <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-     <boot dev='hd'/>
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
-index f2e6b7f36d..97ce8a75c7 100644
---- a/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/os-firmware-efi.x86_64-latest.xml
-@@ -6,7 +6,6 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
--    <firmware type='efi'/>
-     <loader secure='no'/>
-     <nvram>/var/lib/libvirt/qemu/nvram/fedora_VARS.fd</nvram>
-     <boot dev='hd'/>
-diff --git a/tests/vmx2xmldata/vmx2xml-firmware-efi.xml b/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
-index 375c47d281..e21158cebf 100644
---- a/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
-+++ b/tests/vmx2xmldata/vmx2xml-firmware-efi.xml
-@@ -5,7 +5,6 @@
-   <vcpu placement='static'>1</vcpu>
-   <os firmware='efi'>
-     <type arch='i686'>hvm</type>
--    <firmware type='efi'/>
-   </os>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-remove-unused-virCapabilitiesSetHostCPU-method.patch b/SOURCES/libvirt-conf-remove-unused-virCapabilitiesSetHostCPU-method.patch
deleted file mode 100644
index c2f8d2f..0000000
--- a/SOURCES/libvirt-conf-remove-unused-virCapabilitiesSetHostCPU-method.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 6ece5388a7fb7fc3c703cd1bc9e214ad411451d8 Mon Sep 17 00:00:00 2001
-Message-Id: <6ece5388a7fb7fc3c703cd1bc9e214ad411451d8@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Mon, 3 Feb 2020 18:07:23 +0000
-Subject: [PATCH] conf: remove unused virCapabilitiesSetHostCPU method
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 2ce9474c2a6ba3df4977068dcee35d3fa5468749)
-
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785207
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785211
-Message-Id: <20200203180726.2203691-3-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/conf/capabilities.c  | 21 ---------------------
- src/conf/capabilities.h  |  6 ------
- src/libvirt_private.syms |  1 -
- 3 files changed, 28 deletions(-)
-
-diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
-index 9a39858280..bf1d9936ed 100644
---- a/src/conf/capabilities.c
-+++ b/src/conf/capabilities.c
-@@ -368,27 +368,6 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMAPtr caps,
-     g_ptr_array_add(caps->cells, cell);
- }
- 
--
--/**
-- * virCapabilitiesSetHostCPU:
-- * @caps: capabilities to extend
-- * @cpu: CPU definition
-- *
-- * Sets host CPU specification
-- */
--int
--virCapabilitiesSetHostCPU(virCapsPtr caps,
--                          virCPUDefPtr cpu)
--{
--    if (cpu == NULL)
--        return -1;
--
--    caps->host.cpu = cpu;
--
--    return 0;
--}
--
--
- /**
-  * virCapabilitiesAllocMachines:
-  * @machines: machine variants for emulator ('pc', or 'isapc', etc)
-diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
-index f604e7b95e..4a49e94aa5 100644
---- a/src/conf/capabilities.h
-+++ b/src/conf/capabilities.h
-@@ -258,12 +258,6 @@ virCapabilitiesHostNUMAAddCell(virCapsHostNUMAPtr caps,
-                                int npageinfo,
-                                virCapsHostNUMACellPageInfoPtr pageinfo);
- 
--
--int
--virCapabilitiesSetHostCPU(virCapsPtr caps,
--                          virCPUDefPtr cpu);
--
--
- virCapsGuestMachinePtr *
- virCapabilitiesAllocMachines(const char *const *names,
-                              int nnames);
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index b97906b852..afa7d4fcae 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -77,7 +77,6 @@ virCapabilitiesHostSecModelAddBaseLabel;
- virCapabilitiesInitCaches;
- virCapabilitiesInitPages;
- virCapabilitiesNew;
--virCapabilitiesSetHostCPU;
- virCapabilitiesSetNetPrefix;
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-conf-rename-namespace-property-of-struct-_virStorageSourceNVMeDef.patch b/SOURCES/libvirt-conf-rename-namespace-property-of-struct-_virStorageSourceNVMeDef.patch
deleted file mode 100644
index dce9fb3..0000000
--- a/SOURCES/libvirt-conf-rename-namespace-property-of-struct-_virStorageSourceNVMeDef.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From 9b070e02e7b5bb95728a1fcdc8b7dfaaacc5f30a Mon Sep 17 00:00:00 2001
-Message-Id: <9b070e02e7b5bb95728a1fcdc8b7dfaaacc5f30a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:25:55 +0100
-Subject: [PATCH] conf: rename 'namespace' property of struct
- _virStorageSourceNVMeDef
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-While 'namespace' is not a reserved word in C, it is in C++. Our
-compilers are happy with it but syntax-hilighting in some editors
-hilights is as a keyword. Rename it to prevent confusion.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 5793b8baa75747860f6ba97470969047e60c8579)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <bfe6cf10a95868ae56a91f362a1ea50667754027.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c    | 12 ++++++------
- src/qemu/qemu_block.c     |  2 +-
- src/util/virhostdev.c     |  2 +-
- src/util/virstoragefile.c |  4 ++--
- src/util/virstoragefile.h |  2 +-
- 5 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 8aec85e83c..1e8518139c 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -6054,7 +6054,7 @@ virDomainDiskDefValidate(const virDomainDef *def,
- 
-     if (disk->src->type == VIR_STORAGE_TYPE_NVME) {
-         /* NVMe namespaces start from 1 */
--        if (disk->src->nvme->namespace == 0) {
-+        if (disk->src->nvme->namespc == 0) {
-             virReportError(VIR_ERR_XML_ERROR, "%s",
-                            _("NVMe namespace can't be zero"));
-             return -1;
-@@ -9433,7 +9433,7 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node,
- {
-     g_autoptr(virStorageSourceNVMeDef) nvme = NULL;
-     g_autofree char *type = NULL;
--    g_autofree char *namespace = NULL;
-+    g_autofree char *namespc = NULL;
-     g_autofree char *managed = NULL;
-     xmlNodePtr address;
- 
-@@ -9452,16 +9452,16 @@ virDomainDiskSourceNVMeParse(xmlNodePtr node,
-         return -1;
-     }
- 
--    if (!(namespace = virXMLPropString(node, "namespace"))) {
-+    if (!(namespc = virXMLPropString(node, "namespace"))) {
-         virReportError(VIR_ERR_XML_ERROR, "%s",
-                        _("missing 'namespace' attribute to disk source"));
-         return -1;
-     }
- 
--    if (virStrToLong_ull(namespace, NULL, 10, &nvme->namespace) < 0) {
-+    if (virStrToLong_ull(namespc, NULL, 10, &nvme->namespc) < 0) {
-         virReportError(VIR_ERR_XML_ERROR,
-                        _("malformed namespace '%s'"),
--                       namespace);
-+                       namespc);
-         return -1;
-     }
- 
-@@ -24444,7 +24444,7 @@ virDomainDiskSourceNVMeFormat(virBufferPtr attrBuf,
-     virBufferAddLit(attrBuf, " type='pci'");
-     virBufferAsprintf(attrBuf, " managed='%s'",
-                       virTristateBoolTypeToString(nvme->managed));
--    virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespace);
-+    virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespc);
-     virPCIDeviceAddressFormat(childBuf, nvme->pciAddr, false);
- }
- 
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 73cb5ba4bc..5697d4fc73 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1008,7 +1008,7 @@ qemuBlockStorageSourceGetNVMeProps(virStorageSourcePtr src)
-     ignore_value(virJSONValueObjectCreate(&ret,
-                                           "s:driver", "nvme",
-                                           "s:device", pciAddr,
--                                          "U:namespace", nvme->namespace,
-+                                          "U:namespace", nvme->namespc,
-                                           NULL));
-     return ret;
- }
-diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
-index 9b4ea30216..9596482146 100644
---- a/src/util/virhostdev.c
-+++ b/src/util/virhostdev.c
-@@ -2256,7 +2256,7 @@ virHostdevGetNVMeDeviceList(virNVMeDeviceListPtr nvmeDevices,
-             continue;
- 
-         if (!(dev = virNVMeDeviceNew(&srcNVMe->pciAddr,
--                                     srcNVMe->namespace,
-+                                     srcNVMe->namespc,
-                                      srcNVMe->managed)))
-             return -1;
- 
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index fa37840532..2e54620139 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2052,7 +2052,7 @@ virStorageSourceNVMeDefCopy(const virStorageSourceNVMeDef *src)
- 
-     ret = g_new0(virStorageSourceNVMeDef, 1);
- 
--    ret->namespace = src->namespace;
-+    ret->namespc = src->namespc;
-     ret->managed = src->managed;
-     virPCIDeviceAddressCopy(&ret->pciAddr, &src->pciAddr);
-     return ret;
-@@ -2069,7 +2069,7 @@ virStorageSourceNVMeDefIsEqual(const virStorageSourceNVMeDef *a,
-     if (!a || !b)
-         return false;
- 
--    if (a->namespace != b->namespace ||
-+    if (a->namespc != b->namespc ||
-         a->managed != b->managed ||
-         !virPCIDeviceAddressEqual(&a->pciAddr, &b->pciAddr))
-         return false;
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index c1430cadd1..0230f44652 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -246,7 +246,7 @@ struct _virStorageSourceInitiatorDef {
- typedef struct _virStorageSourceNVMeDef virStorageSourceNVMeDef;
- typedef virStorageSourceNVMeDef *virStorageSourceNVMeDefPtr;
- struct _virStorageSourceNVMeDef {
--    unsigned long long namespace;
-+    unsigned long long namespc;
-     int managed; /* enum virTristateBool */
-     virPCIDeviceAddress pciAddr;
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-conf-simplify-logic-when-checking-for-AUTOASSIGN-PCI-addresses.patch b/SOURCES/libvirt-conf-simplify-logic-when-checking-for-AUTOASSIGN-PCI-addresses.patch
deleted file mode 100644
index cedc221..0000000
--- a/SOURCES/libvirt-conf-simplify-logic-when-checking-for-AUTOASSIGN-PCI-addresses.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From f52197675b2babfafb1b89058e3fd01decebd8ab Mon Sep 17 00:00:00 2001
-Message-Id: <f52197675b2babfafb1b89058e3fd01decebd8ab@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:12 -0400
-Subject: [PATCH] conf: simplify logic when checking for AUTOASSIGN PCI
- addresses
-
-Old behavior: If the address was manually provided by config, copy
-device AUTOASSIGN flag into the bus flag, and then later on in the
-function *always* check for a match of the flags (which will always
-match if the address came from config, since we just copied it).
-
-New behavior: Don't mess with the bus flags - just directly check if
-the AUTOASSIGN flag matches in bus and dev, but only make the check if
-the address didn't come from config (i.e. it was auto-assigned by
-libvirt).
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit fcdf87d3ef14de9dfb0acaf4b4445e1580dfc629)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-10-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_addr.c | 27 ++++++++++-----------------
- 1 file changed, 10 insertions(+), 17 deletions(-)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index 53be6cd34b..05f036e3e6 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -358,18 +358,22 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
-          */
-         if (busFlags & VIR_PCI_CONNECT_TYPES_ENDPOINT)
-             busFlags |= VIR_PCI_CONNECT_TYPES_ENDPOINT;
--        /* Also allow manual specification of bus to override
--         * libvirt's assumptions about whether or not hotplug
--         * capability will be required.
--         */
--        if (devFlags & VIR_PCI_CONNECT_AUTOASSIGN)
--            busFlags |= VIR_PCI_CONNECT_AUTOASSIGN;
-         /* if the device is a pci-bridge, allow manually
-          * assigning to any bus that would also accept a
-          * standard PCI device.
-          */
-         if (devFlags & VIR_PCI_CONNECT_TYPE_PCI_BRIDGE)
-             devFlags |= VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
-+    } else if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
-+               !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
-+        if (reportError) {
-+            virReportError(errType,
-+                           _("The device at PCI address %s was auto-assigned "
-+                             "this address, but the PCI controller "
-+                             "with index='%d' doesn't allow auto-assignment"),
-+                           addrStr, addr->bus);
-+        }
-+        return false;
-     }
- 
-     /* If this bus doesn't allow the type of connection (PCI
-@@ -419,17 +423,6 @@ virDomainPCIAddressFlagsCompatible(virPCIDeviceAddressPtr addr,
-                        addrStr, addr->bus, connectStr);
-         return false;
-     }
--    if ((devFlags & VIR_PCI_CONNECT_AUTOASSIGN) &&
--        !(busFlags & VIR_PCI_CONNECT_AUTOASSIGN)) {
--        if (reportError) {
--            virReportError(errType,
--                           _("The device at PCI address %s requires "
--                             "hotplug capability, but the PCI controller "
--                             "with index='%d' doesn't support hotplug"),
--                           addrStr, addr->bus);
--        }
--        return false;
--    }
-     return true;
- }
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-conf-use-switch-in-virDomainDefParseBootOptions.patch b/SOURCES/libvirt-conf-use-switch-in-virDomainDefParseBootOptions.patch
deleted file mode 100644
index e4a8822..0000000
--- a/SOURCES/libvirt-conf-use-switch-in-virDomainDefParseBootOptions.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 75470b7c297be9bdd712282b89c48465dbe8d400 Mon Sep 17 00:00:00 2001
-Message-Id: <75470b7c297be9bdd712282b89c48465dbe8d400@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:10 +0200
-Subject: [PATCH] conf: use switch in virDomainDefParseBootOptions
-
-The original code used a lot of conditions and was not that obvious
-when each XML bits are parsed.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 6330be1ba3af5c4d2150fe2b831f7bc5d87c6d2a)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <900c870b1720688123ed7b69850548ae308ea9a8.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 42 ++++++++++++++++++++++++++----------------
- 1 file changed, 26 insertions(+), 16 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index f8d8d33245..93a78f8277 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -19483,33 +19483,43 @@ virDomainDefParseBootOptions(virDomainDefPtr def,
-      *   - An init script                             (exe)
-      */
- 
--    if (def->os.type == VIR_DOMAIN_OSTYPE_EXE) {
--        if (virDomainDefParseBootInitOptions(def, ctxt) < 0)
--            return -1;
--    }
--
--    if (def->os.type == VIR_DOMAIN_OSTYPE_XEN ||
--        def->os.type == VIR_DOMAIN_OSTYPE_XENPVH ||
--        def->os.type == VIR_DOMAIN_OSTYPE_HVM ||
--        def->os.type == VIR_DOMAIN_OSTYPE_UML) {
--
-+    switch ((virDomainOSType) def->os.type) {
-+    case VIR_DOMAIN_OSTYPE_HVM:
-         virDomainDefParseBootKernelOptions(def, ctxt);
- 
--        if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
--            if (virDomainDefParseBootFirmwareOptions(def, ctxt) < 0)
--                return -1;
--        }
-+        if (virDomainDefParseBootFirmwareOptions(def, ctxt) < 0)
-+            return -1;
- 
-         if (virDomainDefParseBootLoaderOptions(def, ctxt) < 0)
-             return -1;
--    }
- 
--    if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
-         if (virDomainDefParseBootAcpiOptions(def, ctxt) < 0)
-             return -1;
- 
-         if (virDomainDefParseBootXML(ctxt, def) < 0)
-             return -1;
-+
-+        break;
-+
-+    case VIR_DOMAIN_OSTYPE_XEN:
-+    case VIR_DOMAIN_OSTYPE_XENPVH:
-+    case VIR_DOMAIN_OSTYPE_UML:
-+        virDomainDefParseBootKernelOptions(def, ctxt);
-+
-+        if (virDomainDefParseBootLoaderOptions(def, ctxt) < 0)
-+            return -1;
-+
-+        break;
-+
-+    case VIR_DOMAIN_OSTYPE_EXE:
-+        if (virDomainDefParseBootInitOptions(def, ctxt) < 0)
-+            return -1;
-+
-+        break;
-+
-+    case VIR_DOMAIN_OSTYPE_LINUX:
-+    case VIR_DOMAIN_OSTYPE_LAST:
-+        break;
-     }
- 
-     return 0;
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-conf-use-virXMLFormatElement-in-virDomainFSDefFormat.patch b/SOURCES/libvirt-conf-use-virXMLFormatElement-in-virDomainFSDefFormat.patch
deleted file mode 100644
index 3e5d5df..0000000
--- a/SOURCES/libvirt-conf-use-virXMLFormatElement-in-virDomainFSDefFormat.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From d77f180068dab8747f5e2c098a9c59213ce19108 Mon Sep 17 00:00:00 2001
-Message-Id: <d77f180068dab8747f5e2c098a9c59213ce19108@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:29 +0100
-Subject: [PATCH] conf: use virXMLFormatElement in virDomainFSDefFormat
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the virXMLFormatElement helper to format the driver element
-to simplify adding further sub-elements.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 3efdbae5bf054d1a2bdc98fdccff0273abe54c88)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <966ad0eebcb1ae5f20f59fc6cc84008bbfa6426f.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 16 ++++++----------
- 1 file changed, 6 insertions(+), 10 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 8a5f14d6cb..88117187c8 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -24991,7 +24991,7 @@ virDomainFSDefFormat(virBufferPtr buf,
-     const char *fsdriver = virDomainFSDriverTypeToString(def->fsdriver);
-     const char *wrpolicy = virDomainFSWrpolicyTypeToString(def->wrpolicy);
-     const char *src = def->src->path;
--    g_auto(virBuffer) driverBuf = VIR_BUFFER_INITIALIZER;
-+    g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
- 
-     if (!type) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-@@ -25016,25 +25016,21 @@ virDomainFSDefFormat(virBufferPtr buf,
- 
-     virBufferAdjustIndent(buf, 2);
-     if (def->fsdriver) {
--        virBufferAsprintf(&driverBuf, " type='%s'", fsdriver);
-+        virBufferAsprintf(&driverAttrBuf, " type='%s'", fsdriver);
- 
-         if (def->format)
--            virBufferAsprintf(&driverBuf, " format='%s'",
-+            virBufferAsprintf(&driverAttrBuf, " format='%s'",
-                               virStorageFileFormatTypeToString(def->format));
- 
-         /* Don't generate anything if wrpolicy is set to default */
-         if (def->wrpolicy)
--            virBufferAsprintf(&driverBuf, " wrpolicy='%s'", wrpolicy);
-+            virBufferAsprintf(&driverAttrBuf, " wrpolicy='%s'", wrpolicy);
- 
-     }
- 
--    virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
-+    virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
- 
--    if (virBufferUse(&driverBuf)) {
--        virBufferAddLit(buf, "<driver");
--        virBufferAddBuffer(buf, &driverBuf);
--        virBufferAddLit(buf, "/>\n");
--    }
-+    virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
- 
-     switch (def->type) {
-     case VIR_DOMAIN_FS_TYPE_MOUNT:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-cpu-Change-control-flow-in-virCPUUpdateLive.patch b/SOURCES/libvirt-cpu-Change-control-flow-in-virCPUUpdateLive.patch
deleted file mode 100644
index b4dcabc..0000000
--- a/SOURCES/libvirt-cpu-Change-control-flow-in-virCPUUpdateLive.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 2145d7b6f4370dfcd7dadae7daf544767cde0392 Mon Sep 17 00:00:00 2001
-Message-Id: <2145d7b6f4370dfcd7dadae7daf544767cde0392@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:51 +0200
-Subject: [PATCH] cpu: Change control flow in virCPUUpdateLive
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The updateLive CPU sub-driver function is supposed to be called only for
-a subset of CPU definitions. Let's make it more obvious by turning a
-negative test and return into a positive check.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 68c0b85ecb07c8cefcf4f4a2ffc28e123baa9e8c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1839999
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <2633727669ca50970bd10abe9b045e24b76028d1.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu.c | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
-
-diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
-index ae3a0acc10..1cb2dd04f4 100644
---- a/src/cpu/cpu.c
-+++ b/src/cpu/cpu.c
-@@ -647,13 +647,14 @@ virCPUUpdateLive(virArch arch,
-     if (!driver->updateLive)
-         return 1;
- 
--    if (cpu->mode != VIR_CPU_MODE_CUSTOM)
--        return 1;
-+    if (cpu->mode == VIR_CPU_MODE_CUSTOM) {
-+        if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
-+            return -1;
- 
--    if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
--        return -1;
-+        return 0;
-+    }
- 
--    return 0;
-+    return 1;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu-Honor-check-full-for-host-passthrough-CPUs.patch b/SOURCES/libvirt-cpu-Honor-check-full-for-host-passthrough-CPUs.patch
deleted file mode 100644
index ff0dbcf..0000000
--- a/SOURCES/libvirt-cpu-Honor-check-full-for-host-passthrough-CPUs.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 781e82d0330afe60ab1c366e43dfe8292fcf68eb Mon Sep 17 00:00:00 2001
-Message-Id: <781e82d0330afe60ab1c366e43dfe8292fcf68eb@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:53 +0200
-Subject: [PATCH] cpu: Honor check='full' for host-passthrough CPUs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The check attribute was completely ignored for host-passthrough CPUs
-even if they explicitly requested some features to be enabled. For
-example, a domain with the following CPU definition
-
-  <cpu mode='host-passthrough' check='full'>
-    <feature policy='require' name='svm'/>
-  </cpu>
-
-would happily start even when 'svm' cannot be enabled.
-
-Let's call virCPUArchUpdateLive for host-passthrough CPUs with
-VIR_CPU_CHECK_FULL to make sure the architecture specific code can
-validate the provided virtual CPU against the desired definition.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1515677
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit ac36a824641862dcac057c6403b27ab1e91874f5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1839999
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <b8d30055a0df31c423d6c1832ca0bfbf3eafd222.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu.c     |  3 ++-
- src/cpu/cpu_x86.c | 10 +++++++++-
- 2 files changed, 11 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
-index 1cb2dd04f4..f2a0f560f6 100644
---- a/src/cpu/cpu.c
-+++ b/src/cpu/cpu.c
-@@ -647,7 +647,8 @@ virCPUUpdateLive(virArch arch,
-     if (!driver->updateLive)
-         return 1;
- 
--    if (cpu->mode == VIR_CPU_MODE_CUSTOM) {
-+    if (cpu->mode == VIR_CPU_MODE_CUSTOM ||
-+        cpu->check == VIR_CPU_CHECK_FULL) {
-         if (driver->updateLive(cpu, dataEnabled, dataDisabled) < 0)
-             return -1;
- 
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 9e686a86d2..8c865bdaa4 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -3009,8 +3009,10 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-                     virCPUDataPtr dataEnabled,
-                     virCPUDataPtr dataDisabled)
- {
-+    bool hostPassthrough = cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH;
-     virCPUx86MapPtr map;
-     virCPUx86ModelPtr model = NULL;
-+    virCPUx86ModelPtr modelDisabled = NULL;
-     virCPUx86Data enabled = VIR_CPU_X86_DATA_INIT;
-     virCPUx86Data disabled = VIR_CPU_X86_DATA_INIT;
-     virBuffer bufAdded = VIR_BUFFER_INITIALIZER;
-@@ -3026,6 +3028,10 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-     if (!(model = x86ModelFromCPU(cpu, map, -1)))
-         goto cleanup;
- 
-+    if (hostPassthrough &&
-+        !(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
-+        goto cleanup;
-+
-     if (dataEnabled &&
-         x86DataCopy(&enabled, &dataEnabled->data.x86) < 0)
-         goto cleanup;
-@@ -3040,7 +3046,8 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
- 
-         if (x86DataIsSubset(&model->data, &feature->data))
-             expected = VIR_CPU_FEATURE_REQUIRE;
--        else
-+        else if (!hostPassthrough ||
-+                 x86DataIsSubset(&modelDisabled->data, &feature->data))
-             expected = VIR_CPU_FEATURE_DISABLE;
- 
-         if (expected == VIR_CPU_FEATURE_DISABLE &&
-@@ -3101,6 +3108,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
- 
-  cleanup:
-     x86ModelFree(model);
-+    x86ModelFree(modelDisabled);
-     virCPUx86DataClear(&enabled);
-     virCPUx86DataClear(&disabled);
-     VIR_FREE(added);
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu.c-Check-properly-for-virCapabilitiesGetNodeInfo-retval.patch b/SOURCES/libvirt-cpu.c-Check-properly-for-virCapabilitiesGetNodeInfo-retval.patch
deleted file mode 100644
index df7e1a6..0000000
--- a/SOURCES/libvirt-cpu.c-Check-properly-for-virCapabilitiesGetNodeInfo-retval.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 4b8dbdb81eb6a755dc58b359e65b769ee1dc3f86 Mon Sep 17 00:00:00 2001
-Message-Id: <4b8dbdb81eb6a755dc58b359e65b769ee1dc3f86@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 24 Jan 2020 15:05:49 +0100
-Subject: [PATCH] cpu.c: Check properly for virCapabilitiesGetNodeInfo() retval
-
-The virCapabilitiesGetNodeInfo() function has the usual return
-value semantics for integeres: a negative value means an error,
-zero or a positive value means success. However, the function
-call done in virCPUProbeHost() doesn't check for the return value
-accordingly.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 609acf1f5d5d666148355719346c8ee05f911e33)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1794691
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <033f07f79bc9fa26f669c83f9aa790bfaef25b93.1579874719.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/cpu/cpu.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
-index a2ae5b8c07..d99466472b 100644
---- a/src/cpu/cpu.c
-+++ b/src/cpu/cpu.c
-@@ -455,7 +455,7 @@ virCPUProbeHost(virArch arch)
- {
-     virNodeInfo nodeinfo;
- 
--    if (virCapabilitiesGetNodeInfo(&nodeinfo))
-+    if (virCapabilitiesGetNodeInfo(&nodeinfo) < 0)
-         return NULL;
- 
-     return virCPUGetHost(arch, VIR_CPU_TYPE_HOST, &nodeinfo, NULL);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-cpu_conf-Format-vendor_id-for-host-model-CPUs.patch b/SOURCES/libvirt-cpu_conf-Format-vendor_id-for-host-model-CPUs.patch
deleted file mode 100644
index e088020..0000000
--- a/SOURCES/libvirt-cpu_conf-Format-vendor_id-for-host-model-CPUs.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 37b27a297ecb87e65f41c212aaabde7311b042d6 Mon Sep 17 00:00:00 2001
-Message-Id: <37b27a297ecb87e65f41c212aaabde7311b042d6@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 20 Feb 2020 09:08:05 +0100
-Subject: [PATCH] cpu_conf: Format vendor_id for host-model CPUs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In commit v5.9.0-400-gaf8e39921a I removed printing model's fallback and
-vendor_id attributes when no model is specified. However, vendor_id
-makes sense even without a specific CPU model (for host-model CPUs).
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804549
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 0905f222f1bfd9d741e94a8d653e05bb174846d3)
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <0b46ae9e26d1c7dbaa7f2dd58fd1156db237a853.1582186015.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/cpu_conf.c                                | 14 +++++++++-----
- tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml |  4 +++-
- 2 files changed, 12 insertions(+), 6 deletions(-)
-
-diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
-index 837d77581c..1a2948ce11 100644
---- a/src/conf/cpu_conf.c
-+++ b/src/conf/cpu_conf.c
-@@ -791,10 +791,10 @@ virCPUDefFormatBuf(virBufferPtr buf,
-         return -1;
-     }
- 
--    if (formatModel && def->model) {
-+    if (formatModel && (def->model || def->vendor_id)) {
-         virBufferAddLit(buf, "<model");
- 
--        if (def->type == VIR_CPU_TYPE_GUEST) {
-+        if (def->type == VIR_CPU_TYPE_GUEST && def->model) {
-             const char *fallback;
- 
-             fallback = virCPUFallbackTypeToString(def->fallback);
-@@ -805,11 +805,15 @@ virCPUDefFormatBuf(virBufferPtr buf,
-                 return -1;
-             }
-             virBufferAsprintf(buf, " fallback='%s'", fallback);
--            if (def->vendor_id)
--                virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id);
-         }
- 
--        virBufferEscapeString(buf, ">%s</model>\n", def->model);
-+        if (def->type == VIR_CPU_TYPE_GUEST)
-+            virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id);
-+
-+        if (def->model)
-+            virBufferEscapeString(buf, ">%s</model>\n", def->model);
-+        else
-+            virBufferAddLit(buf, "/>\n");
-     }
- 
-     if (formatModel && def->vendor)
-diff --git a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
-index d2447ccd10..2a7d0246cc 100644
---- a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
-+++ b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
-@@ -8,7 +8,9 @@
-     <type arch='x86_64' machine='pc'>hvm</type>
-     <boot dev='network'/>
-   </os>
--  <cpu mode='host-model' check='partial'/>
-+  <cpu mode='host-model' check='partial'>
-+    <model vendor_id='Libvirt QEMU'/>
-+  </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-   <on_reboot>restart</on_reboot>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-cpu_map-Add-Cooperlake-x86-CPU-model.patch b/SOURCES/libvirt-cpu_map-Add-Cooperlake-x86-CPU-model.patch
deleted file mode 100644
index 45155f5..0000000
--- a/SOURCES/libvirt-cpu_map-Add-Cooperlake-x86-CPU-model.patch
+++ /dev/null
@@ -1,289 +0,0 @@
-From 1c8af21807f2cdaaa24651808f6dfeebfbcf75bb Mon Sep 17 00:00:00 2001
-Message-Id: <1c8af21807f2cdaaa24651808f6dfeebfbcf75bb@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:40 +0200
-Subject: [PATCH] cpu_map: Add Cooperlake x86 CPU model
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The stepping range (10-11) is likely incomplete. QEMU uses 10 and the
-CPUID data for Cooperlake show 11. We will update the range if needed
-once more details about he CPU are available.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-(cherry picked from commit 3944f6855b9d4df73754bb6e5c8023d77399879b)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1781878
-
-Conflicts:
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-            - test data files do not exist downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <62f2fa3e2ecab2026c41e93430b4e2b695c674f0.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/index.xml                         |  1 +
- src/cpu_map/x86_Cooperlake.xml                | 90 +++++++++++++++++++
- .../x86_64-cpuid-Cooperlake-guest.xml         | 13 +--
- .../x86_64-cpuid-Cooperlake-host.xml          | 13 +--
- .../x86_64-cpuid-Cooperlake-json.xml          | 13 +--
- .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml  |  1 +
- tests/domaincapsdata/qemu_5.0.0.x86_64.xml    |  1 +
- 8 files changed, 100 insertions(+), 33 deletions(-)
- create mode 100644 src/cpu_map/x86_Cooperlake.xml
-
-diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
-index 50b030de29..ff1da2e677 100644
---- a/src/cpu_map/index.xml
-+++ b/src/cpu_map/index.xml
-@@ -54,6 +54,7 @@
-     <include filename="x86_Icelake-Client-noTSX.xml"/>
-     <include filename="x86_Icelake-Server.xml"/>
-     <include filename="x86_Icelake-Server-noTSX.xml"/>
-+    <include filename="x86_Cooperlake.xml"/>
- 
-     <!-- AMD CPUs -->
-     <include filename="x86_athlon.xml"/>
-diff --git a/src/cpu_map/x86_Cooperlake.xml b/src/cpu_map/x86_Cooperlake.xml
-new file mode 100644
-index 0000000000..41bd210638
---- /dev/null
-+++ b/src/cpu_map/x86_Cooperlake.xml
-@@ -0,0 +1,90 @@
-+<cpus>
-+  <model name='Cooperlake'>
-+    <decode host='on' guest='on'/>
-+    <signature family='6' model='85' stepping='10-11'/> <!-- 05065b -->
-+    <vendor name='Intel'/>
-+    <feature name="3dnowprefetch"/>
-+    <feature name="abm"/>
-+    <feature name="adx"/>
-+    <feature name="aes"/>
-+    <feature name="apic"/>
-+    <feature name="arat"/>
-+    <feature name="arch-capabilities"/>
-+    <feature name="avx"/>
-+    <feature name="avx2"/>
-+    <feature name="avx512-bf16"/>
-+    <feature name="avx512bw"/>
-+    <feature name="avx512cd"/>
-+    <feature name="avx512dq"/>
-+    <feature name="avx512f"/>
-+    <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="hle"/>
-+    <feature name="ibrs-all"/>
-+    <feature name="invpcid"/>
-+    <feature name="lahf_lm"/>
-+    <feature name="lm"/>
-+    <feature name="mca"/>
-+    <feature name="mce"/>
-+    <feature name="mds-no"/>
-+    <feature name="mmx"/>
-+    <feature name="movbe"/>
-+    <feature name="msr"/>
-+    <feature name="mtrr"/>
-+    <feature name="nx"/>
-+    <feature name="pae"/>
-+    <feature name="pat"/>
-+    <feature name="pcid"/>
-+    <feature name="pclmuldq"/>
-+    <feature name="pdpe1gb"/>
-+    <feature name="pge"/>
-+    <feature name="pku"/>
-+    <feature name="pni"/>
-+    <feature name="popcnt"/>
-+    <feature name="pschange-mc-no"/>
-+    <feature name="pse"/>
-+    <feature name="pse36"/>
-+    <feature name="rdctl-no"/>
-+    <feature name="rdrand"/>
-+    <feature name="rdseed"/>
-+    <feature name="rdtscp"/>
-+    <feature name="rtm"/>
-+    <feature name="sep"/>
-+    <feature name="skip-l1dfl-vmentry"/>
-+    <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="stibp"/>
-+    <feature name="syscall"/>
-+    <feature name="taa-no"/>
-+    <feature name="tsc"/>
-+    <feature name="tsc-deadline"/>
-+    <feature name="vme"/>
-+    <feature name="x2apic"/>
-+    <feature name="xgetbv1"/>
-+    <feature name="xsave"/>
-+    <feature name="xsavec"/>
-+    <feature name="xsaveopt"/>
-+  </model>
-+</cpus>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-index db5598740c..f169458399 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Cascadelake-Server</model>
-+  <model fallback='forbid'>Cooperlake</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ds'/>
-   <feature policy='require' name='acpi'/>
-@@ -20,22 +20,13 @@
-   <feature policy='require' name='osxsave'/>
-   <feature policy='require' name='tsc_adjust'/>
-   <feature policy='require' name='cmt'/>
-+  <feature policy='require' name='mpx'/>
-   <feature policy='require' name='intel-pt'/>
--  <feature policy='require' name='pku'/>
-   <feature policy='require' name='ospke'/>
-   <feature policy='require' name='md-clear'/>
--  <feature policy='require' name='stibp'/>
--  <feature policy='require' name='arch-capabilities'/>
--  <feature policy='require' name='avx512-bf16'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='mbm_total'/>
-   <feature policy='require' name='mbm_local'/>
-   <feature policy='require' name='invtsc'/>
--  <feature policy='require' name='rdctl-no'/>
--  <feature policy='require' name='ibrs-all'/>
--  <feature policy='require' name='skip-l1dfl-vmentry'/>
--  <feature policy='require' name='mds-no'/>
--  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='tsx-ctrl'/>
--  <feature policy='require' name='taa-no'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-index 6926b7c975..b0777181bb 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-@@ -1,6 +1,6 @@
- <cpu>
-   <arch>x86_64</arch>
--  <model>Cascadelake-Server</model>
-+  <model>Cooperlake</model>
-   <vendor>Intel</vendor>
-   <feature name='ds'/>
-   <feature name='acpi'/>
-@@ -21,22 +21,13 @@
-   <feature name='osxsave'/>
-   <feature name='tsc_adjust'/>
-   <feature name='cmt'/>
-+  <feature name='mpx'/>
-   <feature name='intel-pt'/>
--  <feature name='pku'/>
-   <feature name='ospke'/>
-   <feature name='md-clear'/>
--  <feature name='stibp'/>
--  <feature name='arch-capabilities'/>
--  <feature name='avx512-bf16'/>
-   <feature name='xsaves'/>
-   <feature name='mbm_total'/>
-   <feature name='mbm_local'/>
-   <feature name='invtsc'/>
--  <feature name='rdctl-no'/>
--  <feature name='ibrs-all'/>
--  <feature name='skip-l1dfl-vmentry'/>
--  <feature name='mds-no'/>
--  <feature name='pschange-mc-no'/>
-   <feature name='tsx-ctrl'/>
--  <feature name='taa-no'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-index fc52805b2f..fb319d547c 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-@@ -1,24 +1,15 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Cascadelake-Server</model>
-+  <model fallback='forbid'>Cooperlake</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ss'/>
-   <feature policy='require' name='vmx'/>
-   <feature policy='require' name='hypervisor'/>
-   <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='mpx'/>
-   <feature policy='require' name='umip'/>
--  <feature policy='require' name='pku'/>
-   <feature policy='require' name='md-clear'/>
--  <feature policy='require' name='stibp'/>
--  <feature policy='require' name='arch-capabilities'/>
--  <feature policy='require' name='avx512-bf16'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='ibpb'/>
-   <feature policy='require' name='amd-ssbd'/>
--  <feature policy='require' name='rdctl-no'/>
--  <feature policy='require' name='ibrs-all'/>
--  <feature policy='require' name='skip-l1dfl-vmentry'/>
--  <feature policy='require' name='mds-no'/>
--  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='tsx-ctrl'/>
--  <feature policy='require' name='taa-no'/>
- </cpu>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-index b7e2c8a4fe..7bfd786ff6 100644
---- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-@@ -93,6 +93,7 @@
-       <model usable='no'>EPYC-IBPB</model>
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-+      <model usable='no'>Cooperlake</model>
-       <model usable='yes'>Conroe</model>
-       <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-index d634803b29..0a4bb16a89 100644
---- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-@@ -101,6 +101,7 @@
-       <model usable='no'>EPYC-IBPB</model>
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-+      <model usable='no'>Cooperlake</model>
-       <model usable='yes'>Conroe</model>
-       <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-index d2741375b4..d6ee66ab60 100644
---- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-@@ -92,6 +92,7 @@
-       <model usable='no'>EPYC-IBPB</model>
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-+      <model usable='no'>Cooperlake</model>
-       <model usable='yes'>Conroe</model>
-       <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-EPYC-Milan-x86-CPU-model.patch b/SOURCES/libvirt-cpu_map-Add-EPYC-Milan-x86-CPU-model.patch
deleted file mode 100644
index 3257983..0000000
--- a/SOURCES/libvirt-cpu_map-Add-EPYC-Milan-x86-CPU-model.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From b5716d1b191eb52cd88d7b94cb9bf0186f3e427b Mon Sep 17 00:00:00 2001
-Message-Id: <b5716d1b191eb52cd88d7b94cb9bf0186f3e427b@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Wed, 3 Mar 2021 11:11:54 +0100
-Subject: [PATCH] cpu_map: Add EPYC-Milan x86 CPU model
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduced in QEMU 6.0.0 by 623972ceae091b31331ae4a1dc94fe5cbb891937
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit f321a4822e9fa6542e48a78611989ecd9acaa83a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1926864
-
-Conflicts:
-	src/cpu_map/index.xml
-            - context: commit 82bebba1803c63a733e17f5ab2618e020e4abd8d
-              "cpu_map: Unify apostrophe and quotation mark usage" was
-              not backported
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <715abc0f90faafb7daa193dd24bad65046c36de0.1614766279.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/index.xml          |  1 +
- src/cpu_map/x86_EPYC-Milan.xml | 92 ++++++++++++++++++++++++++++++++++
- 2 files changed, 93 insertions(+)
- create mode 100644 src/cpu_map/x86_EPYC-Milan.xml
-
-diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
-index 2f58261e6d..c3dda794b1 100644
---- a/src/cpu_map/index.xml
-+++ b/src/cpu_map/index.xml
-@@ -68,6 +68,7 @@
-     <include filename="x86_EPYC.xml"/>
-     <include filename="x86_EPYC-IBPB.xml"/>
-     <include filename="x86_EPYC-Rome.xml"/>
-+    <include filename='x86_EPYC-Milan.xml'/>
- 
-     <!-- Hygon CPU models -->
-     <include filename="x86_Dhyana.xml"/>
-diff --git a/src/cpu_map/x86_EPYC-Milan.xml b/src/cpu_map/x86_EPYC-Milan.xml
-new file mode 100644
-index 0000000000..53f0cd6aac
---- /dev/null
-+++ b/src/cpu_map/x86_EPYC-Milan.xml
-@@ -0,0 +1,92 @@
-+<cpus>
-+  <model name='EPYC-Milan'>
-+    <decode host='on' guest='on'/>
-+    <signature family='25' model='1'/>
-+    <vendor name='AMD'/>
-+    <feature name='3dnowprefetch'/>
-+    <feature name='abm'/>
-+    <feature name='adx'/>
-+    <feature name='aes'/>
-+    <feature name='amd-ssbd'/>
-+    <feature name='amd-stibp'/>
-+    <feature name='apic'/>
-+    <feature name='arat'/>
-+    <feature name='avx'/>
-+    <feature name='avx2'/>
-+    <feature name='bmi1'/>
-+    <feature name='bmi2'/>
-+    <feature name='clflush'/>
-+    <feature name='clflushopt'/>
-+    <feature name='clwb'/>
-+    <feature name='clzero'/>
-+    <feature name='cmov'/>
-+    <feature name='cr8legacy'/>
-+    <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='fsrm'/>
-+    <feature name='fxsr'/>
-+    <feature name='fxsr_opt'/>
-+    <feature name='ibpb'/>
-+    <feature name='ibrs'/>
-+    <feature name='invpcid'/>
-+    <feature name='lahf_lm'/>
-+    <feature name='lm'/>
-+    <feature name='mca'/>
-+    <feature name='mce'/>
-+    <feature name='misalignsse'/>
-+    <feature name='mmx'/>
-+    <feature name='mmxext'/>
-+    <feature name='movbe'/>
-+    <feature name='msr'/>
-+    <feature name='mtrr'/>
-+    <feature name='npt'/>
-+    <feature name='nrip-save'/>
-+    <feature name='nx'/>
-+    <feature name='osvw'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pcid'/>
-+    <feature name='pclmuldq'/>
-+    <feature name='pdpe1gb'/>
-+    <feature name='perfctr_core'/>
-+    <feature name='pge'/>
-+    <feature name='pku'/>
-+    <feature name='pni'/>
-+    <feature name='popcnt'/>
-+    <feature name='pse'/>
-+    <feature name='pse36'/>
-+    <feature name='rdpid'/>
-+    <feature name='rdrand'/>
-+    <feature name='rdseed'/>
-+    <feature name='rdtscp'/>
-+    <feature name='sep'/>
-+    <feature name='sha-ni'/>
-+    <feature name='smap'/>
-+    <feature name='smep'/>
-+    <feature name='sse'/>
-+    <feature name='sse2'/>
-+    <feature name='sse4.1'/>
-+    <feature name='sse4.2'/>
-+    <feature name='sse4a'/>
-+    <feature name='ssse3'/>
-+    <feature name='svm'/>
-+    <feature name='svme-addr-check'/>
-+    <feature name='syscall'/>
-+    <feature name='tsc'/>
-+    <feature name='umip'/>
-+    <feature name='vme'/>
-+    <feature name='wbnoinvd'/>
-+    <feature name='xgetbv1'/>
-+    <feature name='xsave'/>
-+    <feature name='xsavec'/>
-+    <feature name='xsaveerptr'/>
-+    <feature name='xsaveopt'/>
-+    <feature name='xsaves'/>
-+  </model>
-+</cpus>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Add-decode-element-to-x86-CPU-model-definitions.patch b/SOURCES/libvirt-cpu_map-Add-decode-element-to-x86-CPU-model-definitions.patch
deleted file mode 100644
index 515fa17..0000000
--- a/SOURCES/libvirt-cpu_map-Add-decode-element-to-x86-CPU-model-definitions.patch
+++ /dev/null
@@ -1,749 +0,0 @@
-From 4658a565f5536002c3a65e942eed0d877cd1d070 Mon Sep 17 00:00:00 2001
-Message-Id: <4658a565f5536002c3a65e942eed0d877cd1d070@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:56 +0200
-Subject: [PATCH] cpu_map: Add <decode> element to x86 CPU model definitions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The element specifies whether a particular CPU model can be used when
-creating a CPU definition from raw CPUID/MSR data. The @host attribute
-determines whether the CPU model can be used (host='on') for creating
-CPU definition for host capabilities. Usability of the model for domain
-capabilities and host-model CPU definitions is controlled by the @guest
-attribute.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit f4914045c2bff46b120c6c2af80066d24e48b609)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840008
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <3097db79eff1e45257ef12f891e8f9243bc8580f.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c                             | 43 +++++++++++++++++++
- src/cpu_map/x86_486.xml                       |  1 +
- src/cpu_map/x86_Broadwell-IBRS.xml            |  1 +
- src/cpu_map/x86_Broadwell-noTSX-IBRS.xml      |  1 +
- src/cpu_map/x86_Broadwell-noTSX.xml           |  1 +
- src/cpu_map/x86_Broadwell.xml                 |  1 +
- src/cpu_map/x86_Cascadelake-Server-noTSX.xml  |  1 +
- src/cpu_map/x86_Cascadelake-Server.xml        |  1 +
- src/cpu_map/x86_Conroe.xml                    |  1 +
- src/cpu_map/x86_Dhyana.xml                    |  1 +
- src/cpu_map/x86_EPYC-IBPB.xml                 |  1 +
- src/cpu_map/x86_EPYC.xml                      |  1 +
- src/cpu_map/x86_Haswell-IBRS.xml              |  1 +
- src/cpu_map/x86_Haswell-noTSX-IBRS.xml        |  1 +
- src/cpu_map/x86_Haswell-noTSX.xml             |  1 +
- src/cpu_map/x86_Haswell.xml                   |  1 +
- src/cpu_map/x86_Icelake-Client-noTSX.xml      |  1 +
- src/cpu_map/x86_Icelake-Client.xml            |  1 +
- src/cpu_map/x86_Icelake-Server-noTSX.xml      |  1 +
- src/cpu_map/x86_Icelake-Server.xml            |  1 +
- src/cpu_map/x86_IvyBridge-IBRS.xml            |  1 +
- src/cpu_map/x86_IvyBridge.xml                 |  1 +
- src/cpu_map/x86_Nehalem-IBRS.xml              |  1 +
- src/cpu_map/x86_Nehalem.xml                   |  1 +
- src/cpu_map/x86_Opteron_G1.xml                |  1 +
- src/cpu_map/x86_Opteron_G2.xml                |  1 +
- src/cpu_map/x86_Opteron_G3.xml                |  1 +
- src/cpu_map/x86_Opteron_G4.xml                |  1 +
- src/cpu_map/x86_Opteron_G5.xml                |  1 +
- src/cpu_map/x86_Penryn.xml                    |  1 +
- src/cpu_map/x86_SandyBridge-IBRS.xml          |  1 +
- src/cpu_map/x86_SandyBridge.xml               |  1 +
- src/cpu_map/x86_Skylake-Client-IBRS.xml       |  1 +
- src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml |  1 +
- src/cpu_map/x86_Skylake-Client.xml            |  1 +
- src/cpu_map/x86_Skylake-Server-IBRS.xml       |  1 +
- src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml |  1 +
- src/cpu_map/x86_Skylake-Server.xml            |  1 +
- src/cpu_map/x86_Westmere-IBRS.xml             |  1 +
- src/cpu_map/x86_Westmere.xml                  |  1 +
- src/cpu_map/x86_athlon.xml                    |  1 +
- src/cpu_map/x86_core2duo.xml                  |  1 +
- src/cpu_map/x86_coreduo.xml                   |  1 +
- src/cpu_map/x86_cpu64-rhel5.xml               |  1 +
- src/cpu_map/x86_cpu64-rhel6.xml               |  1 +
- src/cpu_map/x86_kvm32.xml                     |  1 +
- src/cpu_map/x86_kvm64.xml                     |  1 +
- src/cpu_map/x86_n270.xml                      |  1 +
- src/cpu_map/x86_pentium.xml                   |  1 +
- src/cpu_map/x86_pentium2.xml                  |  1 +
- src/cpu_map/x86_pentium3.xml                  |  1 +
- src/cpu_map/x86_pentiumpro.xml                |  1 +
- src/cpu_map/x86_phenom.xml                    |  1 +
- src/cpu_map/x86_qemu32.xml                    |  1 +
- src/cpu_map/x86_qemu64.xml                    |  1 +
- 55 files changed, 97 insertions(+)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 8c865bdaa4..7fbb4c9a6c 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -125,6 +125,8 @@ typedef struct _virCPUx86Model virCPUx86Model;
- typedef virCPUx86Model *virCPUx86ModelPtr;
- struct _virCPUx86Model {
-     char *name;
-+    bool decodeHost;
-+    bool decodeGuest;
-     virCPUx86VendorPtr vendor;
-     size_t nsignatures;
-     uint32_t *signatures;
-@@ -1347,6 +1349,44 @@ x86ModelCompare(virCPUx86ModelPtr model1,
- }
- 
- 
-+static int
-+x86ModelParseDecode(virCPUx86ModelPtr model,
-+                    xmlXPathContextPtr ctxt)
-+{
-+    g_autofree char *host = NULL;
-+    g_autofree char *guest = NULL;
-+    int val;
-+
-+    if ((host = virXPathString("string(./decode/@host)", ctxt)))
-+        val = virTristateSwitchTypeFromString(host);
-+    else
-+        val = VIR_TRISTATE_SWITCH_ABSENT;
-+
-+    if (val <= 0) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("invalid or missing decode/host attribute in CPU model %s"),
-+                       model->name);
-+        return -1;
-+    }
-+    model->decodeHost = val == VIR_TRISTATE_SWITCH_ON;
-+
-+    if ((guest = virXPathString("string(./decode/@guest)", ctxt)))
-+        val = virTristateSwitchTypeFromString(guest);
-+    else
-+        val = VIR_TRISTATE_SWITCH_ABSENT;
-+
-+    if (val <= 0) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("invalid or missing decode/guest attribute in CPU model %s"),
-+                       model->name);
-+        return -1;
-+    }
-+    model->decodeGuest = val == VIR_TRISTATE_SWITCH_ON;
-+
-+    return 0;
-+}
-+
-+
- static int
- x86ModelParseAncestor(virCPUx86ModelPtr model,
-                       xmlXPathContextPtr ctxt,
-@@ -1521,6 +1561,9 @@ x86ModelParse(xmlXPathContextPtr ctxt,
- 
-     model->name = g_strdup(name);
- 
-+    if (x86ModelParseDecode(model, ctxt) < 0)
-+        goto cleanup;
-+
-     if (x86ModelParseAncestor(model, ctxt, map) < 0)
-         goto cleanup;
- 
-diff --git a/src/cpu_map/x86_486.xml b/src/cpu_map/x86_486.xml
-index 61fa3797e8..d05b277392 100644
---- a/src/cpu_map/x86_486.xml
-+++ b/src/cpu_map/x86_486.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='486'>
-+    <decode host='on' guest='on'/>
-     <feature name='fpu'/>
-     <feature name='pse'/>
-     <feature name='vme'/>
-diff --git a/src/cpu_map/x86_Broadwell-IBRS.xml b/src/cpu_map/x86_Broadwell-IBRS.xml
-index 4600cacec0..9033d5fcd5 100644
---- a/src/cpu_map/x86_Broadwell-IBRS.xml
-+++ b/src/cpu_map/x86_Broadwell-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Broadwell-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='61'/> <!-- 0306d0 -->
-     <signature family='6' model='71'/> <!-- 040670 -->
-     <signature family='6' model='79'/> <!-- 0406f0 -->
-diff --git a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
-index b3fc0b726a..c044b60e36 100644
---- a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Broadwell-noTSX-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='61'/> <!-- 0306d0 -->
-     <signature family='6' model='71'/> <!-- 040670 -->
-     <signature family='6' model='79'/> <!-- 0406f0 -->
-diff --git a/src/cpu_map/x86_Broadwell-noTSX.xml b/src/cpu_map/x86_Broadwell-noTSX.xml
-index ad932d0853..637f29ba1c 100644
---- a/src/cpu_map/x86_Broadwell-noTSX.xml
-+++ b/src/cpu_map/x86_Broadwell-noTSX.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Broadwell-noTSX'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='61'/> <!-- 0306d0 -->
-     <signature family='6' model='71'/> <!-- 040670 -->
-     <signature family='6' model='79'/> <!-- 0406f0 -->
-diff --git a/src/cpu_map/x86_Broadwell.xml b/src/cpu_map/x86_Broadwell.xml
-index 6de9227322..82939a4509 100644
---- a/src/cpu_map/x86_Broadwell.xml
-+++ b/src/cpu_map/x86_Broadwell.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Broadwell'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='61'/> <!-- 0306d0 -->
-     <signature family='6' model='71'/> <!-- 040670 -->
-     <signature family='6' model='79'/> <!-- 0406f0 -->
-diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-index d24415ebce..5adea664e9 100644
---- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Cascadelake-Server-noTSX'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
-index b69ac198b6..d7ec42f57e 100644
---- a/src/cpu_map/x86_Cascadelake-Server.xml
-+++ b/src/cpu_map/x86_Cascadelake-Server.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Cascadelake-Server'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Conroe.xml b/src/cpu_map/x86_Conroe.xml
-index 89fe0ad2cf..4cacee6142 100644
---- a/src/cpu_map/x86_Conroe.xml
-+++ b/src/cpu_map/x86_Conroe.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Conroe'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='15'/> <!-- 0006f0 -->
-     <signature family='6' model='22'/> <!-- 010660 -->
-     <vendor name='Intel'/>
-diff --git a/src/cpu_map/x86_Dhyana.xml b/src/cpu_map/x86_Dhyana.xml
-index cbc8020a94..689daf8649 100644
---- a/src/cpu_map/x86_Dhyana.xml
-+++ b/src/cpu_map/x86_Dhyana.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Dhyana'>
-+    <decode host='on' guest='on'/>
-     <signature family='24' model='0'/> <!-- 900f00 -->
-     <vendor name='Hygon'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_EPYC-IBPB.xml b/src/cpu_map/x86_EPYC-IBPB.xml
-index 283697ebd1..983c5f4445 100644
---- a/src/cpu_map/x86_EPYC-IBPB.xml
-+++ b/src/cpu_map/x86_EPYC-IBPB.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='EPYC-IBPB'>
-+    <decode host='on' guest='on'/>
-     <signature family='23' model='1'/> <!-- 800f10 -->
-     <vendor name='AMD'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_EPYC.xml b/src/cpu_map/x86_EPYC.xml
-index f0601392fd..3ebba9f4ed 100644
---- a/src/cpu_map/x86_EPYC.xml
-+++ b/src/cpu_map/x86_EPYC.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='EPYC'>
-+    <decode host='on' guest='on'/>
-     <signature family='23' model='1'/> <!-- 800f10 -->
-     <vendor name='AMD'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Haswell-IBRS.xml b/src/cpu_map/x86_Haswell-IBRS.xml
-index 4f86db838f..0ffe2bae0d 100644
---- a/src/cpu_map/x86_Haswell-IBRS.xml
-+++ b/src/cpu_map/x86_Haswell-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Haswell-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='60'/> <!-- 0306c0 -->
-     <signature family='6' model='63'/> <!-- 0306f0 -->
-     <signature family='6' model='69'/> <!-- 040650 -->
-diff --git a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
-index 47318be6d5..75d709c009 100644
---- a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Haswell-noTSX-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='60'/> <!-- 0306c0 -->
-     <signature family='6' model='63'/> <!-- 0306f0 -->
-     <signature family='6' model='69'/> <!-- 040650 -->
-diff --git a/src/cpu_map/x86_Haswell-noTSX.xml b/src/cpu_map/x86_Haswell-noTSX.xml
-index efd10c47de..b0a0faa856 100644
---- a/src/cpu_map/x86_Haswell-noTSX.xml
-+++ b/src/cpu_map/x86_Haswell-noTSX.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Haswell-noTSX'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='60'/> <!-- 0306c0 -->
-     <signature family='6' model='63'/> <!-- 0306f0 -->
-     <signature family='6' model='69'/> <!-- 040650 -->
-diff --git a/src/cpu_map/x86_Haswell.xml b/src/cpu_map/x86_Haswell.xml
-index ac358d7967..ee16b30f19 100644
---- a/src/cpu_map/x86_Haswell.xml
-+++ b/src/cpu_map/x86_Haswell.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Haswell'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='60'/> <!-- 0306c0 -->
-     <signature family='6' model='63'/> <!-- 0306f0 -->
-     <signature family='6' model='69'/> <!-- 040650 -->
-diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
-index cd51881f40..540732af6f 100644
---- a/src/cpu_map/x86_Icelake-Client-noTSX.xml
-+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Icelake-Client-noTSX'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='126'/> <!-- 0706e0 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Icelake-Client.xml b/src/cpu_map/x86_Icelake-Client.xml
-index fbd53bbe11..5cf32e91fa 100644
---- a/src/cpu_map/x86_Icelake-Client.xml
-+++ b/src/cpu_map/x86_Icelake-Client.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Icelake-Client'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='126'/> <!-- 0706e0 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-index 538c656712..5a53da23c7 100644
---- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
-+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Icelake-Server-noTSX'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='134'/> <!-- 080660 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml
-index a565371977..367ade7240 100644
---- a/src/cpu_map/x86_Icelake-Server.xml
-+++ b/src/cpu_map/x86_Icelake-Server.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Icelake-Server'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='134'/> <!-- 080660 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_IvyBridge-IBRS.xml b/src/cpu_map/x86_IvyBridge-IBRS.xml
-index e0f2adfa82..430bc3232d 100644
---- a/src/cpu_map/x86_IvyBridge-IBRS.xml
-+++ b/src/cpu_map/x86_IvyBridge-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='IvyBridge-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='58'/> <!-- 0306a0 -->
-     <signature family='6' model='62'/> <!-- 0306e0 -->
-     <vendor name='Intel'/>
-diff --git a/src/cpu_map/x86_IvyBridge.xml b/src/cpu_map/x86_IvyBridge.xml
-index 16213dbc62..eaf5d02e82 100644
---- a/src/cpu_map/x86_IvyBridge.xml
-+++ b/src/cpu_map/x86_IvyBridge.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='IvyBridge'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='58'/> <!-- 0306a0 -->
-     <signature family='6' model='62'/> <!-- 0306e0 -->
-     <vendor name='Intel'/>
-diff --git a/src/cpu_map/x86_Nehalem-IBRS.xml b/src/cpu_map/x86_Nehalem-IBRS.xml
-index 8cc19eff03..00d0d2fe51 100644
---- a/src/cpu_map/x86_Nehalem-IBRS.xml
-+++ b/src/cpu_map/x86_Nehalem-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Nehalem-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='26'/> <!-- 0106a0 -->
-     <signature family='6' model='30'/> <!-- 0106e0 -->
-     <signature family='6' model='31'/> <!-- 0106f0 -->
-diff --git a/src/cpu_map/x86_Nehalem.xml b/src/cpu_map/x86_Nehalem.xml
-index 530e5e8a0d..9968001fe7 100644
---- a/src/cpu_map/x86_Nehalem.xml
-+++ b/src/cpu_map/x86_Nehalem.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Nehalem'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='26'/> <!-- 0106a0 -->
-     <signature family='6' model='30'/> <!-- 0106e0 -->
-     <signature family='6' model='31'/> <!-- 0106f0 -->
-diff --git a/src/cpu_map/x86_Opteron_G1.xml b/src/cpu_map/x86_Opteron_G1.xml
-index 73cf1de71e..57648ca93f 100644
---- a/src/cpu_map/x86_Opteron_G1.xml
-+++ b/src/cpu_map/x86_Opteron_G1.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Opteron_G1'>
-+    <decode host='on' guest='on'/>
-     <signature family='15' model='6'/> <!-- 100e60 -->
-     <vendor name='AMD'/>
-     <feature name='apic'/>
-diff --git a/src/cpu_map/x86_Opteron_G2.xml b/src/cpu_map/x86_Opteron_G2.xml
-index 342105730e..db961b0067 100644
---- a/src/cpu_map/x86_Opteron_G2.xml
-+++ b/src/cpu_map/x86_Opteron_G2.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Opteron_G2'>
-+    <decode host='on' guest='on'/>
-     <signature family='15' model='6'/> <!-- 100e60 -->
-     <vendor name='AMD'/>
-     <feature name='apic'/>
-diff --git a/src/cpu_map/x86_Opteron_G3.xml b/src/cpu_map/x86_Opteron_G3.xml
-index 7fbf8ac9e9..dab59d4f82 100644
---- a/src/cpu_map/x86_Opteron_G3.xml
-+++ b/src/cpu_map/x86_Opteron_G3.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Opteron_G3'>
-+    <decode host='on' guest='on'/>
-     <signature family='15' model='6'/> <!-- 100e60 -->
-     <vendor name='AMD'/>
-     <feature name='abm'/>
-diff --git a/src/cpu_map/x86_Opteron_G4.xml b/src/cpu_map/x86_Opteron_G4.xml
-index 463b3676a0..a7fc8d5828 100644
---- a/src/cpu_map/x86_Opteron_G4.xml
-+++ b/src/cpu_map/x86_Opteron_G4.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Opteron_G4'>
-+    <decode host='on' guest='on'/>
-     <signature family='21' model='1'/> <!-- 600f10 -->
-     <vendor name='AMD'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Opteron_G5.xml b/src/cpu_map/x86_Opteron_G5.xml
-index 0f8fe32c87..ff775bdcef 100644
---- a/src/cpu_map/x86_Opteron_G5.xml
-+++ b/src/cpu_map/x86_Opteron_G5.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Opteron_G5'>
-+    <decode host='on' guest='on'/>
-     <signature family='21' model='2'/> <!-- 600f20 -->
-     <vendor name='AMD'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Penryn.xml b/src/cpu_map/x86_Penryn.xml
-index 279bb05570..29d4cd635b 100644
---- a/src/cpu_map/x86_Penryn.xml
-+++ b/src/cpu_map/x86_Penryn.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Penryn'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='23'/> <!-- 010670 -->
-     <signature family='6' model='29'/> <!-- 0106d0 -->
-     <vendor name='Intel'/>
-diff --git a/src/cpu_map/x86_SandyBridge-IBRS.xml b/src/cpu_map/x86_SandyBridge-IBRS.xml
-index 7d1342ec6f..fbdb4f2bf6 100644
---- a/src/cpu_map/x86_SandyBridge-IBRS.xml
-+++ b/src/cpu_map/x86_SandyBridge-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='SandyBridge-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='42'/> <!-- 0206a0 -->
-     <signature family='6' model='45'/> <!-- 0206d0 -->
-     <vendor name='Intel'/>
-diff --git a/src/cpu_map/x86_SandyBridge.xml b/src/cpu_map/x86_SandyBridge.xml
-index 48e4ac8082..7c85ed42df 100644
---- a/src/cpu_map/x86_SandyBridge.xml
-+++ b/src/cpu_map/x86_SandyBridge.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='SandyBridge'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='42'/> <!-- 0206a0 -->
-     <signature family='6' model='45'/> <!-- 0206d0 -->
-     <vendor name='Intel'/>
-diff --git a/src/cpu_map/x86_Skylake-Client-IBRS.xml b/src/cpu_map/x86_Skylake-Client-IBRS.xml
-index 4440313fc4..5709e7c2f9 100644
---- a/src/cpu_map/x86_Skylake-Client-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Client-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Skylake-Client-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='94'/> <!-- 0506e0 -->
-     <signature family='6' model='78'/> <!-- 0406e0 -->
-     <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
-diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-index 3d2976692f..0c2f1e6ac4 100644
---- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Skylake-Client-noTSX-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='94'/> <!-- 0506e0 -->
-     <signature family='6' model='78'/> <!-- 0406e0 -->
-     <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
-diff --git a/src/cpu_map/x86_Skylake-Client.xml b/src/cpu_map/x86_Skylake-Client.xml
-index 1053fa4a04..14cd57e176 100644
---- a/src/cpu_map/x86_Skylake-Client.xml
-+++ b/src/cpu_map/x86_Skylake-Client.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Skylake-Client'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='94'/> <!-- 0506e0 -->
-     <signature family='6' model='78'/> <!-- 0406e0 -->
-     <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
-diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
-index 71179f9f74..bd6b6457ad 100644
---- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Skylake-Server-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-index 455a072119..91a206f575 100644
---- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Skylake-Server-noTSX-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
-index 2da69e0dfc..f96875a85f 100644
---- a/src/cpu_map/x86_Skylake-Server.xml
-+++ b/src/cpu_map/x86_Skylake-Server.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Skylake-Server'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Westmere-IBRS.xml b/src/cpu_map/x86_Westmere-IBRS.xml
-index 3baf56f47a..c7898f0c22 100644
---- a/src/cpu_map/x86_Westmere-IBRS.xml
-+++ b/src/cpu_map/x86_Westmere-IBRS.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Westmere-IBRS'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='44'/> <!-- 0206c0 -->
-     <vendor name='Intel'/>
-     <feature name='aes'/>
-diff --git a/src/cpu_map/x86_Westmere.xml b/src/cpu_map/x86_Westmere.xml
-index 95c1d690c8..16e4ad6c30 100644
---- a/src/cpu_map/x86_Westmere.xml
-+++ b/src/cpu_map/x86_Westmere.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='Westmere'>
-+    <decode host='on' guest='on'/>
-     <signature family='6' model='44'/> <!-- 0206c0 -->
-     <signature family='6' model='47'/> <!-- 0206f0 -->
-     <signature family='6' model='37'/> <!-- 020650 -->
-diff --git a/src/cpu_map/x86_athlon.xml b/src/cpu_map/x86_athlon.xml
-index 0d44508e20..81c43c81e8 100644
---- a/src/cpu_map/x86_athlon.xml
-+++ b/src/cpu_map/x86_athlon.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='athlon'>
-+    <decode host='on' guest='on'/>
-     <vendor name='AMD'/>
-     <feature name='3dnow'/>
-     <feature name='3dnowext'/>
-diff --git a/src/cpu_map/x86_core2duo.xml b/src/cpu_map/x86_core2duo.xml
-index 3c9a148f3c..412039fe55 100644
---- a/src/cpu_map/x86_core2duo.xml
-+++ b/src/cpu_map/x86_core2duo.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='core2duo'>
-+    <decode host='on' guest='on'/>
-     <vendor name='Intel'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-diff --git a/src/cpu_map/x86_coreduo.xml b/src/cpu_map/x86_coreduo.xml
-index 676e846920..e2fda9a1d4 100644
---- a/src/cpu_map/x86_coreduo.xml
-+++ b/src/cpu_map/x86_coreduo.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='coreduo'>
-+    <decode host='on' guest='on'/>
-     <vendor name='Intel'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-diff --git a/src/cpu_map/x86_cpu64-rhel5.xml b/src/cpu_map/x86_cpu64-rhel5.xml
-index 670a92f274..be6bcdb7a6 100644
---- a/src/cpu_map/x86_cpu64-rhel5.xml
-+++ b/src/cpu_map/x86_cpu64-rhel5.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='cpu64-rhel5'>
-+    <decode host='on' guest='on'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-     <feature name='cmov'/>
-diff --git a/src/cpu_map/x86_cpu64-rhel6.xml b/src/cpu_map/x86_cpu64-rhel6.xml
-index 3cae0f00c2..c62b1b5575 100644
---- a/src/cpu_map/x86_cpu64-rhel6.xml
-+++ b/src/cpu_map/x86_cpu64-rhel6.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='cpu64-rhel6'>
-+    <decode host='on' guest='on'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-     <feature name='cmov'/>
-diff --git a/src/cpu_map/x86_kvm32.xml b/src/cpu_map/x86_kvm32.xml
-index 5f08a5e7fc..9dd96d5b56 100644
---- a/src/cpu_map/x86_kvm32.xml
-+++ b/src/cpu_map/x86_kvm32.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='kvm32'>
-+    <decode host='on' guest='on'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-     <feature name='cmov'/>
-diff --git a/src/cpu_map/x86_kvm64.xml b/src/cpu_map/x86_kvm64.xml
-index 80b24e2a49..185af06f78 100644
---- a/src/cpu_map/x86_kvm64.xml
-+++ b/src/cpu_map/x86_kvm64.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='kvm64'>
-+    <decode host='on' guest='on'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-     <feature name='cmov'/>
-diff --git a/src/cpu_map/x86_n270.xml b/src/cpu_map/x86_n270.xml
-index cb359d968e..5507d2ea3b 100644
---- a/src/cpu_map/x86_n270.xml
-+++ b/src/cpu_map/x86_n270.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='n270'>
-+    <decode host='on' guest='on'/>
-     <vendor name='Intel'/>
-     <feature name='apic'/>
-     <feature name='clflush'/>
-diff --git a/src/cpu_map/x86_pentium.xml b/src/cpu_map/x86_pentium.xml
-index d44c1399b0..f0a8982115 100644
---- a/src/cpu_map/x86_pentium.xml
-+++ b/src/cpu_map/x86_pentium.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='pentium'>
-+    <decode host='on' guest='on'/>
-     <feature name='cx8'/>
-     <feature name='de'/>
-     <feature name='fpu'/>
-diff --git a/src/cpu_map/x86_pentium2.xml b/src/cpu_map/x86_pentium2.xml
-index 0d772bad2f..aeba082297 100644
---- a/src/cpu_map/x86_pentium2.xml
-+++ b/src/cpu_map/x86_pentium2.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='pentium2'>
-+    <decode host='on' guest='on'/>
-     <feature name='cmov'/>
-     <feature name='cx8'/>
-     <feature name='de'/>
-diff --git a/src/cpu_map/x86_pentium3.xml b/src/cpu_map/x86_pentium3.xml
-index 24eb227c28..ab85d2967f 100644
---- a/src/cpu_map/x86_pentium3.xml
-+++ b/src/cpu_map/x86_pentium3.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='pentium3'>
-+    <decode host='on' guest='on'/>
-     <feature name='cmov'/>
-     <feature name='cx8'/>
-     <feature name='de'/>
-diff --git a/src/cpu_map/x86_pentiumpro.xml b/src/cpu_map/x86_pentiumpro.xml
-index 9f7a610a87..b6e061187c 100644
---- a/src/cpu_map/x86_pentiumpro.xml
-+++ b/src/cpu_map/x86_pentiumpro.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='pentiumpro'>
-+    <decode host='on' guest='on'/>
-     <feature name='apic'/>
-     <feature name='cmov'/>
-     <feature name='cx8'/>
-diff --git a/src/cpu_map/x86_phenom.xml b/src/cpu_map/x86_phenom.xml
-index 71f004057b..f0f8ece57a 100644
---- a/src/cpu_map/x86_phenom.xml
-+++ b/src/cpu_map/x86_phenom.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='phenom'>
-+    <decode host='on' guest='on'/>
-     <vendor name='AMD'/>
-     <feature name='3dnow'/>
-     <feature name='3dnowext'/>
-diff --git a/src/cpu_map/x86_qemu32.xml b/src/cpu_map/x86_qemu32.xml
-index 3c9cdec981..f3fb1959be 100644
---- a/src/cpu_map/x86_qemu32.xml
-+++ b/src/cpu_map/x86_qemu32.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='qemu32'>
-+    <decode host='on' guest='on'/>
-     <feature name='apic'/>
-     <feature name='cmov'/>
-     <feature name='cx8'/>
-diff --git a/src/cpu_map/x86_qemu64.xml b/src/cpu_map/x86_qemu64.xml
-index a8e8dfe58d..0fe207a2b4 100644
---- a/src/cpu_map/x86_qemu64.xml
-+++ b/src/cpu_map/x86_qemu64.xml
-@@ -1,5 +1,6 @@
- <cpus>
-   <model name='qemu64'>
-+    <decode host='on' guest='on'/>
-     <!-- These are supported only by TCG.  KVM supports them only if the
-          host does.  So we leave them out:
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-missing-AMD-SVM-features.patch b/SOURCES/libvirt-cpu_map-Add-missing-AMD-SVM-features.patch
deleted file mode 100644
index b907c79..0000000
--- a/SOURCES/libvirt-cpu_map-Add-missing-AMD-SVM-features.patch
+++ /dev/null
@@ -1,896 +0,0 @@
-From 5936216b6e32392d785979bfd6ccafc5174ec519 Mon Sep 17 00:00:00 2001
-Message-Id: <5936216b6e32392d785979bfd6ccafc5174ec519@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 8 Oct 2020 18:01:23 +0200
-Subject: [PATCH] cpu_map: Add missing AMD SVM features
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 96a39aad705f8e37950109d11636085b212af790)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861506
-
-Conflicts:
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-disabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-            - not present downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <d55a2ddfc9aefcc833d3a370c7d70dfb2c0b7554.1602172344.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_features.xml                  | 32 +++++++++++++++++++
- .../x86_64-cpuid-A10-5800K-disabled.xml       |  1 +
- .../x86_64-cpuid-A10-5800K-enabled.xml        |  1 +
- .../x86_64-cpuid-A10-5800K-guest.xml          | 10 ++++++
- .../x86_64-cpuid-A10-5800K-host.xml           | 10 ++++++
- .../x86_64-cpuid-A10-5800K-json.xml           |  2 ++
- ...86_64-cpuid-EPYC-7601-32-Core-disabled.xml |  1 +
- ...x86_64-cpuid-EPYC-7601-32-Core-enabled.xml |  1 +
- .../x86_64-cpuid-EPYC-7601-32-Core-guest.xml  | 10 ++++++
- .../x86_64-cpuid-EPYC-7601-32-Core-host.xml   | 10 ++++++
- ...-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml |  1 +
- ...4-cpuid-EPYC-7601-32-Core-ibpb-enabled.xml |  1 +
- ..._64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml | 10 ++++++
- ...6_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml | 10 ++++++
- ...6_64-cpuid-EPYC-7601-32-Core-ibpb-json.xml |  2 ++
- .../x86_64-cpuid-EPYC-7601-32-Core-json.xml   |  2 ++
- .../x86_64-cpuid-FX-8150-guest.xml            | 10 ++++++
- .../cputestdata/x86_64-cpuid-FX-8150-host.xml | 10 ++++++
- ...-cpuid-Hygon-C86-7185-32-core-disabled.xml |  1 +
- ...4-cpuid-Hygon-C86-7185-32-core-enabled.xml |  1 +
- ..._64-cpuid-Hygon-C86-7185-32-core-guest.xml | 10 ++++++
- ...6_64-cpuid-Hygon-C86-7185-32-core-host.xml | 10 ++++++
- ...6_64-cpuid-Hygon-C86-7185-32-core-json.xml |  2 ++
- .../x86_64-cpuid-Opteron-1352-guest.xml       |  3 ++
- .../x86_64-cpuid-Opteron-1352-host.xml        |  3 ++
- .../x86_64-cpuid-Opteron-2350-disabled.xml    |  1 +
- .../x86_64-cpuid-Opteron-2350-enabled.xml     |  1 +
- .../x86_64-cpuid-Opteron-2350-guest.xml       |  3 ++
- .../x86_64-cpuid-Opteron-2350-host.xml        |  3 ++
- .../x86_64-cpuid-Opteron-2350-json.xml        |  1 +
- .../x86_64-cpuid-Opteron-6234-disabled.xml    |  1 +
- .../x86_64-cpuid-Opteron-6234-enabled.xml     |  1 +
- .../x86_64-cpuid-Opteron-6234-guest.xml       | 10 ++++++
- .../x86_64-cpuid-Opteron-6234-host.xml        | 10 ++++++
- .../x86_64-cpuid-Opteron-6234-json.xml        |  2 ++
- .../x86_64-cpuid-Opteron-6282-guest.xml       | 10 ++++++
- .../x86_64-cpuid-Opteron-6282-host.xml        | 10 ++++++
- .../x86_64-cpuid-Phenom-B95-disabled.xml      |  1 +
- .../x86_64-cpuid-Phenom-B95-enabled.xml       |  1 +
- .../x86_64-cpuid-Phenom-B95-guest.xml         |  4 +++
- .../x86_64-cpuid-Phenom-B95-host.xml          |  4 +++
- .../x86_64-cpuid-Phenom-B95-json.xml          |  2 ++
- ...puid-Ryzen-7-1800X-Eight-Core-disabled.xml |  1 +
- ...cpuid-Ryzen-7-1800X-Eight-Core-enabled.xml |  1 +
- ...4-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml | 10 ++++++
- ...64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml | 10 ++++++
- ...64-cpuid-Ryzen-7-1800X-Eight-Core-json.xml |  2 ++
- .../domaincapsdata/qemu_3.0.0-tcg.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_3.1.0-tcg.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_4.0.0-tcg.x86_64.xml  |  2 ++
- .../domaincapsdata/qemu_4.1.0-tcg.x86_64.xml  |  2 ++
- .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml  |  2 ++
- .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml  |  2 ++
- .../cpu-host-model-cmt.x86_64-4.0.0.args      |  6 ++--
- 54 files changed, 256 insertions(+), 3 deletions(-)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 5265b2989b..30d1375437 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -508,6 +508,38 @@
-     <cpuid eax_in='0x80000008' ebx='0x04000000'/>
-   </feature>
- 
-+  <!-- SVM features -->
-+  <feature name='npt'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000001'/>
-+  </feature>
-+  <feature name='lbrv'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000002'/>
-+  </feature>
-+  <feature name='svm-lock'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000004'/>
-+  </feature>
-+  <feature name='nrip-save'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000008'/>
-+  </feature>
-+  <feature name='tsc-scale'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000010'/>
-+  </feature>
-+  <feature name='vmcb-clean'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000020'/>
-+  </feature>
-+  <feature name='flushbyasid'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000040'/>
-+  </feature>
-+  <feature name='decodeassists'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000080'/>
-+  </feature>
-+  <feature name='pause-filter'>
-+    <cpuid eax_in='0x8000000a' edx='0x00000400'/>
-+  </feature>
-+  <feature name='pfthreshold'>
-+    <cpuid eax_in='0x8000000a' edx='0x00001000'/>
-+  </feature>
-+
-   <!-- IA32_ARCH_CAPABILITIES features -->
-   <feature name='rdctl-no'>
-     <msr index='0x10a' edx='0x00000000' eax='0x00000001'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K-disabled.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-disabled.xml
-index 6ed5b3573b..3bacf2cf95 100644
---- a/tests/cputestdata/x86_64-cpuid-A10-5800K-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-A10-5800K-disabled.xml
-@@ -3,4 +3,5 @@
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x08000008' edx='0x10000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01cab40c' edx='0x08000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K-enabled.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-enabled.xml
-index 5cae0b7130..f6afbe2cb3 100644
---- a/tests/cputestdata/x86_64-cpuid-A10-5800K-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-A10-5800K-enabled.xml
-@@ -3,4 +3,5 @@
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xb6b83203' edx='0x078bfbff'/>
-   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x0000000a' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00210bf3' edx='0x26500800'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K-guest.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-guest.xml
-index 98a95e1c41..8401e53d30 100644
---- a/tests/cputestdata/x86_64-cpuid-A10-5800K-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-A10-5800K-guest.xml
-@@ -22,4 +22,14 @@
-   <feature policy='require' name='perfctr_core'/>
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K-host.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-host.xml
-index cb90c967a3..2430adbfbc 100644
---- a/tests/cputestdata/x86_64-cpuid-A10-5800K-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-A10-5800K-host.xml
-@@ -23,4 +23,14 @@
-   <feature name='perfctr_core'/>
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml b/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml
-index fa61b7b60b..51e6d2b660 100644
---- a/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-A10-5800K-json.xml
-@@ -11,6 +11,8 @@
-   <feature policy='require' name='cmp_legacy'/>
-   <feature policy='require' name='cr8legacy'/>
-   <feature policy='require' name='osvw'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='rdtscp'/>
-   <feature policy='disable' name='svm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-index c26c9c7be3..25ef2d3314 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-@@ -5,4 +5,5 @@
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c2300c' edx='0x00000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-enabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-enabled.xml
-index 70b75f7115..e46908e981 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-enabled.xml
-@@ -5,4 +5,5 @@
-   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x209c01ab' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000007' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x000003f3' edx='0x2e500800'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml
-index 612e571609..0053913327 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml
-@@ -15,4 +15,14 @@
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-   <feature policy='require' name='xsaveerptr'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml
-index 7498d924e2..7acab0a999 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml
-@@ -16,4 +16,14 @@
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-   <feature name='xsaveerptr'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-index a7f4fa3f01..f4d92cf034 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-@@ -5,4 +5,5 @@
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c2300c' edx='0x08000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-enabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-enabled.xml
-index 772456f947..910491c7f6 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-enabled.xml
-@@ -6,4 +6,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000007' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x000003f3' edx='0x26500800'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00001000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml
-index 96fdea306f..9164987bbd 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml
-@@ -15,5 +15,15 @@
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-   <feature policy='require' name='xsaveerptr'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
-   <feature policy='disable' name='rdtscp'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml
-index 4fff74f3aa..2fa8861e44 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml
-@@ -16,4 +16,14 @@
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-   <feature name='xsaveerptr'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-json.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-json.xml
-index c4e34a0fa1..af1e7f2f32 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-json.xml
-@@ -6,6 +6,8 @@
-   <feature policy='require' name='hypervisor'/>
-   <feature policy='require' name='tsc_adjust'/>
-   <feature policy='require' name='cmp_legacy'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='monitor'/>
-   <feature policy='disable' name='rdtscp'/>
-   <feature policy='disable' name='svm'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-json.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-json.xml
-index 7bf2d1b852..4450a40f61 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-json.xml
-@@ -6,6 +6,8 @@
-   <feature policy='require' name='hypervisor'/>
-   <feature policy='require' name='tsc_adjust'/>
-   <feature policy='require' name='cmp_legacy'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='monitor'/>
-   <feature policy='disable' name='svm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-FX-8150-guest.xml b/tests/cputestdata/x86_64-cpuid-FX-8150-guest.xml
-index 6bd032bbcb..ee34ea8547 100644
---- a/tests/cputestdata/x86_64-cpuid-FX-8150-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-FX-8150-guest.xml
-@@ -20,4 +20,14 @@
-   <feature policy='require' name='perfctr_core'/>
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-FX-8150-host.xml b/tests/cputestdata/x86_64-cpuid-FX-8150-host.xml
-index ec670c612e..75595c02af 100644
---- a/tests/cputestdata/x86_64-cpuid-FX-8150-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-FX-8150-host.xml
-@@ -21,4 +21,14 @@
-   <feature name='perfctr_core'/>
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-index c26c9c7be3..25ef2d3314 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-@@ -5,4 +5,5 @@
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c2300c' edx='0x00000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-enabled.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-enabled.xml
-index fcefcf73c8..9181c3a9fe 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-enabled.xml
-@@ -6,4 +6,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000007' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x000003f3' edx='0x2e500800'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml
-index 844b8b9d4f..08c574255e 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml
-@@ -15,4 +15,14 @@
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-   <feature policy='require' name='xsaveerptr'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml
-index 3d1b143eba..f1cddb6a19 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml
-@@ -16,4 +16,14 @@
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-   <feature name='xsaveerptr'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-json.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-json.xml
-index d3003b6965..0fdd934c08 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-json.xml
-@@ -7,6 +7,8 @@
-   <feature policy='require' name='tsc_adjust'/>
-   <feature policy='require' name='cmp_legacy'/>
-   <feature policy='require' name='virt-ssbd'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='monitor'/>
-   <feature policy='disable' name='svm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-1352-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-1352-guest.xml
-index 652f1e4333..a52c4cd303 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-1352-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-1352-guest.xml
-@@ -15,4 +15,7 @@
-   <feature policy='require' name='osvw'/>
-   <feature policy='require' name='ibs'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-1352-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-1352-host.xml
-index 399398eb3a..800b092f14 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-1352-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-1352-host.xml
-@@ -16,4 +16,7 @@
-   <feature name='osvw'/>
-   <feature name='ibs'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350-disabled.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-disabled.xml
-index 8ec1b12582..3f6fe54055 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-2350-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350-disabled.xml
-@@ -3,4 +3,5 @@
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000008' edx='0x10000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000408' edx='0x08000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350-enabled.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-enabled.xml
-index 913980f15f..5fd0d6066d 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-2350-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350-enabled.xml
-@@ -2,4 +2,5 @@
- <cpudata arch='x86'>
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x81a02001' edx='0x078bfbff'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x000003f7' edx='0xe6500800'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000001'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-guest.xml
-index 652f1e4333..a52c4cd303 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-2350-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350-guest.xml
-@@ -15,4 +15,7 @@
-   <feature policy='require' name='osvw'/>
-   <feature policy='require' name='ibs'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-host.xml
-index 399398eb3a..800b092f14 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-2350-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350-host.xml
-@@ -16,4 +16,7 @@
-   <feature name='osvw'/>
-   <feature name='ibs'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml b/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml
-index 741757aeb2..d128553c13 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-2350-json.xml
-@@ -14,6 +14,7 @@
-   <feature policy='require' name='cr8legacy'/>
-   <feature policy='require' name='3dnowprefetch'/>
-   <feature policy='require' name='osvw'/>
-+  <feature policy='require' name='npt'/>
-   <feature policy='disable' name='monitor'/>
-   <feature policy='disable' name='rdtscp'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234-disabled.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-disabled.xml
-index 88124d1745..4dcd74103b 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6234-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234-disabled.xml
-@@ -3,4 +3,5 @@
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x08000008' edx='0x10000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c8b40c' edx='0x08000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234-enabled.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-enabled.xml
-index 38d716449d..890b5df060 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6234-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234-enabled.xml
-@@ -4,4 +4,5 @@
-   <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000002' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00010bf3' edx='0x26500800'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-guest.xml
-index 6bd032bbcb..ee34ea8547 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6234-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234-guest.xml
-@@ -20,4 +20,14 @@
-   <feature policy='require' name='perfctr_core'/>
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-host.xml
-index ec670c612e..75595c02af 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6234-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234-host.xml
-@@ -21,4 +21,14 @@
-   <feature name='perfctr_core'/>
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml
-index 2ad3c98a5a..abfc8db290 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6234-json.xml
-@@ -12,6 +12,8 @@
-   <feature policy='require' name='cmp_legacy'/>
-   <feature policy='require' name='cr8legacy'/>
-   <feature policy='require' name='osvw'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='rdtscp'/>
-   <feature policy='disable' name='svm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6282-guest.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6282-guest.xml
-index 6bd032bbcb..ee34ea8547 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6282-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6282-guest.xml
-@@ -20,4 +20,14 @@
-   <feature policy='require' name='perfctr_core'/>
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Opteron-6282-host.xml b/tests/cputestdata/x86_64-cpuid-Opteron-6282-host.xml
-index ec670c612e..75595c02af 100644
---- a/tests/cputestdata/x86_64-cpuid-Opteron-6282-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Opteron-6282-host.xml
-@@ -21,4 +21,14 @@
-   <feature name='perfctr_core'/>
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95-disabled.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-disabled.xml
-index d8d4e8a5f9..3910eb6e57 100644
---- a/tests/cputestdata/x86_64-cpuid-Phenom-B95-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95-disabled.xml
-@@ -3,4 +3,5 @@
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000008' edx='0x10000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0000340c' edx='0x08000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000006'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95-enabled.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-enabled.xml
-index d15e625087..2a090a04d8 100644
---- a/tests/cputestdata/x86_64-cpuid-Phenom-B95-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95-enabled.xml
-@@ -2,4 +2,5 @@
- <cpudata arch='x86'>
-   <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x80a02001' edx='0x078bfbff'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x000003f3' edx='0xe6400800'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95-guest.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-guest.xml
-index d7a06108bc..ab0e99f97d 100644
---- a/tests/cputestdata/x86_64-cpuid-Phenom-B95-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95-guest.xml
-@@ -17,5 +17,9 @@
-   <feature policy='require' name='skinit'/>
-   <feature policy='require' name='wdt'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='nx'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95-host.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-host.xml
-index 127b047854..95875918c9 100644
---- a/tests/cputestdata/x86_64-cpuid-Phenom-B95-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95-host.xml
-@@ -28,4 +28,8 @@
-   <feature name='skinit'/>
-   <feature name='wdt'/>
-   <feature name='invtsc'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml b/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml
-index 7ce56ac8e7..d161709981 100644
---- a/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Phenom-B95-json.xml
-@@ -13,6 +13,8 @@
-   <feature policy='require' name='cr8legacy'/>
-   <feature policy='require' name='3dnowprefetch'/>
-   <feature policy='require' name='osvw'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='monitor'/>
-   <feature policy='disable' name='nx'/>
-   <feature policy='disable' name='rdtscp'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-index 0358ecf478..a63cd5c4b4 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-@@ -6,4 +6,5 @@
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c23008' edx='0x00000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x000014f6'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-enabled.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-enabled.xml
-index a212679fba..f1a0ad3315 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-enabled.xml
-@@ -5,4 +5,5 @@
-   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x009c01ab' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000007' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x000003f7' edx='0x2e500800'/>
-+  <cpuid eax_in='0x8000000a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000009'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml
-index 612e571609..0053913327 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml
-@@ -15,4 +15,14 @@
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-   <feature policy='require' name='xsaveerptr'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='lbrv'/>
-+  <feature policy='require' name='svm-lock'/>
-+  <feature policy='require' name='nrip-save'/>
-+  <feature policy='require' name='tsc-scale'/>
-+  <feature policy='require' name='vmcb-clean'/>
-+  <feature policy='require' name='flushbyasid'/>
-+  <feature policy='require' name='decodeassists'/>
-+  <feature policy='require' name='pause-filter'/>
-+  <feature policy='require' name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml
-index 7498d924e2..7acab0a999 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml
-@@ -16,4 +16,14 @@
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-   <feature name='xsaveerptr'/>
-+  <feature name='npt'/>
-+  <feature name='lbrv'/>
-+  <feature name='svm-lock'/>
-+  <feature name='nrip-save'/>
-+  <feature name='tsc-scale'/>
-+  <feature name='vmcb-clean'/>
-+  <feature name='flushbyasid'/>
-+  <feature name='decodeassists'/>
-+  <feature name='pause-filter'/>
-+  <feature name='pfthreshold'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-json.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-json.xml
-index 32064548c7..aecc335c1e 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-json.xml
-@@ -6,6 +6,8 @@
-   <feature policy='require' name='hypervisor'/>
-   <feature policy='require' name='tsc_adjust'/>
-   <feature policy='require' name='cmp_legacy'/>
-+  <feature policy='require' name='npt'/>
-+  <feature policy='require' name='nrip-save'/>
-   <feature policy='disable' name='monitor'/>
-   <feature policy='disable' name='sha-ni'/>
- </cpu>
-diff --git a/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml
-index d369fa827a..d3211e7a13 100644
---- a/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml
-@@ -43,6 +43,7 @@
-       <feature policy='require' name='la57'/>
-       <feature policy='require' name='3dnowext'/>
-       <feature policy='require' name='3dnow'/>
-+      <feature policy='require' name='npt'/>
-       <feature policy='disable' name='vme'/>
-       <feature policy='disable' name='fma'/>
-       <feature policy='disable' name='avx'/>
-diff --git a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
-index 444d90504e..756b28034e 100644
---- a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
-@@ -43,6 +43,7 @@
-       <feature policy='require' name='la57'/>
-       <feature policy='require' name='3dnowext'/>
-       <feature policy='require' name='3dnow'/>
-+      <feature policy='require' name='npt'/>
-       <feature policy='disable' name='vme'/>
-       <feature policy='disable' name='fma'/>
-       <feature policy='disable' name='avx'/>
-diff --git a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
-index 463f0db390..0aa8aa18be 100644
---- a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
-@@ -43,6 +43,7 @@
-       <feature policy='require' name='la57'/>
-       <feature policy='require' name='3dnowext'/>
-       <feature policy='require' name='3dnow'/>
-+      <feature policy='require' name='npt'/>
-       <feature policy='disable' name='vme'/>
-       <feature policy='disable' name='fma'/>
-       <feature policy='disable' name='avx'/>
-@@ -57,6 +58,7 @@
-       <feature policy='disable' name='3dnowprefetch'/>
-       <feature policy='disable' name='osvw'/>
-       <feature policy='disable' name='topoext'/>
-+      <feature policy='disable' name='nrip-save'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
-index 5bfd065986..d6265ce243 100644
---- a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
-@@ -43,6 +43,7 @@
-       <feature policy='require' name='la57'/>
-       <feature policy='require' name='3dnowext'/>
-       <feature policy='require' name='3dnow'/>
-+      <feature policy='require' name='npt'/>
-       <feature policy='disable' name='vme'/>
-       <feature policy='disable' name='fma'/>
-       <feature policy='disable' name='avx'/>
-@@ -57,6 +58,7 @@
-       <feature policy='disable' name='osvw'/>
-       <feature policy='disable' name='topoext'/>
-       <feature policy='disable' name='ibpb'/>
-+      <feature policy='disable' name='nrip-save'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-index c762b0b600..bcaf9afd6f 100644
---- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-@@ -43,6 +43,7 @@
-       <feature policy='require' name='la57'/>
-       <feature policy='require' name='3dnowext'/>
-       <feature policy='require' name='3dnow'/>
-+      <feature policy='require' name='npt'/>
-       <feature policy='disable' name='vme'/>
-       <feature policy='disable' name='fma'/>
-       <feature policy='disable' name='avx'/>
-@@ -57,6 +58,7 @@
-       <feature policy='disable' name='osvw'/>
-       <feature policy='disable' name='topoext'/>
-       <feature policy='disable' name='ibpb'/>
-+      <feature policy='disable' name='nrip-save'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-index 0a4bb16a89..eb456dea28 100644
---- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-@@ -43,6 +43,7 @@
-       <feature policy='require' name='la57'/>
-       <feature policy='require' name='3dnowext'/>
-       <feature policy='require' name='3dnow'/>
-+      <feature policy='require' name='npt'/>
-       <feature policy='disable' name='vme'/>
-       <feature policy='disable' name='fma'/>
-       <feature policy='disable' name='avx'/>
-@@ -56,6 +57,7 @@
-       <feature policy='disable' name='3dnowprefetch'/>
-       <feature policy='disable' name='osvw'/>
-       <feature policy='disable' name='topoext'/>
-+      <feature policy='disable' name='nrip-save'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/qemuxml2argvdata/cpu-host-model-cmt.x86_64-4.0.0.args b/tests/qemuxml2argvdata/cpu-host-model-cmt.x86_64-4.0.0.args
-index b44dc2ec48..6ee7bed18e 100644
---- a/tests/qemuxml2argvdata/cpu-host-model-cmt.x86_64-4.0.0.args
-+++ b/tests/qemuxml2argvdata/cpu-host-model-cmt.x86_64-4.0.0.args
-@@ -14,9 +14,9 @@ QEMU_AUDIO_DRV=none \
- file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc-i440fx-4.0,accel=tcg,usb=off,dump-guest-core=off \
- -cpu EPYC,acpi=on,ss=on,hypervisor=on,erms=on,mpx=on,pcommit=on,clwb=on,pku=on,\
--la57=on,3dnowext=on,3dnow=on,vme=off,fma=off,avx=off,f16c=off,rdrand=off,\
--avx2=off,rdseed=off,sha-ni=off,xsavec=off,fxsr_opt=off,misalignsse=off,\
--3dnowprefetch=off,osvw=off,topoext=off \
-+la57=on,3dnowext=on,3dnow=on,npt=on,vme=off,fma=off,avx=off,f16c=off,\
-+rdrand=off,avx2=off,rdseed=off,sha-ni=off,xsavec=off,fxsr_opt=off,\
-+misalignsse=off,3dnowprefetch=off,osvw=off,topoext=off,nrip-save=off \
- -m 214 \
- -overcommit mem-lock=off \
- -smp 6,sockets=6,cores=1,threads=1 \
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-missing-x86-features-in-0x7-CPUID-leaf.patch b/SOURCES/libvirt-cpu_map-Add-missing-x86-features-in-0x7-CPUID-leaf.patch
deleted file mode 100644
index 42bfd9e..0000000
--- a/SOURCES/libvirt-cpu_map-Add-missing-x86-features-in-0x7-CPUID-leaf.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From cff220056e78bad15a8addf9739f8a556b7a6ea2 Mon Sep 17 00:00:00 2001
-Message-Id: <cff220056e78bad15a8addf9739f8a556b7a6ea2@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 8 Oct 2020 18:01:21 +0200
-Subject: [PATCH] cpu_map: Add missing x86 features in 0x7 CPUID leaf
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 6ea3bb19c6fed39429c95eb284487b849cb12e2a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861506
-
-Conflicts:
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-            - not present downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <04da640b0fbbbcec9be63e552a3029f983bf879a.1602172344.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_features.xml                         | 12 ++++++++++++
- .../x86_64-cpuid-Ice-Lake-Server-disabled.xml        |  2 +-
- .../x86_64-cpuid-Ice-Lake-Server-guest.xml           |  1 +
- .../x86_64-cpuid-Ice-Lake-Server-host.xml            |  1 +
- 4 files changed, 15 insertions(+), 1 deletion(-)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 8525ae0fa5..364e45fb32 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -286,6 +286,9 @@
-   <feature name='ospke'>
-     <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000010'/>
-   </feature>
-+  <feature name='waitpkg'>
-+    <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000020'/>
-+  </feature>
-   <feature name='avx512vbmi2'>
-     <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00000040'/>
-   </feature>
-@@ -310,9 +313,18 @@
-   <feature name='la57'>
-     <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00010000'/>
-   </feature>
-+  <feature name='rdpid'>
-+    <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x00400000'/>
-+  </feature>
-   <feature name='cldemote'>
-     <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x02000000'/>
-   </feature>
-+  <feature name='movdiri'>
-+    <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x08000000'/>
-+  </feature>
-+  <feature name='movdir64b'>
-+    <cpuid eax_in='0x07' ecx_in='0x00' ecx='0x10000000'/>
-+  </feature>
- 
-   <feature name='avx512-4vnniw'>
-     <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000004'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml
-index 62c6bad612..ce65579bcc 100644
---- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-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='0x02001000' ecx='0x00000010' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00400010' 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'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
-index 4676f3aa7d..9b75ace710 100644
---- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
-@@ -23,6 +23,7 @@
-   <feature policy='require' name='avx512ifma'/>
-   <feature policy='require' name='sha-ni'/>
-   <feature policy='require' name='ospke'/>
-+  <feature policy='require' name='rdpid'/>
-   <feature policy='require' name='stibp'/>
-   <feature policy='require' name='arch-capabilities'/>
-   <feature policy='require' name='xsaves'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
-index 35b9e39629..efbf9d363b 100644
---- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
-@@ -24,6 +24,7 @@
-   <feature name='avx512ifma'/>
-   <feature name='sha-ni'/>
-   <feature name='ospke'/>
-+  <feature name='rdpid'/>
-   <feature name='stibp'/>
-   <feature name='arch-capabilities'/>
-   <feature name='xsaves'/>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-missing-x86-features-in-0x80000008-CPUID-leaf.patch b/SOURCES/libvirt-cpu_map-Add-missing-x86-features-in-0x80000008-CPUID-leaf.patch
deleted file mode 100644
index b7020fc..0000000
--- a/SOURCES/libvirt-cpu_map-Add-missing-x86-features-in-0x80000008-CPUID-leaf.patch
+++ /dev/null
@@ -1,224 +0,0 @@
-From 1d6a30efa98fc0cf39725792efae1a151797589f Mon Sep 17 00:00:00 2001
-Message-Id: <1d6a30efa98fc0cf39725792efae1a151797589f@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 8 Oct 2020 18:01:22 +0200
-Subject: [PATCH] cpu_map: Add missing x86 features in 0x80000008 CPUID leaf
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 892b7c70f66abc511e1251382c9183493024f253)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861506
-
-Conflicts:
-	tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-	tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-	tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-            - commit df69263c26 (cpu_map: Request test files update when
-              adding x86 features) not backported
-
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-disabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-            - not present downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <27effeb5e12252982411796bd72e078d3afe49cb.1602172344.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_features.xml                                | 6 ++++++
- tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml       | 2 +-
- tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml          | 1 +
- .../cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml | 1 +
- tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml  | 1 +
- tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml   | 1 +
- .../x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml        | 1 +
- .../x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml           | 1 +
- .../x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml            | 1 +
- .../x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml        | 1 +
- .../x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml           | 1 +
- .../x86_64-cpuid-Hygon-C86-7185-32-core-host.xml            | 1 +
- .../x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml      | 1 +
- .../x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml         | 1 +
- .../x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml          | 1 +
- 15 files changed, 20 insertions(+), 1 deletion(-)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 364e45fb32..5265b2989b 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -486,12 +486,18 @@
-   <feature name='clzero'>
-     <cpuid eax_in='0x80000008' ebx='0x00000001'/>
-   </feature>
-+  <feature name='xsaveerptr'>
-+    <cpuid eax_in='0x80000008' ebx='0x00000004'/>
-+  </feature>
-   <feature name='wbnoinvd'>
-     <cpuid eax_in='0x80000008' ebx='0x00000200'/>
-   </feature>
-   <feature name='ibpb'>
-     <cpuid eax_in='0x80000008' ebx='0x00001000'/>
-   </feature>
-+  <feature name='amd-stibp'>
-+    <cpuid eax_in='0x80000008' ebx='0x00008000'/>
-+  </feature>
-   <feature name='amd-ssbd'>
-     <cpuid eax_in='0x80000008' ebx='0x01000000'/>
-   </feature>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml
-index 2d7f83c80f..1d91c3efa8 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml
-@@ -6,6 +6,6 @@
-   <cpuid eax_in='0x00000007' ecx_in='0x01' eax='0x00000020' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
--  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01001000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01009000' ecx='0x00000000' edx='0x00000000'/>
-   <msr index='0x10a' edx='0x00000000' eax='0x000001eb'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-index fb319d547c..c89e0e5350 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-@@ -10,6 +10,7 @@
-   <feature policy='require' name='md-clear'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='ibpb'/>
-+  <feature policy='require' name='amd-stibp'/>
-   <feature policy='require' name='amd-ssbd'/>
-   <feature policy='require' name='tsx-ctrl'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-index 747d725acf..c26c9c7be3 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-disabled.xml
-@@ -4,4 +4,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c2300c' edx='0x00000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml
-index b75196aac5..612e571609 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-guest.xml
-@@ -14,4 +14,5 @@
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-+  <feature policy='require' name='xsaveerptr'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml
-index fd84b526db..7498d924e2 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-host.xml
-@@ -15,4 +15,5 @@
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-+  <feature name='xsaveerptr'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-index af43fca98d..a7f4fa3f01 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-disabled.xml
-@@ -4,4 +4,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c2300c' edx='0x08000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml
-index 5044c8cc35..96fdea306f 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-guest.xml
-@@ -14,5 +14,6 @@
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-+  <feature policy='require' name='xsaveerptr'/>
-   <feature policy='disable' name='rdtscp'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml
-index d7d5ce88d9..4fff74f3aa 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb-host.xml
-@@ -15,4 +15,5 @@
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-+  <feature name='xsaveerptr'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-index 747d725acf..c26c9c7be3 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-disabled.xml
-@@ -4,4 +4,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c2300c' edx='0x00000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml
-index 75c71233c6..844b8b9d4f 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-guest.xml
-@@ -14,4 +14,5 @@
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-+  <feature policy='require' name='xsaveerptr'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml
-index 82f28067c4..3d1b143eba 100644
---- a/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Hygon-C86-7185-32-core-host.xml
-@@ -15,4 +15,5 @@
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-+  <feature name='xsaveerptr'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-index b085050618..0358ecf478 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-disabled.xml
-@@ -5,4 +5,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x00000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01c23008' edx='0x00000000'/>
-   <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000005' ecx='0x00000000' edx='0x00000000'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml
-index b75196aac5..612e571609 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-guest.xml
-@@ -14,4 +14,5 @@
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='clzero'/>
-+  <feature policy='require' name='xsaveerptr'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml
-index fd84b526db..7498d924e2 100644
---- a/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core-host.xml
-@@ -15,4 +15,5 @@
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-   <feature name='clzero'/>
-+  <feature name='xsaveerptr'/>
- </cpu>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-more-noTSX-x86-CPU-models.patch b/SOURCES/libvirt-cpu_map-Add-more-noTSX-x86-CPU-models.patch
deleted file mode 100644
index 5815a88..0000000
--- a/SOURCES/libvirt-cpu_map-Add-more-noTSX-x86-CPU-models.patch
+++ /dev/null
@@ -1,831 +0,0 @@
-From 59287d64100517e89dbd3a88af6fec4755ceab42 Mon Sep 17 00:00:00 2001
-Message-Id: <59287d64100517e89dbd3a88af6fec4755ceab42@dist-git>
-From: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Date: Tue, 26 May 2020 10:58:55 +0200
-Subject: [PATCH] cpu_map: Add more -noTSX x86 CPU models
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-One of the mitigation methods for TAA[1] is to disable TSX
-support on the host system.  Linux added a mechanism to disable
-TSX globally through the kernel command line, and many Linux
-distributions now default to tsx=off.  This makes existing CPU
-models that have HLE and RTM enabled not usable anymore.
-
-Add new versions of all CPU models that have the HLE and RTM
-features enabled, that can be used when TSX is disabled in the
-host system.
-
-On systems disabling the features without those types defined
-in cpu-maps users end up without modern CPU types in the list
-of usable CPUs to use in the likes of virsh domcapabilities
-or tools higher in the stack like virt-manager.
-
-This adds:
--Cascadelake-Server-noTSX
--Icelake-Client-noTSX
--Icelake-Server-noTSX
--Skylake-Server-noTSX-IBRS
--Skylake-Client-noTSX-IBRS
-
-Introduced in QEMU by commit v4.2.0-rc2-3-g9ab2237f19 (function)
-                  and commit v4.2.0-rc2-4-g02fa60d101 (names)
-
-References:
-
-    [1] TAA, TSX asynchronous Abort:
-        https://software.intel.com/security-software-guidance/insights/deep-dive-intel-transactional-synchronization-extensions-intel-tsx-asynchronous-abort
-        https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html
-
-Fixes: https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1853200
-
-Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Message-Id: <20200310104806.2723-2-christian.ehrhardt@canonical.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit dd17a4eba8618aeb0144f268f2222f65a85425fc)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840008
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <ab2edc2c9107c87dfa7153b6c54ddd1401c82a4b.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/Makefile.inc.am                   |  5 ++
- src/cpu_map/index.xml                         |  5 ++
- src/cpu_map/x86_Cascadelake-Server-noTSX.xml  | 78 ++++++++++++++++
- src/cpu_map/x86_Icelake-Client-noTSX.xml      | 81 +++++++++++++++++
- src/cpu_map/x86_Icelake-Server-noTSX.xml      | 90 +++++++++++++++++++
- src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 73 +++++++++++++++
- src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 75 ++++++++++++++++
- .../x86_64-cpuid-Core-i7-8550U-guest.xml      |  4 +-
- .../x86_64-cpuid-Core-i7-8550U-host.xml       | 11 +--
- .../x86_64-cpuid-Core-i7-8550U-json.xml       |  4 +-
- .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml  |  5 ++
- .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml  |  5 ++
- tests/domaincapsdata/qemu_4.2.0.x86_64.xml    |  5 ++
- .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml  |  5 ++
- .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml  |  5 ++
- tests/domaincapsdata/qemu_5.0.0.x86_64.xml    |  5 ++
- 16 files changed, 440 insertions(+), 16 deletions(-)
- create mode 100644 src/cpu_map/x86_Cascadelake-Server-noTSX.xml
- create mode 100644 src/cpu_map/x86_Icelake-Client-noTSX.xml
- create mode 100644 src/cpu_map/x86_Icelake-Server-noTSX.xml
- create mode 100644 src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
- create mode 100644 src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-
-diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
-index e935178304..be64c9a0d4 100644
---- a/src/cpu_map/Makefile.inc.am
-+++ b/src/cpu_map/Makefile.inc.am
-@@ -20,6 +20,7 @@ cpumap_DATA = \
- 	cpu_map/x86_Broadwell-noTSX.xml \
- 	cpu_map/x86_Broadwell-noTSX-IBRS.xml \
- 	cpu_map/x86_Cascadelake-Server.xml \
-+	cpu_map/x86_Cascadelake-Server-noTSX.xml \
- 	cpu_map/x86_Conroe.xml \
- 	cpu_map/x86_core2duo.xml \
- 	cpu_map/x86_coreduo.xml \
-@@ -33,7 +34,9 @@ cpumap_DATA = \
- 	cpu_map/x86_Haswell-noTSX.xml \
- 	cpu_map/x86_Haswell-noTSX-IBRS.xml \
- 	cpu_map/x86_Icelake-Client.xml \
-+	cpu_map/x86_Icelake-Client-noTSX.xml \
- 	cpu_map/x86_Icelake-Server.xml \
-+	cpu_map/x86_Icelake-Server-noTSX.xml \
- 	cpu_map/x86_IvyBridge.xml \
- 	cpu_map/x86_IvyBridge-IBRS.xml \
- 	cpu_map/x86_kvm32.xml \
-@@ -58,8 +61,10 @@ cpumap_DATA = \
- 	cpu_map/x86_SandyBridge-IBRS.xml \
- 	cpu_map/x86_Skylake-Client.xml \
- 	cpu_map/x86_Skylake-Client-IBRS.xml \
-+	cpu_map/x86_Skylake-Client-noTSX-IBRS.xml \
- 	cpu_map/x86_Skylake-Server.xml \
- 	cpu_map/x86_Skylake-Server-IBRS.xml \
-+	cpu_map/x86_Skylake-Server-noTSX-IBRS.xml \
- 	cpu_map/x86_Westmere.xml \
- 	cpu_map/x86_Westmere-IBRS.xml \
- 	$(NULL)
-diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
-index ffb2f6fe1b..50b030de29 100644
---- a/src/cpu_map/index.xml
-+++ b/src/cpu_map/index.xml
-@@ -44,11 +44,16 @@
-     <include filename="x86_Broadwell-IBRS.xml"/>
-     <include filename="x86_Skylake-Client.xml"/>
-     <include filename="x86_Skylake-Client-IBRS.xml"/>
-+    <include filename="x86_Skylake-Client-noTSX-IBRS.xml"/>
-     <include filename="x86_Skylake-Server.xml"/>
-     <include filename="x86_Skylake-Server-IBRS.xml"/>
-+    <include filename="x86_Skylake-Server-noTSX-IBRS.xml"/>
-     <include filename="x86_Cascadelake-Server.xml"/>
-+    <include filename="x86_Cascadelake-Server-noTSX.xml"/>
-     <include filename="x86_Icelake-Client.xml"/>
-+    <include filename="x86_Icelake-Client-noTSX.xml"/>
-     <include filename="x86_Icelake-Server.xml"/>
-+    <include filename="x86_Icelake-Server-noTSX.xml"/>
- 
-     <!-- AMD CPUs -->
-     <include filename="x86_athlon.xml"/>
-diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-new file mode 100644
-index 0000000000..d24415ebce
---- /dev/null
-+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-@@ -0,0 +1,78 @@
-+<cpus>
-+  <model name='Cascadelake-Server-noTSX'>
-+    <signature family='6' model='85'/> <!-- 050654 -->
-+    <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='avx512bw'/>
-+    <feature name='avx512cd'/>
-+    <feature name='avx512dq'/>
-+    <feature name='avx512f'/>
-+    <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='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'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pcid'/>
-+    <feature name='pclmuldq'/>
-+    <feature name='pdpe1gb'/>
-+    <feature name='pge'/>
-+    <feature name='pni'/>
-+    <feature name='popcnt'/>
-+    <feature name='pse'/>
-+    <feature name='pse36'/>
-+    <feature name='rdrand'/>
-+    <feature name='rdseed'/>
-+    <feature name='rdtscp'/>
-+    <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='vme'/>
-+    <feature name='x2apic'/>
-+    <feature name='xgetbv1'/>
-+    <feature name='xsave'/>
-+    <feature name='xsavec'/>
-+    <feature name='xsaveopt'/>
-+  </model>
-+</cpus>
-diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
-new file mode 100644
-index 0000000000..cd51881f40
---- /dev/null
-+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
-@@ -0,0 +1,81 @@
-+<cpus>
-+  <model name='Icelake-Client-noTSX'>
-+    <signature family='6' model='126'/> <!-- 0706e0 -->
-+    <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='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'/>
-+    <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='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>
-+</cpus>
-diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-new file mode 100644
-index 0000000000..538c656712
---- /dev/null
-+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-@@ -0,0 +1,90 @@
-+<cpus>
-+  <model name='Icelake-Server-noTSX'>
-+    <signature family='6' model='134'/> <!-- 080660 -->
-+    <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='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'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pcid'/>
-+    <feature name='pclmuldq'/>
-+    <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='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>
-+</cpus>
-diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-new file mode 100644
-index 0000000000..3d2976692f
---- /dev/null
-+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-@@ -0,0 +1,73 @@
-+<cpus>
-+  <model name='Skylake-Client-noTSX-IBRS'>
-+    <signature family='6' model='94'/> <!-- 0506e0 -->
-+    <signature family='6' model='78'/> <!-- 0406e0 -->
-+    <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
-+         but we don't have specific models for them. -->
-+    <signature family='6' model='142'/> <!-- 0806e0 -->
-+    <signature family='6' model='158'/> <!-- 0906e0 -->
-+    <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='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='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'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pcid'/>
-+    <feature name='pclmuldq'/>
-+    <feature name='pge'/>
-+    <feature name='pni'/>
-+    <feature name='popcnt'/>
-+    <feature name='pse'/>
-+    <feature name='pse36'/>
-+    <feature name='rdrand'/>
-+    <feature name='rdseed'/>
-+    <feature name='rdtscp'/>
-+    <feature name='sep'/>
-+    <feature name='smap'/>
-+    <feature name='smep'/>
-+    <feature name='spec-ctrl'/>
-+    <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='vme'/>
-+    <feature name='x2apic'/>
-+    <feature name='xgetbv1'/>
-+    <feature name='xsave'/>
-+    <feature name='xsavec'/>
-+    <feature name='xsaveopt'/>
-+  </model>
-+</cpus>
-diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-new file mode 100644
-index 0000000000..455a072119
---- /dev/null
-+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-@@ -0,0 +1,75 @@
-+<cpus>
-+  <model name='Skylake-Server-noTSX-IBRS'>
-+    <signature family='6' model='85'/> <!-- 050654 -->
-+    <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='avx512bw'/>
-+    <feature name='avx512cd'/>
-+    <feature name='avx512dq'/>
-+    <feature name='avx512f'/>
-+    <feature name='avx512vl'/>
-+    <feature name='bmi1'/>
-+    <feature name='bmi2'/>
-+    <feature name='clflush'/>
-+    <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='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'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pcid'/>
-+    <feature name='pclmuldq'/>
-+    <feature name='pdpe1gb'/>
-+    <feature name='pge'/>
-+    <feature name='pni'/>
-+    <feature name='popcnt'/>
-+    <feature name='pse'/>
-+    <feature name='pse36'/>
-+    <feature name='rdrand'/>
-+    <feature name='rdseed'/>
-+    <feature name='rdtscp'/>
-+    <feature name='sep'/>
-+    <feature name='smap'/>
-+    <feature name='smep'/>
-+    <feature name='spec-ctrl'/>
-+    <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='vme'/>
-+    <feature name='x2apic'/>
-+    <feature name='xgetbv1'/>
-+    <feature name='xsave'/>
-+    <feature name='xsavec'/>
-+    <feature name='xsaveopt'/>
-+  </model>
-+</cpus>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-index 92404e4d03..e03c4a06ba 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Skylake-Client-IBRS</model>
-+  <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ds'/>
-   <feature policy='require' name='acpi'/>
-@@ -26,6 +26,4 @@
-   <feature policy='require' name='pdpe1gb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
--  <feature policy='disable' name='hle'/>
--  <feature policy='disable' name='rtm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-index 808a8ff969..7f6fe2eac3 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-@@ -1,8 +1,7 @@
- <cpu>
-   <arch>x86_64</arch>
--  <model>Broadwell-noTSX-IBRS</model>
-+  <model>Skylake-Client-noTSX-IBRS</model>
-   <vendor>Intel</vendor>
--  <feature name='vme'/>
-   <feature name='ds'/>
-   <feature name='acpi'/>
-   <feature name='ss'/>
-@@ -18,22 +17,14 @@
-   <feature name='xtpr'/>
-   <feature name='pdcm'/>
-   <feature name='osxsave'/>
--  <feature name='f16c'/>
--  <feature name='rdrand'/>
--  <feature name='arat'/>
-   <feature name='tsc_adjust'/>
--  <feature name='mpx'/>
-   <feature name='clflushopt'/>
-   <feature name='intel-pt'/>
-   <feature name='md-clear'/>
-   <feature name='stibp'/>
-   <feature name='ssbd'/>
--  <feature name='xsaveopt'/>
--  <feature name='xsavec'/>
--  <feature name='xgetbv1'/>
-   <feature name='xsaves'/>
-   <feature name='pdpe1gb'/>
--  <feature name='abm'/>
-   <feature name='invtsc'/>
-   <feature name='skip-l1dfl-vmentry'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-index 645c0934c2..3d8e6775bf 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Skylake-Client-IBRS</model>
-+  <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ss'/>
-   <feature policy='require' name='vmx'/>
-@@ -14,6 +14,4 @@
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='pdpe1gb'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
--  <feature policy='disable' name='hle'/>
--  <feature policy='disable' name='rtm'/>
- </cpu>
-diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-index c4c6bfb564..e257657981 100644
---- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-@@ -63,8 +63,10 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-+      <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
-       <model usable='yes'>Skylake-Client-IBRS</model>
-       <model usable='yes'>Skylake-Client</model>
-       <model usable='yes'>SandyBridge-IBRS</model>
-@@ -79,7 +81,9 @@
-       <model usable='yes'>Nehalem</model>
-       <model usable='yes'>IvyBridge-IBRS</model>
-       <model usable='yes'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server-noTSX</model>
-       <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client-noTSX</model>
-       <model usable='no'>Icelake-Client</model>
-       <model usable='yes'>Haswell-noTSX-IBRS</model>
-       <model usable='yes'>Haswell-noTSX</model>
-@@ -89,6 +93,7 @@
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-       <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-       <model usable='yes'>Broadwell-noTSX-IBRS</model>
-       <model usable='yes'>Broadwell-noTSX</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-index a7f8d9c5ee..c762b0b600 100644
---- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-@@ -73,8 +73,10 @@
-       <model usable='yes'>athlon</model>
-       <model usable='no'>Westmere-IBRS</model>
-       <model usable='no'>Westmere</model>
-+      <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-+      <model usable='no'>Skylake-Client-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Client-IBRS</model>
-       <model usable='no'>Skylake-Client</model>
-       <model usable='no'>SandyBridge-IBRS</model>
-@@ -89,7 +91,9 @@
-       <model usable='no'>Nehalem</model>
-       <model usable='no'>IvyBridge-IBRS</model>
-       <model usable='no'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server-noTSX</model>
-       <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client-noTSX</model>
-       <model usable='no'>Icelake-Client</model>
-       <model usable='no'>Haswell-noTSX-IBRS</model>
-       <model usable='no'>Haswell-noTSX</model>
-@@ -99,6 +103,7 @@
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-       <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-       <model usable='no'>Broadwell-noTSX-IBRS</model>
-       <model usable='no'>Broadwell-noTSX</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-index f0e0f182a4..2918ba9715 100644
---- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-@@ -62,8 +62,10 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-+      <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
-       <model usable='yes'>Skylake-Client-IBRS</model>
-       <model usable='yes'>Skylake-Client</model>
-       <model usable='yes'>SandyBridge-IBRS</model>
-@@ -78,7 +80,9 @@
-       <model usable='yes'>Nehalem</model>
-       <model usable='yes'>IvyBridge-IBRS</model>
-       <model usable='yes'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server-noTSX</model>
-       <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client-noTSX</model>
-       <model usable='no'>Icelake-Client</model>
-       <model usable='yes'>Haswell-noTSX-IBRS</model>
-       <model usable='yes'>Haswell-noTSX</model>
-@@ -88,6 +92,7 @@
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-       <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-       <model usable='yes'>Broadwell-noTSX-IBRS</model>
-       <model usable='yes'>Broadwell-noTSX</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-index b635d573ef..7b2a929738 100644
---- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-@@ -63,8 +63,10 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-+      <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
-       <model usable='yes'>Skylake-Client-IBRS</model>
-       <model usable='yes'>Skylake-Client</model>
-       <model usable='yes'>SandyBridge-IBRS</model>
-@@ -79,7 +81,9 @@
-       <model usable='yes'>Nehalem</model>
-       <model usable='yes'>IvyBridge-IBRS</model>
-       <model usable='yes'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server-noTSX</model>
-       <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client-noTSX</model>
-       <model usable='no'>Icelake-Client</model>
-       <model usable='yes'>Haswell-noTSX-IBRS</model>
-       <model usable='yes'>Haswell-noTSX</model>
-@@ -89,6 +93,7 @@
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-       <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-       <model usable='yes'>Broadwell-noTSX-IBRS</model>
-       <model usable='yes'>Broadwell-noTSX</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-index 0fbc632267..d634803b29 100644
---- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-@@ -72,8 +72,10 @@
-       <model usable='yes'>athlon</model>
-       <model usable='no'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-+      <model usable='no'>Skylake-Client-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Client-IBRS</model>
-       <model usable='no'>Skylake-Client</model>
-       <model usable='no'>SandyBridge-IBRS</model>
-@@ -88,7 +90,9 @@
-       <model usable='yes'>Nehalem</model>
-       <model usable='no'>IvyBridge-IBRS</model>
-       <model usable='no'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server-noTSX</model>
-       <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client-noTSX</model>
-       <model usable='no'>Icelake-Client</model>
-       <model usable='no'>Haswell-noTSX-IBRS</model>
-       <model usable='no'>Haswell-noTSX</model>
-@@ -98,6 +102,7 @@
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-       <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-       <model usable='no'>Broadwell-noTSX-IBRS</model>
-       <model usable='no'>Broadwell-noTSX</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-index 27f76a8a5e..7609d49020 100644
---- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-@@ -62,8 +62,10 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-+      <model usable='yes'>Skylake-Client-noTSX-IBRS</model>
-       <model usable='yes'>Skylake-Client-IBRS</model>
-       <model usable='yes'>Skylake-Client</model>
-       <model usable='yes'>SandyBridge-IBRS</model>
-@@ -78,7 +80,9 @@
-       <model usable='yes'>Nehalem</model>
-       <model usable='yes'>IvyBridge-IBRS</model>
-       <model usable='yes'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server-noTSX</model>
-       <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client-noTSX</model>
-       <model usable='no'>Icelake-Client</model>
-       <model usable='yes'>Haswell-noTSX-IBRS</model>
-       <model usable='yes'>Haswell-noTSX</model>
-@@ -88,6 +92,7 @@
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-       <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server-noTSX</model>
-       <model usable='no'>Cascadelake-Server</model>
-       <model usable='yes'>Broadwell-noTSX-IBRS</model>
-       <model usable='yes'>Broadwell-noTSX</model>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-pschange-mc-no-bit-in-IA32_ARCH_CAPABILITIES-MSR.patch b/SOURCES/libvirt-cpu_map-Add-pschange-mc-no-bit-in-IA32_ARCH_CAPABILITIES-MSR.patch
deleted file mode 100644
index 82e7e94..0000000
--- a/SOURCES/libvirt-cpu_map-Add-pschange-mc-no-bit-in-IA32_ARCH_CAPABILITIES-MSR.patch
+++ /dev/null
@@ -1,212 +0,0 @@
-From 7d0790fb5061cb956390ce5f7a2b92ac9702ada6 Mon Sep 17 00:00:00 2001
-Message-Id: <7d0790fb5061cb956390ce5f7a2b92ac9702ada6@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:39 +0200
-Subject: [PATCH] cpu_map: Add pschange-mc-no bit in IA32_ARCH_CAPABILITIES MSR
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-(cherry picked from commit 12eb0c9496e802bad9e5ec71cde888b8fdb1b0b4)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1781878
-
-Conflicts:
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-enabled.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-            - test data files do not exist downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <d106df21f8423a9acff9eb5bf75ab25611c1de1f.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_features.xml                                  | 3 +++
- tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml           | 1 +
- tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml            | 1 +
- tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml            | 1 +
- tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml      | 2 +-
- tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml        | 1 +
- tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml         | 1 +
- tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml         | 1 +
- tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml | 2 +-
- tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml    | 1 +
- tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml                | 1 +
- tests/domaincapsdata/qemu_4.2.0.x86_64.xml                    | 1 +
- tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml                | 1 +
- tests/domaincapsdata/qemu_5.0.0.x86_64.xml                    | 1 +
- 14 files changed, 16 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 2c4c29dc99..8525ae0fa5 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -509,6 +509,9 @@
-   <feature name='mds-no'>
-     <msr index='0x10a' edx='0x00000000' eax='0x00000020'/>
-   </feature>
-+  <feature name='pschange-mc-no'>
-+    <msr index='0x10a' edx='0x00000000' eax='0x00000040'/>
-+  </feature>
-   <feature name='tsx-ctrl'>
-     <msr index='0x10a' edx='0x00000000' eax='0x00000080'/>
-   </feature>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-index b5137e3c03..db5598740c 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-@@ -35,6 +35,7 @@
-   <feature policy='require' name='ibrs-all'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-   <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='tsx-ctrl'/>
-   <feature policy='require' name='taa-no'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-index 52b352f4f1..6926b7c975 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-@@ -36,6 +36,7 @@
-   <feature name='ibrs-all'/>
-   <feature name='skip-l1dfl-vmentry'/>
-   <feature name='mds-no'/>
-+  <feature name='pschange-mc-no'/>
-   <feature name='tsx-ctrl'/>
-   <feature name='taa-no'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-index e323d6205e..fc52805b2f 100644
---- a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-@@ -18,6 +18,7 @@
-   <feature policy='require' name='ibrs-all'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-   <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='tsx-ctrl'/>
-   <feature policy='require' name='taa-no'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
-index 6c480eeacf..57f8ebabba 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
-@@ -5,5 +5,5 @@
-   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x009c47ab' ecx='0x00000004' edx='0xac000400'/>
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
--  <msr index='0x10a' edx='0x00000000' eax='0x00000008'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000048'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-index 92404e4d03..ed06515e99 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-@@ -26,6 +26,7 @@
-   <feature policy='require' name='pdpe1gb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='disable' name='hle'/>
-   <feature policy='disable' name='rtm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-index 7f6fe2eac3..7681c94649 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-@@ -27,4 +27,5 @@
-   <feature name='pdpe1gb'/>
-   <feature name='invtsc'/>
-   <feature name='skip-l1dfl-vmentry'/>
-+  <feature name='pschange-mc-no'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-index 645c0934c2..4774d39c7e 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-@@ -14,6 +14,7 @@
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='pdpe1gb'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='disable' name='hle'/>
-   <feature policy='disable' name='rtm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
-index 43c3a93a16..cd082feffe 100644
---- a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
-@@ -6,5 +6,5 @@
-   <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-   <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-   <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01001000' ecx='0x00000000' edx='0x00000000'/>
--  <msr index='0x10a' edx='0x00000000' eax='0x000000ab'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x000000eb'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
-index 36e95029be..10c256ee1e 100644
---- a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
-@@ -17,5 +17,6 @@
-   <feature policy='require' name='ibrs-all'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-   <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='tsx-ctrl'/>
- </cpu>
-diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-index e257657981..4d9616cb69 100644
---- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-@@ -47,6 +47,7 @@
-       <feature policy='require' name='pdpe1gb'/>
-       <feature policy='require' name='invtsc'/>
-       <feature policy='require' name='skip-l1dfl-vmentry'/>
-+      <feature policy='require' name='pschange-mc-no'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-index 2918ba9715..5210c917aa 100644
---- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-@@ -46,6 +46,7 @@
-       <feature policy='require' name='pdpe1gb'/>
-       <feature policy='require' name='invtsc'/>
-       <feature policy='require' name='skip-l1dfl-vmentry'/>
-+      <feature policy='require' name='pschange-mc-no'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-index 7b2a929738..b7e2c8a4fe 100644
---- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-@@ -47,6 +47,7 @@
-       <feature policy='require' name='pdpe1gb'/>
-       <feature policy='require' name='invtsc'/>
-       <feature policy='require' name='skip-l1dfl-vmentry'/>
-+      <feature policy='require' name='pschange-mc-no'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-index 7609d49020..d2741375b4 100644
---- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-@@ -46,6 +46,7 @@
-       <feature policy='require' name='pdpe1gb'/>
-       <feature policy='require' name='invtsc'/>
-       <feature policy='require' name='skip-l1dfl-vmentry'/>
-+      <feature policy='require' name='pschange-mc-no'/>
-     </mode>
-     <mode name='custom' supported='yes'>
-       <model usable='yes'>qemu64</model>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Add-support-for-core-capability-CPU-feature.patch b/SOURCES/libvirt-cpu_map-Add-support-for-core-capability-CPU-feature.patch
deleted file mode 100644
index 0140b50..0000000
--- a/SOURCES/libvirt-cpu_map-Add-support-for-core-capability-CPU-feature.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 287c112945dda0837c31348dc3c07ad7ed19596f Mon Sep 17 00:00:00 2001
-Message-Id: <287c112945dda0837c31348dc3c07ad7ed19596f@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Fri, 15 Jan 2021 15:17:20 +0100
-Subject: [PATCH] cpu_map: Add support for core-capability CPU feature
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit e06dd56032acf904da1aedfc097fa0cae7cb0b0f)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1537734
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20210115141722.14986-5-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/cpu_map/x86_features.xml                           | 3 +++
- tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml | 2 +-
- tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml    | 1 +
- tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml     | 1 +
- 4 files changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 70e1c7b3fc..f8c0b9046c 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -350,6 +350,9 @@
-   <feature name='arch-capabilities'> <!-- arch_capabilities, arch-facilities -->
-     <cpuid eax_in='0x07' ecx_in='0x00' edx='0x20000000'/>
-   </feature>
-+  <feature name='core-capability'>
-+    <cpuid eax_in='0x07' ecx_in='0x00' edx='0x40000000'/>
-+  </feature>
-   <feature name='ssbd'>
-     <cpuid eax_in='0x07' ecx_in='0x00' edx='0x80000000'/>
-   </feature>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-index 842c7b4a2a..50e8084140 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-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='0x080041dc' edx='0xb0600000'/>
--  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000020' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000020' edx='0x40000000'/>
-   <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'/>
-   <msr index='0x10a' edx='0x00000000' eax='0x00000100'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-index 0f3e2e506e..4ad95f06b4 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-@@ -37,6 +37,7 @@
-   <feature policy='require' name='md-clear'/>
-   <feature policy='require' name='stibp'/>
-   <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='core-capability'/>
-   <feature policy='require' name='ssbd'/>
-   <feature policy='require' name='xsaveopt'/>
-   <feature policy='require' name='xsavec'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-index 3bd009c1da..cc2b208e6a 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-@@ -47,6 +47,7 @@
-   <feature name='md-clear'/>
-   <feature name='stibp'/>
-   <feature name='arch-capabilities'/>
-+  <feature name='core-capability'/>
-   <feature name='ssbd'/>
-   <feature name='xsaveopt'/>
-   <feature name='xsavec'/>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Add-support-for-fsrm-CPU-feature.patch b/SOURCES/libvirt-cpu_map-Add-support-for-fsrm-CPU-feature.patch
deleted file mode 100644
index c6bd8ab..0000000
--- a/SOURCES/libvirt-cpu_map-Add-support-for-fsrm-CPU-feature.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 7de3eaba72cecf596c732d12485e4f1a6115bf2f Mon Sep 17 00:00:00 2001
-Message-Id: <7de3eaba72cecf596c732d12485e4f1a6115bf2f@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Fri, 15 Jan 2021 15:17:19 +0100
-Subject: [PATCH] cpu_map: Add support for fsrm CPU feature
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 8c5c660b99101544d8cfcb8edbe48688c04bee25)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1537734
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20210115141722.14986-4-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/cpu_map/x86_features.xml                                | 3 +++
- tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml | 2 +-
- tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml    | 1 +
- tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml     | 1 +
- 4 files changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 30d1375437..70e1c7b3fc 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -332,6 +332,9 @@
-   <feature name='avx512-4fmaps'>
-     <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000008'/>
-   </feature>
-+  <feature name='fsrm'>
-+    <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000010'/>
-+  </feature>
-   <feature name='md-clear'> <!-- md_clear -->
-     <cpuid eax_in='0x07' ecx_in='0x00' edx='0x00000400'/>
-   </feature>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml
-index ce65579bcc..33bd1013f0 100644
---- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-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='0x02001000' ecx='0x00400010' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00400010' edx='0x00000010'/>
-   <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-Ice-Lake-Server-guest.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
-index 9b75ace710..3a71b28cfb 100644
---- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-guest.xml
-@@ -24,6 +24,7 @@
-   <feature policy='require' name='sha-ni'/>
-   <feature policy='require' name='ospke'/>
-   <feature policy='require' name='rdpid'/>
-+  <feature policy='require' name='fsrm'/>
-   <feature policy='require' name='stibp'/>
-   <feature policy='require' name='arch-capabilities'/>
-   <feature policy='require' name='xsaves'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
-index efbf9d363b..1582de0422 100644
---- a/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Ice-Lake-Server-host.xml
-@@ -25,6 +25,7 @@
-   <feature name='sha-ni'/>
-   <feature name='ospke'/>
-   <feature name='rdpid'/>
-+  <feature name='fsrm'/>
-   <feature name='stibp'/>
-   <feature name='arch-capabilities'/>
-   <feature name='xsaves'/>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Add-support-for-split-lock-detect-CPU-feature.patch b/SOURCES/libvirt-cpu_map-Add-support-for-split-lock-detect-CPU-feature.patch
deleted file mode 100644
index 9eee928..0000000
--- a/SOURCES/libvirt-cpu_map-Add-support-for-split-lock-detect-CPU-feature.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 4b6dd39819e82b0775e0f324b0b4efa537882878 Mon Sep 17 00:00:00 2001
-Message-Id: <4b6dd39819e82b0775e0f324b0b4efa537882878@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Fri, 15 Jan 2021 15:17:21 +0100
-Subject: [PATCH] cpu_map: Add support for split-lock-detect CPU feature
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 13db542cf3099f7955438e208dbe4b2b4e58067e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1537734
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20210115141722.14986-6-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/cpu_map/x86_features.xml                           | 5 +++++
- tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml | 1 +
- tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml    | 1 +
- tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml     | 1 +
- 4 files changed, 8 insertions(+)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index f8c0b9046c..83d8e641a8 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -574,4 +574,9 @@
-   <feature name='taa-no'>
-     <msr index='0x10a' edx='0x00000000' eax='0x00000100'/>
-   </feature>
-+
-+  <!-- IA32_CORE_CAPABILITIES features -->
-+  <feature name='split-lock-detect'>
-+    <msr index='0xcf' edx='0x00000000' eax='0x00000020'/>
-+  </feature>
- </cpus>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-index 50e8084140..81ffa7bfd3 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-@@ -4,5 +4,6 @@
-   <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000020' edx='0x40000000'/>
-   <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'/>
-+  <msr index='0xcf' edx='0x00000000' eax='0x00000020'/>
-   <msr index='0x10a' edx='0x00000000' eax='0x00000100'/>
- </cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-index 4ad95f06b4..2eeff136c4 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-@@ -53,6 +53,7 @@
-   <feature policy='require' name='mds-no'/>
-   <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='taa-no'/>
-+  <feature policy='require' name='split-lock-detect'/>
-   <feature policy='disable' name='avx'/>
-   <feature policy='disable' name='f16c'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-index cc2b208e6a..b3e9d5c1ff 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-@@ -64,4 +64,5 @@
-   <feature name='mds-no'/>
-   <feature name='pschange-mc-no'/>
-   <feature name='taa-no'/>
-+  <feature name='split-lock-detect'/>
- </cpu>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Define-and-enable-Snowridge-model.patch b/SOURCES/libvirt-cpu_map-Define-and-enable-Snowridge-model.patch
deleted file mode 100644
index 6a04845..0000000
--- a/SOURCES/libvirt-cpu_map-Define-and-enable-Snowridge-model.patch
+++ /dev/null
@@ -1,373 +0,0 @@
-From b177f66b37d0c64216ec579a5211461609a96ea8 Mon Sep 17 00:00:00 2001
-Message-Id: <b177f66b37d0c64216ec579a5211461609a96ea8@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Fri, 15 Jan 2021 15:17:22 +0100
-Subject: [PATCH] cpu_map: Define and enable Snowridge model
-
-Due to missing pdpe1gb support in the host CPU data, the CPU is still
-incorrectly detected as Westmere-IBRS for host capabilities because we
-don't have the option to disable features included in the base model
-there.
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit f0a5cf4b8a8b5a68348df5e8b197f30dd90b3c34)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1537734
-
-Conflicts:
-- src/cpu_map/index.xml: Context
-- src/cpu_map/meson.build: Not present downstream
-- tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml: Not present downstream
-- tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml: Not present downstream
-- tests/domaincapsdata/qemu_5.1.0.x86_64.xml: Not present downstream
-- tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml: Not present downstream
-- tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml: Not present downstream
-- tests/domaincapsdata/qemu_5.2.0.x86_64.xml: Not present downstream
-
-Additions:
-- src/cpu_map/Makefile.inc.am: Replaces upstream change of "meson.build"
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20210115141722.14986-7-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/cpu_map/Makefile.inc.am                   |  1 +
- src/cpu_map/index.xml                         |  1 +
- src/cpu_map/x86_Snowridge.xml                 | 71 +++++++++++++++++++
- .../x86_64-cpuid-Atom-P5362-guest.xml         | 28 ++------
- .../x86_64-cpuid-Atom-P5362-json.xml          | 26 ++-----
- .../domaincapsdata/qemu_4.1.0-q35.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_4.1.0-tcg.x86_64.xml  |  1 +
- tests/domaincapsdata/qemu_4.1.0.x86_64.xml    |  1 +
- .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml  |  1 +
- tests/domaincapsdata/qemu_4.2.0.x86_64.xml    |  1 +
- .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml  |  1 +
- tests/domaincapsdata/qemu_5.0.0.x86_64.xml    |  1 +
- 14 files changed, 92 insertions(+), 44 deletions(-)
- create mode 100644 src/cpu_map/x86_Snowridge.xml
-
-diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
-index aad4b410f9..1dd78c6715 100644
---- a/src/cpu_map/Makefile.inc.am
-+++ b/src/cpu_map/Makefile.inc.am
-@@ -67,6 +67,7 @@ cpumap_DATA = \
- 	cpu_map/x86_Skylake-Server.xml \
- 	cpu_map/x86_Skylake-Server-IBRS.xml \
- 	cpu_map/x86_Skylake-Server-noTSX-IBRS.xml \
-+	cpu_map/x86_Snowridge.xml \
- 	cpu_map/x86_Westmere.xml \
- 	cpu_map/x86_Westmere-IBRS.xml \
- 	$(NULL)
-diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
-index 633b017a93..2f58261e6d 100644
---- a/src/cpu_map/index.xml
-+++ b/src/cpu_map/index.xml
-@@ -55,6 +55,7 @@
-     <include filename="x86_Icelake-Server.xml"/>
-     <include filename="x86_Icelake-Server-noTSX.xml"/>
-     <include filename="x86_Cooperlake.xml"/>
-+    <include filename='x86_Snowridge.xml'/>
- 
-     <!-- AMD CPUs -->
-     <include filename="x86_athlon.xml"/>
-diff --git a/src/cpu_map/x86_Snowridge.xml b/src/cpu_map/x86_Snowridge.xml
-new file mode 100644
-index 0000000000..383a24d367
---- /dev/null
-+++ b/src/cpu_map/x86_Snowridge.xml
-@@ -0,0 +1,71 @@
-+<cpus>
-+  <model name='Snowridge'>
-+    <decode host='on' guest='on'/>
-+    <signature family='6' model='134'/> <!-- 080665 -->
-+    <vendor name='Intel'/>
-+    <feature name='3dnowprefetch'/>
-+    <feature name='aes'/>
-+    <feature name='apic'/>
-+    <feature name='arat'/>
-+    <feature name='arch-capabilities'/>
-+    <feature name='cldemote'/>
-+    <feature name='clflush'/>
-+    <feature name='clflushopt'/>
-+    <feature name='clwb'/>
-+    <feature name='cmov'/>
-+    <feature name='core-capability'/>
-+    <feature name='cx16'/>
-+    <feature name='cx8'/>
-+    <feature name='de'/>
-+    <feature name='erms'/>
-+    <feature name='fpu'/>
-+    <feature name='fsgsbase'/>
-+    <feature name='fxsr'/>
-+    <feature name='gfni'/>
-+    <feature name='lahf_lm'/>
-+    <feature name='lm'/>
-+    <feature name='mca'/>
-+    <feature name='mce'/>
-+    <feature name='mmx'/>
-+    <feature name='movbe'/>
-+    <feature name='movdir64b'/>
-+    <feature name='movdiri'/>
-+    <feature name='msr'/>
-+    <feature name='mtrr'/>
-+    <feature name='nx'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pclmuldq'/>
-+    <feature name='pdpe1gb'/>
-+    <feature name='pge'/>
-+    <feature name='pni'/>
-+    <feature name='popcnt'/>
-+    <feature name='pse'/>
-+    <feature name='pse36'/>
-+    <feature name='rdrand'/>
-+    <feature name='rdseed'/>
-+    <feature name='rdtscp'/>
-+    <feature name='sep'/>
-+    <feature name='sha-ni'/>
-+    <feature name='smap'/>
-+    <feature name='smep'/>
-+    <feature name='spec-ctrl'/>
-+    <feature name='split-lock-detect'/>
-+    <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='vme'/>
-+    <feature name='x2apic'/>
-+    <feature name='xgetbv1'/>
-+    <feature name='xsave'/>
-+    <feature name='xsavec'/>
-+    <feature name='xsaveopt'/>
-+  </model>
-+</cpus>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-index 2eeff136c4..f28e70b9e0 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>IvyBridge-IBRS</model>
-+  <model fallback='forbid'>Snowridge</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ds'/>
-   <feature policy='require' name='acpi'/>
-@@ -16,36 +16,17 @@
-   <feature policy='require' name='tm2'/>
-   <feature policy='require' name='xtpr'/>
-   <feature policy='require' name='pdcm'/>
--  <feature policy='require' name='movbe'/>
-   <feature policy='require' name='osxsave'/>
--  <feature policy='require' name='arat'/>
-   <feature policy='require' name='tsc_adjust'/>
-   <feature policy='require' name='cmt'/>
--  <feature policy='require' name='rdseed'/>
--  <feature policy='require' name='smap'/>
--  <feature policy='require' name='clflushopt'/>
--  <feature policy='require' name='clwb'/>
-   <feature policy='require' name='intel-pt'/>
--  <feature policy='require' name='sha-ni'/>
--  <feature policy='require' name='umip'/>
-   <feature policy='require' name='waitpkg'/>
--  <feature policy='require' name='gfni'/>
-   <feature policy='require' name='rdpid'/>
--  <feature policy='require' name='cldemote'/>
--  <feature policy='require' name='movdiri'/>
--  <feature policy='require' name='movdir64b'/>
-   <feature policy='require' name='md-clear'/>
-   <feature policy='require' name='stibp'/>
--  <feature policy='require' name='arch-capabilities'/>
--  <feature policy='require' name='core-capability'/>
--  <feature policy='require' name='ssbd'/>
--  <feature policy='require' name='xsaveopt'/>
--  <feature policy='require' name='xsavec'/>
--  <feature policy='require' name='xgetbv1'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='mbm_total'/>
-   <feature policy='require' name='mbm_local'/>
--  <feature policy='require' name='3dnowprefetch'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='rdctl-no'/>
-   <feature policy='require' name='ibrs-all'/>
-@@ -53,7 +34,8 @@
-   <feature policy='require' name='mds-no'/>
-   <feature policy='require' name='pschange-mc-no'/>
-   <feature policy='require' name='taa-no'/>
--  <feature policy='require' name='split-lock-detect'/>
--  <feature policy='disable' name='avx'/>
--  <feature policy='disable' name='f16c'/>
-+  <feature policy='disable' name='mpx'/>
-+  <feature policy='disable' name='core-capability'/>
-+  <feature policy='disable' name='pdpe1gb'/>
-+  <feature policy='disable' name='split-lock-detect'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml
-index ca685d2f80..bbe0919706 100644
---- a/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml
-@@ -1,33 +1,15 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>IvyBridge-IBRS</model>
-+  <model fallback='forbid'>Snowridge</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ss'/>
-   <feature policy='require' name='vmx'/>
-   <feature policy='require' name='pdcm'/>
--  <feature policy='require' name='movbe'/>
-   <feature policy='require' name='hypervisor'/>
--  <feature policy='require' name='arat'/>
-   <feature policy='require' name='tsc_adjust'/>
--  <feature policy='require' name='rdseed'/>
--  <feature policy='require' name='smap'/>
--  <feature policy='require' name='clflushopt'/>
--  <feature policy='require' name='clwb'/>
--  <feature policy='require' name='sha-ni'/>
--  <feature policy='require' name='umip'/>
--  <feature policy='require' name='gfni'/>
-   <feature policy='require' name='rdpid'/>
--  <feature policy='require' name='cldemote'/>
--  <feature policy='require' name='movdiri'/>
--  <feature policy='require' name='movdir64b'/>
-   <feature policy='require' name='md-clear'/>
-   <feature policy='require' name='stibp'/>
--  <feature policy='require' name='arch-capabilities'/>
--  <feature policy='require' name='ssbd'/>
--  <feature policy='require' name='xsaveopt'/>
--  <feature policy='require' name='xsavec'/>
--  <feature policy='require' name='xgetbv1'/>
-   <feature policy='require' name='xsaves'/>
--  <feature policy='require' name='3dnowprefetch'/>
-   <feature policy='require' name='ibpb'/>
-   <feature policy='require' name='amd-stibp'/>
-   <feature policy='require' name='amd-ssbd'/>
-@@ -36,6 +18,8 @@
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-   <feature policy='require' name='mds-no'/>
-   <feature policy='require' name='pschange-mc-no'/>
--  <feature policy='disable' name='avx'/>
--  <feature policy='disable' name='f16c'/>
-+  <feature policy='disable' name='mpx'/>
-+  <feature policy='disable' name='core-capability'/>
-+  <feature policy='disable' name='pdpe1gb'/>
-+  <feature policy='disable' name='split-lock-detect'/>
- </cpu>
-diff --git a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
-index f4ddb66e38..228acde33b 100644
---- a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
-@@ -63,6 +63,7 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-       <model usable='yes'>Skylake-Client-IBRS</model>
-diff --git a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
-index d6265ce243..bda1aba8ed 100644
---- a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
-@@ -75,6 +75,7 @@
-       <model usable='yes'>athlon</model>
-       <model usable='no'>Westmere-IBRS</model>
-       <model usable='no'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-       <model usable='no'>Skylake-Client-IBRS</model>
-diff --git a/tests/domaincapsdata/qemu_4.1.0.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0.x86_64.xml
-index bcc8bbcc7a..bb53138712 100644
---- a/tests/domaincapsdata/qemu_4.1.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.1.0.x86_64.xml
-@@ -62,6 +62,7 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-       <model usable='yes'>Skylake-Client-IBRS</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-index 4d9616cb69..0a3f3ef564 100644
---- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
-@@ -64,6 +64,7 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-index bcaf9afd6f..e64b647f51 100644
---- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
-@@ -75,6 +75,7 @@
-       <model usable='yes'>athlon</model>
-       <model usable='no'>Westmere-IBRS</model>
-       <model usable='no'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-index 5210c917aa..5525758a48 100644
---- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
-@@ -63,6 +63,7 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-index b2a7087a0e..4cb4bf6cce 100644
---- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-@@ -64,6 +64,7 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-index 39b11fb634..b5986404ae 100644
---- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-@@ -74,6 +74,7 @@
-       <model usable='yes'>athlon</model>
-       <model usable='no'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-index 3a1ee23302..0297ce600b 100644
---- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-@@ -63,6 +63,7 @@
-       <model usable='no'>athlon</model>
-       <model usable='yes'>Westmere-IBRS</model>
-       <model usable='yes'>Westmere</model>
-+      <model usable='no'>Snowridge</model>
-       <model usable='no'>Skylake-Server-noTSX-IBRS</model>
-       <model usable='no'>Skylake-Server-IBRS</model>
-       <model usable='no'>Skylake-Server</model>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Defined-and-enable-EPYC-Rome-model.patch b/SOURCES/libvirt-cpu_map-Defined-and-enable-EPYC-Rome-model.patch
deleted file mode 100644
index 0e6323a..0000000
--- a/SOURCES/libvirt-cpu_map-Defined-and-enable-EPYC-Rome-model.patch
+++ /dev/null
@@ -1,310 +0,0 @@
-From f441299f1b589a60199156a217c5f49fc9de954d Mon Sep 17 00:00:00 2001
-Message-Id: <f441299f1b589a60199156a217c5f49fc9de954d@dist-git>
-From: Markus Schade <markus.schade@hetzner.com>
-Date: Thu, 8 Oct 2020 18:01:25 +0200
-Subject: [PATCH] cpu_map: Defined and enable EPYC-Rome model
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Markus Schade <markus.schade@hetzner.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit f941639f86f4bc66c106eb1291f1b58cf9e24680)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861506
-
-Conflicts:
-	src/cpu_map/meson.build
-            - the corresponding change was applied to Makefile.inc.am as
-              downstream still uses autotools
-
-	tests/cputest.c
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
-            - test data for Ryzen 9 3900X are not present downstream
-
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-	tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml
-	tests/domaincapsdata/qemu_5.2.0.x86_64.xml
-            - not present downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <bc87b8a0b0c408f380792eaf63ff07551185d3a5.1602172344.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/Makefile.inc.am                   |  1 +
- src/cpu_map/index.xml                         |  1 +
- src/cpu_map/x86_EPYC-Rome.xml                 | 84 +++++++++++++++++++
- .../x86_64-cpuid-EPYC-7502-32-Core-guest.xml  | 12 +--
- .../x86_64-cpuid-EPYC-7502-32-Core-host.xml   | 12 +--
- .../x86_64-cpuid-EPYC-7502-32-Core-json.xml   | 12 +--
- .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml  |  1 +
- .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml  |  1 +
- tests/domaincapsdata/qemu_5.0.0.x86_64.xml    |  1 +
- 9 files changed, 92 insertions(+), 33 deletions(-)
- create mode 100644 src/cpu_map/x86_EPYC-Rome.xml
-
-diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
-index b949cb0bea..aad4b410f9 100644
---- a/src/cpu_map/Makefile.inc.am
-+++ b/src/cpu_map/Makefile.inc.am
-@@ -30,6 +30,7 @@ cpumap_DATA = \
- 	cpu_map/x86_Dhyana.xml \
- 	cpu_map/x86_EPYC.xml \
- 	cpu_map/x86_EPYC-IBPB.xml \
-+	cpu_map/x86_EPYC-Rome.xml \
- 	cpu_map/x86_Haswell.xml \
- 	cpu_map/x86_Haswell-IBRS.xml \
- 	cpu_map/x86_Haswell-noTSX.xml \
-diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml
-index ff1da2e677..633b017a93 100644
---- a/src/cpu_map/index.xml
-+++ b/src/cpu_map/index.xml
-@@ -66,6 +66,7 @@
-     <include filename="x86_Opteron_G5.xml"/>
-     <include filename="x86_EPYC.xml"/>
-     <include filename="x86_EPYC-IBPB.xml"/>
-+    <include filename="x86_EPYC-Rome.xml"/>
- 
-     <!-- Hygon CPU models -->
-     <include filename="x86_Dhyana.xml"/>
-diff --git a/src/cpu_map/x86_EPYC-Rome.xml b/src/cpu_map/x86_EPYC-Rome.xml
-new file mode 100644
-index 0000000000..99fc015fdd
---- /dev/null
-+++ b/src/cpu_map/x86_EPYC-Rome.xml
-@@ -0,0 +1,84 @@
-+<cpus>
-+  <model name='EPYC-Rome'>
-+    <decode host='on' guest='on'/>
-+    <signature family='23' model='49'/>
-+    <vendor name='AMD'/>
-+    <feature name='3dnowprefetch'/>
-+    <feature name='abm'/>
-+    <feature name='adx'/>
-+    <feature name='aes'/>
-+    <feature name='amd-stibp'/>
-+    <feature name='apic'/>
-+    <feature name='arat'/>
-+    <feature name='avx'/>
-+    <feature name='avx2'/>
-+    <feature name='bmi1'/>
-+    <feature name='bmi2'/>
-+    <feature name='clflush'/>
-+    <feature name='clflushopt'/>
-+    <feature name='clwb'/>
-+    <feature name='clzero'/>
-+    <feature name='cmov'/>
-+    <feature name='cr8legacy'/>
-+    <feature name='cx16'/>
-+    <feature name='cx8'/>
-+    <feature name='de'/>
-+    <feature name='f16c'/>
-+    <feature name='fma'/>
-+    <feature name='fpu'/>
-+    <feature name='fsgsbase'/>
-+    <feature name='fxsr'/>
-+    <feature name='fxsr_opt'/>
-+    <feature name='ibpb'/>
-+    <feature name='lahf_lm'/>
-+    <feature name='lm'/>
-+    <feature name='mca'/>
-+    <feature name='mce'/>
-+    <feature name='misalignsse'/>
-+    <feature name='mmx'/>
-+    <feature name='mmxext'/>
-+    <feature name='monitor'/>
-+    <feature name='movbe'/>
-+    <feature name='msr'/>
-+    <feature name='mtrr'/>
-+    <feature name='npt'/>
-+    <feature name='nrip-save'/>
-+    <feature name='nx'/>
-+    <feature name='osvw'/>
-+    <feature name='pae'/>
-+    <feature name='pat'/>
-+    <feature name='pclmuldq'/>
-+    <feature name='pdpe1gb'/>
-+    <feature name='perfctr_core'/>
-+    <feature name='pge'/>
-+    <feature name='pni'/>
-+    <feature name='popcnt'/>
-+    <feature name='pse'/>
-+    <feature name='pse36'/>
-+    <feature name='rdpid'/>
-+    <feature name='rdrand'/>
-+    <feature name='rdseed'/>
-+    <feature name='rdtscp'/>
-+    <feature name='sep'/>
-+    <feature name='sha-ni'/>
-+    <feature name='smap'/>
-+    <feature name='smep'/>
-+    <feature name='sse'/>
-+    <feature name='sse2'/>
-+    <feature name='sse4.1'/>
-+    <feature name='sse4.2'/>
-+    <feature name='sse4a'/>
-+    <feature name='ssse3'/>
-+    <feature name='svm'/>
-+    <feature name='syscall'/>
-+    <feature name='tsc'/>
-+    <feature name='umip'/>
-+    <feature name='vme'/>
-+    <feature name='wbnoinvd'/>
-+    <feature name='xgetbv1'/>
-+    <feature name='xsave'/>
-+    <feature name='xsavec'/>
-+    <feature name='xsaveerptr'/>
-+    <feature name='xsaveopt'/>
-+  </model>
-+</cpus>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-index 1320f65a58..cb2caab6f5 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-@@ -1,12 +1,9 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>EPYC-IBPB</model>
-+  <model fallback='forbid'>EPYC-Rome</model>
-   <vendor>AMD</vendor>
-   <feature policy='require' name='ht'/>
-   <feature policy='require' name='osxsave'/>
-   <feature policy='require' name='cmt'/>
--  <feature policy='require' name='clwb'/>
--  <feature policy='require' name='umip'/>
--  <feature policy='require' name='rdpid'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='mbm_total'/>
-   <feature policy='require' name='mbm_local'/>
-@@ -17,18 +14,11 @@
-   <feature policy='require' name='wdt'/>
-   <feature policy='require' name='tce'/>
-   <feature policy='require' name='topoext'/>
--  <feature policy='require' name='perfctr_core'/>
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
--  <feature policy='require' name='clzero'/>
--  <feature policy='require' name='xsaveerptr'/>
--  <feature policy='require' name='wbnoinvd'/>
--  <feature policy='require' name='amd-stibp'/>
-   <feature policy='require' name='amd-ssbd'/>
--  <feature policy='require' name='npt'/>
-   <feature policy='require' name='lbrv'/>
-   <feature policy='require' name='svm-lock'/>
--  <feature policy='require' name='nrip-save'/>
-   <feature policy='require' name='tsc-scale'/>
-   <feature policy='require' name='vmcb-clean'/>
-   <feature policy='require' name='flushbyasid'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-index 37905ec812..b6784f9eba 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-@@ -1,13 +1,10 @@
- <cpu>
-   <arch>x86_64</arch>
--  <model>EPYC-IBPB</model>
-+  <model>EPYC-Rome</model>
-   <vendor>AMD</vendor>
-   <feature name='ht'/>
-   <feature name='osxsave'/>
-   <feature name='cmt'/>
--  <feature name='clwb'/>
--  <feature name='umip'/>
--  <feature name='rdpid'/>
-   <feature name='xsaves'/>
-   <feature name='mbm_total'/>
-   <feature name='mbm_local'/>
-@@ -18,18 +15,11 @@
-   <feature name='wdt'/>
-   <feature name='tce'/>
-   <feature name='topoext'/>
--  <feature name='perfctr_core'/>
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
--  <feature name='clzero'/>
--  <feature name='xsaveerptr'/>
--  <feature name='wbnoinvd'/>
--  <feature name='amd-stibp'/>
-   <feature name='amd-ssbd'/>
--  <feature name='npt'/>
-   <feature name='lbrv'/>
-   <feature name='svm-lock'/>
--  <feature name='nrip-save'/>
-   <feature name='tsc-scale'/>
-   <feature name='vmcb-clean'/>
-   <feature name='flushbyasid'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-index 225cf63852..86466c0547 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-@@ -1,28 +1,18 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>EPYC-IBPB</model>
-+  <model fallback='forbid'>EPYC-Rome</model>
-   <vendor>AMD</vendor>
-   <feature policy='require' name='x2apic'/>
-   <feature policy='require' name='tsc-deadline'/>
-   <feature policy='require' name='hypervisor'/>
-   <feature policy='require' name='tsc_adjust'/>
--  <feature policy='require' name='clwb'/>
--  <feature policy='require' name='umip'/>
--  <feature policy='require' name='rdpid'/>
-   <feature policy='require' name='spec-ctrl'/>
-   <feature policy='require' name='stibp'/>
-   <feature policy='require' name='arch-capabilities'/>
-   <feature policy='require' name='ssbd'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='cmp_legacy'/>
--  <feature policy='require' name='perfctr_core'/>
--  <feature policy='require' name='clzero'/>
--  <feature policy='require' name='xsaveerptr'/>
--  <feature policy='require' name='wbnoinvd'/>
--  <feature policy='require' name='amd-stibp'/>
-   <feature policy='require' name='amd-ssbd'/>
-   <feature policy='require' name='virt-ssbd'/>
--  <feature policy='require' name='npt'/>
--  <feature policy='require' name='nrip-save'/>
-   <feature policy='require' name='rdctl-no'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-   <feature policy='require' name='mds-no'/>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-index 7bfd786ff6..b2a7087a0e 100644
---- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-@@ -90,6 +90,7 @@
-       <model usable='yes'>Haswell-noTSX</model>
-       <model usable='yes'>Haswell-IBRS</model>
-       <model usable='yes'>Haswell</model>
-+      <model usable='no'>EPYC-Rome</model>
-       <model usable='no'>EPYC-IBPB</model>
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-index eb456dea28..39b11fb634 100644
---- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-@@ -100,6 +100,7 @@
-       <model usable='no'>Haswell-noTSX</model>
-       <model usable='no'>Haswell-IBRS</model>
-       <model usable='no'>Haswell</model>
-+      <model usable='no'>EPYC-Rome</model>
-       <model usable='no'>EPYC-IBPB</model>
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-index d6ee66ab60..3a1ee23302 100644
---- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-@@ -89,6 +89,7 @@
-       <model usable='yes'>Haswell-noTSX</model>
-       <model usable='yes'>Haswell-IBRS</model>
-       <model usable='yes'>Haswell</model>
-+      <model usable='no'>EPYC-Rome</model>
-       <model usable='no'>EPYC-IBPB</model>
-       <model usable='no'>EPYC</model>
-       <model usable='no'>Dhyana</model>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-cpu_map-Distinguish-Cascadelake-Server-from-Skylake-Server.patch b/SOURCES/libvirt-cpu_map-Distinguish-Cascadelake-Server-from-Skylake-Server.patch
deleted file mode 100644
index ff72f17..0000000
--- a/SOURCES/libvirt-cpu_map-Distinguish-Cascadelake-Server-from-Skylake-Server.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-From f1926a0cb9147ce54484858f5e0f7376ee9ac648 Mon Sep 17 00:00:00 2001
-Message-Id: <f1926a0cb9147ce54484858f5e0f7376ee9ac648@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:37 +0200
-Subject: [PATCH] cpu_map: Distinguish Cascadelake-Server from Skylake-Server
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The signatures of these two CPU model differ only in stepping as both
-report family 6 and model 85. Skylake-Server uses stepping 4 or less and
-Cascadelake-Server uses stepping 5..7.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1761678
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5d6059f8ec16d64f240dc5e6413ca55a3b46b3f7)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <8711c401083e2605e7d8734764a5fe1b092749b0.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_Cascadelake-Server-noTSX.xml            | 2 +-
- src/cpu_map/x86_Cascadelake-Server.xml                  | 2 +-
- src/cpu_map/x86_Skylake-Server-IBRS.xml                 | 2 +-
- src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml           | 2 +-
- src/cpu_map/x86_Skylake-Server.xml                      | 2 +-
- tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml | 5 +++--
- tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml  | 5 +++--
- 7 files changed, 11 insertions(+), 9 deletions(-)
-
-diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-index 459174a30d..bfd4629836 100644
---- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Cascadelake-Server-noTSX'>
-     <decode host='on' guest='off'/>
--    <signature family='6' model='85'/> <!-- 050654 -->
-+    <signature family='6' model='85' stepping='5-7'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
-diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml
-index d7ec42f57e..335e9cb584 100644
---- a/src/cpu_map/x86_Cascadelake-Server.xml
-+++ b/src/cpu_map/x86_Cascadelake-Server.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Cascadelake-Server'>
-     <decode host='on' guest='on'/>
--    <signature family='6' model='85'/> <!-- 050654 -->
-+    <signature family='6' model='85' stepping='5-7'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
-diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml
-index bd6b6457ad..9fb3488809 100644
---- a/src/cpu_map/x86_Skylake-Server-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Skylake-Server-IBRS'>
-     <decode host='on' guest='on'/>
--    <signature family='6' model='85'/> <!-- 050654 -->
-+    <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
-diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-index c2b7de40e8..c162c0acc3 100644
---- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Skylake-Server-noTSX-IBRS'>
-     <decode host='on' guest='off'/>
--    <signature family='6' model='85'/> <!-- 050654 -->
-+    <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
-diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml
-index f96875a85f..e022d94c84 100644
---- a/src/cpu_map/x86_Skylake-Server.xml
-+++ b/src/cpu_map/x86_Skylake-Server.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Skylake-Server'>
-     <decode host='on' guest='on'/>
--    <signature family='6' model='85'/> <!-- 050654 -->
-+    <signature family='6' model='85' stepping='0-4'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
-index cfb0eb982d..c21cb1e600 100644
---- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Cascadelake-Server</model>
-+  <model fallback='forbid'>Skylake-Server-IBRS</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ds'/>
-   <feature policy='require' name='acpi'/>
-@@ -20,14 +20,15 @@
-   <feature policy='require' name='osxsave'/>
-   <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='ospke'/>
-   <feature policy='require' name='md-clear'/>
-   <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='ssbd'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='mbm_total'/>
-   <feature policy='require' name='mbm_local'/>
-   <feature policy='require' name='invtsc'/>
--  <feature policy='disable' name='avx512vnni'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
-index 968d904557..b482043ccf 100644
---- a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
-@@ -1,16 +1,17 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Cascadelake-Server</model>
-+  <model fallback='forbid'>Skylake-Server-IBRS</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ss'/>
-   <feature policy='require' name='vmx'/>
-   <feature policy='require' name='hypervisor'/>
-   <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='clflushopt'/>
-   <feature policy='require' name='umip'/>
-   <feature policy='require' name='pku'/>
-   <feature policy='require' name='md-clear'/>
-   <feature policy='require' name='stibp'/>
-   <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='ssbd'/>
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
--  <feature policy='disable' name='avx512vnni'/>
- </cpu>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Distribute-x86_Cooperlake.xml.patch b/SOURCES/libvirt-cpu_map-Distribute-x86_Cooperlake.xml.patch
deleted file mode 100644
index cdbabf5..0000000
--- a/SOURCES/libvirt-cpu_map-Distribute-x86_Cooperlake.xml.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From a48703c3f77054ba1bdfa1adf3aa8277814874d1 Mon Sep 17 00:00:00 2001
-Message-Id: <a48703c3f77054ba1bdfa1adf3aa8277814874d1@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 28 May 2020 09:50:05 +0200
-Subject: [PATCH] cpu_map: Distribute x86_Cooperlake.xml
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 1c425857fb9f652c7811f075f3d31ff561b95632)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1781878
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <98b6a65536435b8130694e50adc9f39ff3110d90.1590652079.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/Makefile.inc.am | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
-index be64c9a0d4..b949cb0bea 100644
---- a/src/cpu_map/Makefile.inc.am
-+++ b/src/cpu_map/Makefile.inc.am
-@@ -22,6 +22,7 @@ cpumap_DATA = \
- 	cpu_map/x86_Cascadelake-Server.xml \
- 	cpu_map/x86_Cascadelake-Server-noTSX.xml \
- 	cpu_map/x86_Conroe.xml \
-+	cpu_map/x86_Cooperlake.xml \
- 	cpu_map/x86_core2duo.xml \
- 	cpu_map/x86_coreduo.xml \
- 	cpu_map/x86_cpu64-rhel5.xml \
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Don-t-use-new-noTSX-models-for-host-model-CPUs.patch b/SOURCES/libvirt-cpu_map-Don-t-use-new-noTSX-models-for-host-model-CPUs.patch
deleted file mode 100644
index e14d208..0000000
--- a/SOURCES/libvirt-cpu_map-Don-t-use-new-noTSX-models-for-host-model-CPUs.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 2268a9862c16c87007bfbae117d345268f8420e4 Mon Sep 17 00:00:00 2001
-Message-Id: <2268a9862c16c87007bfbae117d345268f8420e4@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:58 +0200
-Subject: [PATCH] cpu_map: Don't use new noTSX models for host-model CPUs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Host-model CPU definitions (and domain capabilities) will use the
-original CPU models (without noTSX in their name) and explicitly disable
-hle and rtm features. This way domains with host-model CPUs will be
-migratable even to older versions of libvirt which do not support the
-noTSX model variants.
-
-The new models will be advertised in host capabilities and they may
-be used explicitly with custom CPUs.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit 17cdefe5f197030c70a0d250f3c5387b41663516)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840008
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <d27a0adb8f142f053fbd830947f03bad04eff264.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_Cascadelake-Server-noTSX.xml           | 2 +-
- src/cpu_map/x86_Icelake-Client-noTSX.xml               | 2 +-
- src/cpu_map/x86_Icelake-Server-noTSX.xml               | 2 +-
- src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml          | 2 +-
- src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml          | 2 +-
- tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml | 4 +++-
- tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml  | 4 +++-
- 7 files changed, 11 insertions(+), 7 deletions(-)
-
-diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-index 5adea664e9..459174a30d 100644
---- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-+++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml
-@@ -1,6 +1,6 @@
- <cpus>
-   <model name='Cascadelake-Server-noTSX'>
--    <decode host='on' guest='on'/>
-+    <decode host='on' guest='off'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Icelake-Client-noTSX.xml b/src/cpu_map/x86_Icelake-Client-noTSX.xml
-index 540732af6f..65e648ae21 100644
---- a/src/cpu_map/x86_Icelake-Client-noTSX.xml
-+++ b/src/cpu_map/x86_Icelake-Client-noTSX.xml
-@@ -1,6 +1,6 @@
- <cpus>
-   <model name='Icelake-Client-noTSX'>
--    <decode host='on' guest='on'/>
-+    <decode host='on' guest='off'/>
-     <signature family='6' model='126'/> <!-- 0706e0 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-index 5a53da23c7..2fd6906406 100644
---- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
-+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-@@ -1,6 +1,6 @@
- <cpus>
-   <model name='Icelake-Server-noTSX'>
--    <decode host='on' guest='on'/>
-+    <decode host='on' guest='off'/>
-     <signature family='6' model='134'/> <!-- 080660 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-index 0c2f1e6ac4..ffba34502a 100644
---- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml
-@@ -1,6 +1,6 @@
- <cpus>
-   <model name='Skylake-Client-noTSX-IBRS'>
--    <decode host='on' guest='on'/>
-+    <decode host='on' guest='off'/>
-     <signature family='6' model='94'/> <!-- 0506e0 -->
-     <signature family='6' model='78'/> <!-- 0406e0 -->
-     <!-- These are Kaby Lake and Coffee Lake successors to Skylake,
-diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-index 91a206f575..c2b7de40e8 100644
---- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-+++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml
-@@ -1,6 +1,6 @@
- <cpus>
-   <model name='Skylake-Server-noTSX-IBRS'>
--    <decode host='on' guest='on'/>
-+    <decode host='on' guest='off'/>
-     <signature family='6' model='85'/> <!-- 050654 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-index e03c4a06ba..92404e4d03 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
-+  <model fallback='forbid'>Skylake-Client-IBRS</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ds'/>
-   <feature policy='require' name='acpi'/>
-@@ -26,4 +26,6 @@
-   <feature policy='require' name='pdpe1gb'/>
-   <feature policy='require' name='invtsc'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='disable' name='hle'/>
-+  <feature policy='disable' name='rtm'/>
- </cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-index 3d8e6775bf..645c0934c2 100644
---- a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-@@ -1,5 +1,5 @@
- <cpu mode='custom' match='exact'>
--  <model fallback='forbid'>Skylake-Client-noTSX-IBRS</model>
-+  <model fallback='forbid'>Skylake-Client-IBRS</model>
-   <vendor>Intel</vendor>
-   <feature policy='require' name='ss'/>
-   <feature policy='require' name='vmx'/>
-@@ -14,4 +14,6 @@
-   <feature policy='require' name='xsaves'/>
-   <feature policy='require' name='pdpe1gb'/>
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='disable' name='hle'/>
-+  <feature policy='disable' name='rtm'/>
- </cpu>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_map-Fix-Icelake-Server-model-number.patch b/SOURCES/libvirt-cpu_map-Fix-Icelake-Server-model-number.patch
deleted file mode 100644
index 0ec9af6..0000000
--- a/SOURCES/libvirt-cpu_map-Fix-Icelake-Server-model-number.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From a6293a2b28a65f3c9ae0dcf387b222ebd242fa63 Mon Sep 17 00:00:00 2001
-Message-Id: <a6293a2b28a65f3c9ae0dcf387b222ebd242fa63@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Fri, 15 Jan 2021 15:17:17 +0100
-Subject: [PATCH] cpu_map: Fix Icelake Server model number
-
-See arch/x86/include/asm/intel-family.h in the Kernel:
-  #define INTEL_FAM6_ICELAKE_X		0x6A
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 1278ac6265589cd83cc2e661056c860e98105507)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1537734
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20210115141722.14986-2-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/cpu_map/x86_Icelake-Server-noTSX.xml | 2 +-
- src/cpu_map/x86_Icelake-Server.xml       | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-index 2fd6906406..34a0f7c18c 100644
---- a/src/cpu_map/x86_Icelake-Server-noTSX.xml
-+++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Icelake-Server-noTSX'>
-     <decode host='on' guest='off'/>
--    <signature family='6' model='134'/> <!-- 080660 -->
-+    <signature family='6' model='106'/> <!-- 0606A5 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
-diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml
-index 367ade7240..1ee4ea9cd4 100644
---- a/src/cpu_map/x86_Icelake-Server.xml
-+++ b/src/cpu_map/x86_Icelake-Server.xml
-@@ -1,7 +1,7 @@
- <cpus>
-   <model name='Icelake-Server'>
-     <decode host='on' guest='on'/>
--    <signature family='6' model='134'/> <!-- 080660 -->
-+    <signature family='6' model='106'/> <!-- 0606A5 -->
-     <vendor name='Intel'/>
-     <feature name='3dnowprefetch'/>
-     <feature name='abm'/>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Fix-spelling-of-svme-addr-chk-feature.patch b/SOURCES/libvirt-cpu_map-Fix-spelling-of-svme-addr-chk-feature.patch
deleted file mode 100644
index a603df9..0000000
--- a/SOURCES/libvirt-cpu_map-Fix-spelling-of-svme-addr-chk-feature.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From a7fb45c4e5a807a7b437a91cfc96c8c811351578 Mon Sep 17 00:00:00 2001
-Message-Id: <a7fb45c4e5a807a7b437a91cfc96c8c811351578@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 4 Mar 2021 09:41:53 +0100
-Subject: [PATCH] cpu_map: Fix spelling of svme-addr-chk feature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Commit a208176ca1d9eedf8aa6bf12fde6a7a9579ab549 introduced this feature
-with an incorrect "svme-addr-check" spelling.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
-(cherry picked from commit b5abf9a192248b1005f63a7102d2627375d70fe5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1926864
-
-Conflicts:
-	src/cpu_map/sync_qemu_i386.py
-            - the original change to this file was not backported
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <75071287f9fc55f4bec82916726fcb8f31c1e014.1614847231.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_EPYC-Milan.xml | 2 +-
- src/cpu_map/x86_features.xml   | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu_map/x86_EPYC-Milan.xml b/src/cpu_map/x86_EPYC-Milan.xml
-index 53f0cd6aac..3055e175fa 100644
---- a/src/cpu_map/x86_EPYC-Milan.xml
-+++ b/src/cpu_map/x86_EPYC-Milan.xml
-@@ -76,7 +76,7 @@
-     <feature name='sse4a'/>
-     <feature name='ssse3'/>
-     <feature name='svm'/>
--    <feature name='svme-addr-check'/>
-+    <feature name='svme-addr-chk'/>
-     <feature name='syscall'/>
-     <feature name='tsc'/>
-     <feature name='umip'/>
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 8acd42f796..ba23f553c3 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -548,7 +548,7 @@
-   <feature name='pfthreshold'>
-     <cpuid eax_in='0x8000000a' edx='0x00001000'/>
-   </feature>
--  <feature name='svme-addr-check'>
-+  <feature name='svme-addr-chk'>
-     <cpuid eax_in='0x8000000a' edx='0x10000000'/>
-   </feature>
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Install-x86_EPYC-Milan.xml.patch b/SOURCES/libvirt-cpu_map-Install-x86_EPYC-Milan.xml.patch
deleted file mode 100644
index 4652d0e..0000000
--- a/SOURCES/libvirt-cpu_map-Install-x86_EPYC-Milan.xml.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 8b1e1aa7cb9dc428a36b549a73286ec7040864ed Mon Sep 17 00:00:00 2001
-Message-Id: <8b1e1aa7cb9dc428a36b549a73286ec7040864ed@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Wed, 3 Mar 2021 11:11:55 +0100
-Subject: [PATCH] cpu_map: Install x86_EPYC-Milan.xml
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-(cherry picked from commit d3de79dbfc20dc4dfc19154b16079861c542b71e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1926864
-
-Conflicts:
-	src/cpu_map/meson.build
-            - change goes to Makefile.inc.am instead
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <77cf69a7222fd9fc5ef0f1c25f0534090c29865f.1614766279.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/Makefile.inc.am | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/cpu_map/Makefile.inc.am b/src/cpu_map/Makefile.inc.am
-index 1dd78c6715..45dbe9e216 100644
---- a/src/cpu_map/Makefile.inc.am
-+++ b/src/cpu_map/Makefile.inc.am
-@@ -30,6 +30,7 @@ cpumap_DATA = \
- 	cpu_map/x86_Dhyana.xml \
- 	cpu_map/x86_EPYC.xml \
- 	cpu_map/x86_EPYC-IBPB.xml \
-+	cpu_map/x86_EPYC-Milan.xml \
- 	cpu_map/x86_EPYC-Rome.xml \
- 	cpu_map/x86_Haswell.xml \
- 	cpu_map/x86_Haswell-IBRS.xml \
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpu_map-Remove-monitor-feature-from-EPYC-Rome.patch b/SOURCES/libvirt-cpu_map-Remove-monitor-feature-from-EPYC-Rome.patch
deleted file mode 100644
index 09af67b..0000000
--- a/SOURCES/libvirt-cpu_map-Remove-monitor-feature-from-EPYC-Rome.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From b91bb231645300a29ab82994a003ba22835ee994 Mon Sep 17 00:00:00 2001
-Message-Id: <b91bb231645300a29ab82994a003ba22835ee994@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 8 Oct 2020 18:01:26 +0200
-Subject: [PATCH] cpu_map: Remove monitor feature from EPYC-Rome
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The feature is filtered by KVM and never automatically enabled. So even
-though QEMU definition of EPYC-Rome contains this feature, the guest
-won't see it. Also domain capabilities will show it as disabled for KVM
-domains. Thus the feature should not really be included in our
-definition of EPYC-Rome.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 3bf6f9fe22dfbd3c1dcc614b31f2f4fe8b71a2f2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1861506
-
-Conflicts:
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-guest.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-host.xml
-	tests/cputestdata/x86_64-cpuid-Ryzen-9-3900X-12-Core-json.xml
-	tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.1.0.x86_64.xml
-	tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml
-	tests/domaincapsdata/qemu_5.2.0.x86_64.xml
-            - not present downstream
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <74b9257f49925312b025a99dd934a9613ca295d4.1602172344.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_EPYC-Rome.xml                              | 1 -
- tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml | 1 +
- tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml  | 1 +
- tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml  | 1 -
- 4 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu_map/x86_EPYC-Rome.xml b/src/cpu_map/x86_EPYC-Rome.xml
-index 99fc015fdd..e54d0a48d8 100644
---- a/src/cpu_map/x86_EPYC-Rome.xml
-+++ b/src/cpu_map/x86_EPYC-Rome.xml
-@@ -37,7 +37,6 @@
-     <feature name='misalignsse'/>
-     <feature name='mmx'/>
-     <feature name='mmxext'/>
--    <feature name='monitor'/>
-     <feature name='movbe'/>
-     <feature name='msr'/>
-     <feature name='mtrr'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-index cb2caab6f5..6d95b508b2 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-@@ -2,6 +2,7 @@
-   <model fallback='forbid'>EPYC-Rome</model>
-   <vendor>AMD</vendor>
-   <feature policy='require' name='ht'/>
-+  <feature policy='require' name='monitor'/>
-   <feature policy='require' name='osxsave'/>
-   <feature policy='require' name='cmt'/>
-   <feature policy='require' name='xsaves'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-index b6784f9eba..65eaeabdd0 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-@@ -3,6 +3,7 @@
-   <model>EPYC-Rome</model>
-   <vendor>AMD</vendor>
-   <feature name='ht'/>
-+  <feature name='monitor'/>
-   <feature name='osxsave'/>
-   <feature name='cmt'/>
-   <feature name='xsaves'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-index 86466c0547..febfdfcf2b 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-json.xml
-@@ -17,5 +17,4 @@
-   <feature policy='require' name='skip-l1dfl-vmentry'/>
-   <feature policy='require' name='mds-no'/>
-   <feature policy='require' name='pschange-mc-no'/>
--  <feature policy='disable' name='monitor'/>
- </cpu>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Add-support-for-stepping-part-of-CPU-signature.patch b/SOURCES/libvirt-cpu_x86-Add-support-for-stepping-part-of-CPU-signature.patch
deleted file mode 100644
index 35c3988..0000000
--- a/SOURCES/libvirt-cpu_x86-Add-support-for-stepping-part-of-CPU-signature.patch
+++ /dev/null
@@ -1,183 +0,0 @@
-From 51290a9442c1b9347c43b2fec34b7aa979d26c77 Mon Sep 17 00:00:00 2001
-Message-Id: <51290a9442c1b9347c43b2fec34b7aa979d26c77@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:34 +0200
-Subject: [PATCH] cpu_x86: Add support for stepping part of CPU signature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CPU models defined in the cpu_map can use signature/@stepping attribute
-to match a limited set of stepping numbers. The value is a bitmap for
-bits 0..15 each corresponding to a single stepping value. For example,
-stepping='4-6,9' will match 4, 5, 6, and 9. Omitting the attribute is
-equivalent to stepping='0-15'.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c7a27949954d78dc95459758e329fb9c580361bb)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <20bd9df72a22a004bb665409ddba20ff89a5b66d.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 60 +++++++++++++++++++++++++++++++++++++++--------
- 1 file changed, 50 insertions(+), 10 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 45a073c1d0..0d81f3d2ae 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -125,6 +125,7 @@ typedef struct _virCPUx86Signature virCPUx86Signature;
- struct _virCPUx86Signature {
-     unsigned int family;
-     unsigned int model;
-+    virBitmapPtr stepping;
- };
- 
- typedef struct _virCPUx86Signatures virCPUx86Signatures;
-@@ -732,7 +733,17 @@ x86MakeSignature(unsigned int family,
- static uint32_t
- virCPUx86SignatureToCPUID(virCPUx86Signature *sig)
- {
--    return x86MakeSignature(sig->family, sig->model, 0);
-+    unsigned int stepping = 0;
-+
-+    if (sig->stepping) {
-+        ssize_t firstBit;
-+
-+        firstBit = virBitmapNextSetBit(sig->stepping, -1);
-+        if (firstBit >= 0)
-+            stepping = firstBit;
-+    }
-+
-+    return x86MakeSignature(sig->family, sig->model, stepping);
- }
- 
- 
-@@ -767,8 +778,8 @@ x86DataToSignatureFull(const virCPUx86Data *data,
- }
- 
- 
--/* Mask out irrelevant bits (R and Step) from processor signature. */
--#define SIGNATURE_MASK  0x0fff3ff0
-+/* Mask out reserved bits from processor signature. */
-+#define SIGNATURE_MASK  0x0fff3fff
- 
- static uint32_t
- x86DataToSignature(const virCPUx86Data *data)
-@@ -1134,9 +1145,14 @@ virCPUx86SignaturesNew(size_t count)
- static void
- virCPUx86SignaturesFree(virCPUx86SignaturesPtr sigs)
- {
-+    size_t i;
-+
-     if (!sigs)
-         return;
- 
-+    for (i = 0; i < sigs->count; i++)
-+        virBitmapFree(sigs->items[i].stepping);
-+
-     g_free(sigs->items);
-     g_free(sigs);
- }
-@@ -1153,8 +1169,12 @@ virCPUx86SignaturesCopy(virCPUx86SignaturesPtr src)
- 
-     dst = virCPUx86SignaturesNew(src->count);
- 
--    for (i = 0; i < src->count; i++)
--        dst->items[i] = src->items[i];
-+    for (i = 0; i < src->count; i++) {
-+        dst->items[i].family = src->items[i].family;
-+        dst->items[i].model = src->items[i].model;
-+        if (src->items[i].stepping)
-+            dst->items[i].stepping = virBitmapNewCopy(src->items[i].stepping);
-+    }
- 
-     return dst;
- }
-@@ -1176,7 +1196,9 @@ virCPUx86SignaturesMatch(virCPUx86SignaturesPtr sigs,
- 
-     for (i = 0; i < sigs->count; i++) {
-         if (sigs->items[i].family == family &&
--            sigs->items[i].model == model)
-+            sigs->items[i].model == model &&
-+            (!sigs->items[i].stepping ||
-+             virBitmapIsBitSet(sigs->items[i].stepping, stepping)))
-             return true;
-     }
- 
-@@ -1194,9 +1216,15 @@ virCPUx86SignaturesFormat(virCPUx86SignaturesPtr sigs)
-         return virBufferContentAndReset(&buf);
- 
-     for (i = 0; i < sigs->count; i++) {
--        virBufferAsprintf(&buf, "(%u,%u,0), ",
-+        g_autofree char *stepping = NULL;
-+
-+        if (sigs->items[i].stepping)
-+            stepping = virBitmapFormat(sigs->items[i].stepping);
-+
-+        virBufferAsprintf(&buf, "(%u,%u,%s), ",
-                           sigs->items[i].family,
--                          sigs->items[i].model);
-+                          sigs->items[i].model,
-+                          stepping ? stepping : "0-15");
-     }
- 
-     virBufferTrim(&buf, ", ", -1);
-@@ -1473,6 +1501,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
- 
-     for (i = 0; i < n; i++) {
-         virCPUx86Signature *sig = &model->signatures->items[i];
-+        g_autofree char *stepping = NULL;
-         int rc;
- 
-         ctxt->node = nodes[i];
-@@ -1492,6 +1521,11 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
-                            model->name);
-             return -1;
-         }
-+
-+        stepping = virXPathString("string(@stepping)", ctxt);
-+        /* stepping corresponds to 4 bits in 32b signature, see above */
-+        if (stepping && virBitmapParse(stepping, &sig->stepping, 16) < 0)
-+            return -1;
-     }
- 
-     ctxt->node = root;
-@@ -2090,6 +2124,9 @@ x86Decode(virCPUDefPtr cpu,
-     virDomainCapsCPUModelPtr hvModel = NULL;
-     g_autofree char *sigs = NULL;
-     uint32_t signature;
-+    unsigned int sigFamily;
-+    unsigned int sigModel;
-+    unsigned int sigStepping;
-     ssize_t i;
-     int rc;
- 
-@@ -2103,6 +2140,7 @@ x86Decode(virCPUDefPtr cpu,
- 
-     vendor = x86DataToVendor(&data, map);
-     signature = x86DataToSignature(&data);
-+    virCPUx86SignatureFromCPUID(signature, &sigFamily, &sigModel, &sigStepping);
- 
-     x86DataFilterTSX(&data, vendor, map);
- 
-@@ -2184,8 +2222,10 @@ x86Decode(virCPUDefPtr cpu,
- 
-     sigs = virCPUx86SignaturesFormat(model->signatures);
- 
--    VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
--              model->name, NULLSTR(sigs), (unsigned long)signature);
-+    VIR_DEBUG("Using CPU model %s with signatures [%s] for "
-+              "CPU with signature (%u,%u,%u)",
-+              model->name, NULLSTR(sigs),
-+              sigFamily, sigModel, sigStepping);
- 
-     cpu->model = g_steal_pointer(&cpuModel->model);
-     cpu->features = g_steal_pointer(&cpuModel->features);
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Don-t-check-return-value-of-x86ModelCopy.patch b/SOURCES/libvirt-cpu_x86-Don-t-check-return-value-of-x86ModelCopy.patch
deleted file mode 100644
index 208599b..0000000
--- a/SOURCES/libvirt-cpu_x86-Don-t-check-return-value-of-x86ModelCopy.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 8a18e258633c347eb421904c63c2265ed59d61b5 Mon Sep 17 00:00:00 2001
-Message-Id: <8a18e258633c347eb421904c63c2265ed59d61b5@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:33 +0200
-Subject: [PATCH] cpu_x86: Don't check return value of x86ModelCopy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Thanks to glib allocation functions which abort on OOM the function
-cannot ever return NULL.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 70f3041d39802e53a19901bee040ff33850cd5e0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <3db9e891cf44e608a45504b120a5c276ead3ea8d.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 14 ++++----------
- 1 file changed, 4 insertions(+), 10 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index b87e3753da..45a073c1d0 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1287,9 +1287,6 @@ x86ModelFromCPU(const virCPUDef *cpu,
-         model = g_new0(virCPUx86Model, 1);
-     }
- 
--    if (!model)
--        return NULL;
--
-     for (i = 0; i < cpu->nfeatures; i++) {
-         virCPUx86FeaturePtr feature;
-         virCPUFeaturePolicy fpol;
-@@ -1869,9 +1866,7 @@ x86Compute(virCPUDefPtr host,
-         return VIR_CPU_COMPARE_INCOMPATIBLE;
-     }
- 
--    if (!(diff = x86ModelCopy(host_model)))
--        return VIR_CPU_COMPARE_ERROR;
--
-+    diff = x86ModelCopy(host_model);
-     x86DataSubtract(&diff->data, &cpu_optional->data);
-     x86DataSubtract(&diff->data, &cpu_require->data);
-     x86DataSubtract(&diff->data, &cpu_disable->data);
-@@ -1892,8 +1887,7 @@ x86Compute(virCPUDefPtr host,
-     }
- 
-     if (guest) {
--        if (!(guest_model = x86ModelCopy(host_model)))
--            return VIR_CPU_COMPARE_ERROR;
-+        guest_model = x86ModelCopy(host_model);
- 
-         if (cpu->vendor && host_model->vendor &&
-             virCPUx86DataAddItem(&guest_model->data,
-@@ -3131,8 +3125,8 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
-         return -1;
-     }
- 
--    if (!(model = x86ModelCopy(model)) ||
--        x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
-+    model = x86ModelCopy(model);
-+    if (x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
-                              &model->data, map) < 0)
-         return -1;
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Drop-noTSX-hint-for-incompatible-CPUs.patch b/SOURCES/libvirt-cpu_x86-Drop-noTSX-hint-for-incompatible-CPUs.patch
deleted file mode 100644
index ff9b9b1..0000000
--- a/SOURCES/libvirt-cpu_x86-Drop-noTSX-hint-for-incompatible-CPUs.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From 882e0241f82b5bcbe239cf00134950e141de642a Mon Sep 17 00:00:00 2001
-Message-Id: <882e0241f82b5bcbe239cf00134950e141de642a@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:59 +0200
-Subject: [PATCH] cpu_x86: Drop noTSX hint for incompatible CPUs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The hint was introduced a long time ago when broken TSX implementation
-was found in Haswell and Broadwell CPUs. Since then many more CPUs with
-TSX were introduced and and disabled due to TAA vulnerability.
-
-Thus the hint is not very useful and I think removing it is a better
-choice then updating it to cover all current noTSX models.
-
-This partially reverts:
-commit 7f127ded657b24e0e55cd5f3539ef5b2dc935908
-    cpu: Rework cpuCompare* APIs
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8452779049ef785b1d2e373b4d42633d4a929a60)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1126fcc8a0e18f0eed38c182013429fd7266c274.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 44 ++++++--------------------------------------
- 1 file changed, 6 insertions(+), 38 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index b4d5c795f7..1b388ec1b2 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1937,8 +1937,6 @@ virCPUx86Compare(virCPUDefPtr host,
-                  bool failIncompatible)
- {
-     virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
--    virCPUx86MapPtr map;
--    virCPUx86ModelPtr model = NULL;
-     char *message = NULL;
- 
-     if (!host || !host->model) {
-@@ -1954,46 +1952,16 @@ virCPUx86Compare(virCPUDefPtr host,
- 
-     ret = x86Compute(host, cpu, NULL, &message);
- 
--    if (ret == VIR_CPU_COMPARE_INCOMPATIBLE) {
--        bool noTSX = false;
--
--        if (STREQ_NULLABLE(cpu->model, "Haswell") ||
--            STREQ_NULLABLE(cpu->model, "Broadwell")) {
--            if (!(map = virCPUx86GetMap()))
--                goto cleanup;
--
--            if (!(model = x86ModelFromCPU(cpu, map, -1)))
--                goto cleanup;
--
--            noTSX = !x86FeatureInData("hle", &model->data, map) ||
--                    !x86FeatureInData("rtm", &model->data, map);
--        }
--
--        if (failIncompatible) {
--            ret = VIR_CPU_COMPARE_ERROR;
--            if (message) {
--                if (noTSX) {
--                    virReportError(VIR_ERR_CPU_INCOMPATIBLE,
--                                   _("%s; try using '%s-noTSX' CPU model"),
--                                   message, cpu->model);
--                } else {
--                    virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
--                }
--            } else {
--                if (noTSX) {
--                    virReportError(VIR_ERR_CPU_INCOMPATIBLE,
--                                   _("try using '%s-noTSX' CPU model"),
--                                   cpu->model);
--                } else {
--                    virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
--                }
--            }
--        }
-+    if (ret == VIR_CPU_COMPARE_INCOMPATIBLE && failIncompatible) {
-+        ret = VIR_CPU_COMPARE_ERROR;
-+        if (message)
-+            virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
-+        else
-+            virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
-     }
- 
-  cleanup:
-     VIR_FREE(message);
--    x86ModelFree(model);
-     return ret;
- }
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Honor-CPU-models-decode-element.patch b/SOURCES/libvirt-cpu_x86-Honor-CPU-models-decode-element.patch
deleted file mode 100644
index 3928482..0000000
--- a/SOURCES/libvirt-cpu_x86-Honor-CPU-models-decode-element.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From ba2f2a8c39f2e7fe5684d9b84a0a832be482a3ab Mon Sep 17 00:00:00 2001
-Message-Id: <ba2f2a8c39f2e7fe5684d9b84a0a832be482a3ab@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:57 +0200
-Subject: [PATCH] cpu_x86: Honor CPU models' <decode> element
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit 7cd896ef31d33f78d40df918a33fe3867e251509)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840008
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <15f1eedf2c0df29a3942b4b28bc4575fa51ca19a.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 22 +++++++++++++++++-----
- 1 file changed, 17 insertions(+), 5 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 7fbb4c9a6c..b4d5c795f7 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2044,10 +2044,23 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
-                       virCPUx86ModelPtr candidate,
-                       virCPUDefPtr cpuCandidate,
-                       uint32_t signature,
--                      const char *preferred,
--                      bool checkPolicy)
-+                      const char *preferred)
- {
--    if (checkPolicy) {
-+    if (cpuCandidate->type == VIR_CPU_TYPE_HOST &&
-+        !candidate->decodeHost) {
-+        VIR_DEBUG("%s is not supposed to be used for host CPU definition",
-+                  cpuCandidate->model);
-+        return 0;
-+    }
-+
-+    if (cpuCandidate->type == VIR_CPU_TYPE_GUEST &&
-+        !candidate->decodeGuest) {
-+        VIR_DEBUG("%s is not supposed to be used for guest CPU definition",
-+                  cpuCandidate->model);
-+        return 0;
-+    }
-+
-+    if (cpuCandidate->type == VIR_CPU_TYPE_HOST) {
-         size_t i;
-         for (i = 0; i < cpuCandidate->nfeatures; i++) {
-             if (cpuCandidate->features[i].policy == VIR_CPU_FEATURE_DISABLE)
-@@ -2209,8 +2222,7 @@ x86Decode(virCPUDefPtr cpu,
- 
-         if ((rc = x86DecodeUseCandidate(model, cpuModel,
-                                         candidate, cpuCandidate,
--                                        signature, preferred,
--                                        cpu->type == VIR_CPU_TYPE_HOST))) {
-+                                        signature, preferred))) {
-             virCPUDefFree(cpuModel);
-             cpuModel = cpuCandidate;
-             model = candidate;
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Introduce-virCPUx86SignatureFromCPUID.patch b/SOURCES/libvirt-cpu_x86-Introduce-virCPUx86SignatureFromCPUID.patch
deleted file mode 100644
index 2f1d44f..0000000
--- a/SOURCES/libvirt-cpu_x86-Introduce-virCPUx86SignatureFromCPUID.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 48e546c1097a61c806412efe53e216fbc8beafca Mon Sep 17 00:00:00 2001
-Message-Id: <48e546c1097a61c806412efe53e216fbc8beafca@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:31 +0200
-Subject: [PATCH] cpu_x86: Introduce virCPUx86SignatureFromCPUID
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It can be used for separating family, model, and stepping numbers from a
-single 32b integer as reported by CPUID.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3b474c1f8f3c1f124fab303625733ea79047660c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1fe352bfb7cf40b5b8e24eea3bf4e476269adb92.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 19 ++++++++++++++-----
- 1 file changed, 14 insertions(+), 5 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index ed2090b0c6..dad3bceff0 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -717,6 +717,18 @@ x86MakeSignature(unsigned int family,
- }
- 
- 
-+static void
-+virCPUx86SignatureFromCPUID(uint32_t sig,
-+                            unsigned int *family,
-+                            unsigned int *model,
-+                            unsigned int *stepping)
-+{
-+    *family = ((sig >> 20) & 0xff) + ((sig >> 8) & 0xf);
-+    *model = ((sig >> 12) & 0xf0) + ((sig >> 4) & 0xf);
-+    *stepping = sig & 0xf;
-+}
-+
-+
- static void
- x86DataToSignatureFull(const virCPUx86Data *data,
-                        unsigned int *family,
-@@ -725,17 +737,14 @@ x86DataToSignatureFull(const virCPUx86Data *data,
- {
-     virCPUx86DataItem leaf1 = CPUID(.eax_in = 0x1);
-     virCPUx86DataItemPtr item;
--    virCPUx86CPUIDPtr cpuid;
- 
-     *family = *model = *stepping = 0;
- 
-     if (!(item = virCPUx86DataGet(data, &leaf1)))
-         return;
- 
--    cpuid = &item->data.cpuid;
--    *family = ((cpuid->eax >> 20) & 0xff) + ((cpuid->eax >> 8) & 0xf);
--    *model = ((cpuid->eax >> 12) & 0xf0) + ((cpuid->eax >> 4) & 0xf);
--    *stepping = cpuid->eax & 0xf;
-+    virCPUx86SignatureFromCPUID(item->data.cpuid.eax,
-+                                family, model, stepping);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Introduce-virCPUx86SignaturesFree.patch b/SOURCES/libvirt-cpu_x86-Introduce-virCPUx86SignaturesFree.patch
deleted file mode 100644
index a299de9..0000000
--- a/SOURCES/libvirt-cpu_x86-Introduce-virCPUx86SignaturesFree.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 75afc6d9dc443666e1207ef6f1c968abdfec712a Mon Sep 17 00:00:00 2001
-Message-Id: <75afc6d9dc443666e1207ef6f1c968abdfec712a@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:30 +0200
-Subject: [PATCH] cpu_x86: Introduce virCPUx86SignaturesFree
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function will be used for freeing virCPUx86Signatures structure
-introduced later in this series.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 372b2cf1ca3f4361546732a3f5f9c0c0be2591e9)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <163ef39d14ce5457272e7508172f64d58d22a56b.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 9248403eff..ed2090b0c6 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1090,6 +1090,13 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
- }
- 
- 
-+static void
-+virCPUx86SignaturesFree(uint32_t *signatures)
-+{
-+    g_free(signatures);
-+}
-+
-+
- static int
- virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
-                         virCPUx86ModelPtr src)
-@@ -1149,7 +1156,7 @@ x86ModelFree(virCPUx86ModelPtr model)
-         return;
- 
-     g_free(model->name);
--    g_free(model->signatures);
-+    virCPUx86SignaturesFree(model->signatures);
-     virCPUx86DataClear(&model->data);
-     g_free(model);
- }
-@@ -1414,7 +1421,7 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
-         return n;
- 
-     /* Remove inherited signatures. */
--    VIR_FREE(model->signatures);
-+    virCPUx86SignaturesFree(model->signatures);
- 
-     model->nsignatures = n;
-     if (VIR_ALLOC_N(model->signatures, n) < 0)
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Move-and-rename-x86FormatSignatures.patch b/SOURCES/libvirt-cpu_x86-Move-and-rename-x86FormatSignatures.patch
deleted file mode 100644
index ea7f7bd..0000000
--- a/SOURCES/libvirt-cpu_x86-Move-and-rename-x86FormatSignatures.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 2b76e3009c224c0d03a4d951e0686aad6f6dc577 Mon Sep 17 00:00:00 2001
-Message-Id: <2b76e3009c224c0d03a4d951e0686aad6f6dc577@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:29 +0200
-Subject: [PATCH] cpu_x86: Move and rename x86FormatSignatures
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Later in this series the function will work on a newly introduced
-virCPUx86Signatures structure. Let's move it to the place where all
-related functions will be added and rename the function as
-virCPUx86SignaturesFormat for easier review of the virCPUx86Signatures
-patch.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 7e0d351fa69c468906533b2ac9b24212df13a370)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Conflicts:
-	src/cpu/cpu_x86.c
-            - v6.0.0-264-g0a125c7144 which removes the third argument
-              from virBufferTrim was not backported
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <fd16284339dd71e9f99b57bb7682014065e5d0ec.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 36 ++++++++++++++++++------------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 65a99876a9..9248403eff 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1125,6 +1125,23 @@ virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
- }
- 
- 
-+static char *
-+virCPUx86SignaturesFormat(virCPUx86ModelPtr model)
-+{
-+    virBuffer buf = VIR_BUFFER_INITIALIZER;
-+    size_t i;
-+
-+    for (i = 0; i < model->nsignatures; i++) {
-+        virBufferAsprintf(&buf, "%06lx,",
-+                          (unsigned long)model->signatures[i]);
-+    }
-+
-+    virBufferTrim(&buf, ",", -1);
-+
-+    return virBufferContentAndReset(&buf);
-+}
-+
-+
- static void
- x86ModelFree(virCPUx86ModelPtr model)
- {
-@@ -1890,23 +1907,6 @@ virCPUx86Compare(virCPUDefPtr host,
- }
- 
- 
--static char *
--x86FormatSignatures(virCPUx86ModelPtr model)
--{
--    virBuffer buf = VIR_BUFFER_INITIALIZER;
--    size_t i;
--
--    for (i = 0; i < model->nsignatures; i++) {
--        virBufferAsprintf(&buf, "%06lx,",
--                          (unsigned long)model->signatures[i]);
--    }
--
--    virBufferTrim(&buf, ",", -1);
--
--    return virBufferContentAndReset(&buf);
--}
--
--
- /*
-  * Checks whether a candidate model is a better fit for the CPU data than the
-  * current model.
-@@ -2134,7 +2134,7 @@ x86Decode(virCPUDefPtr cpu,
-     if (vendor)
-         cpu->vendor = g_strdup(vendor->name);
- 
--    sigs = x86FormatSignatures(model);
-+    sigs = virCPUx86SignaturesFormat(model);
- 
-     VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
-               model->name, NULLSTR(sigs), (unsigned long)signature);
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Move-and-rename-x86ModelCopySignatures.patch b/SOURCES/libvirt-cpu_x86-Move-and-rename-x86ModelCopySignatures.patch
deleted file mode 100644
index bda9331..0000000
--- a/SOURCES/libvirt-cpu_x86-Move-and-rename-x86ModelCopySignatures.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 33cac9bcf27a885febf12e094cb2579f16a421b6 Mon Sep 17 00:00:00 2001
-Message-Id: <33cac9bcf27a885febf12e094cb2579f16a421b6@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:27 +0200
-Subject: [PATCH] cpu_x86: Move and rename x86ModelCopySignatures
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Later in this series the function will work on a newly introduced
-virCPUx86Signatures structure. Let's move it to the place were all
-related functions will be added and rename the function as
-virCPUx86SignaturesCopy for easier review of the virCPUx86Signatures
-patch.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit a8ec1d746ed41ac76df2e28cbc5683b3e37b9a60)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <0d4f902805cd5534eadedd2ec61385e9798c8b40.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 36 ++++++++++++++++++------------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index b4b1b475d6..16e6aa73d2 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1090,23 +1090,9 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
- }
- 
- 
--static void
--x86ModelFree(virCPUx86ModelPtr model)
--{
--    if (!model)
--        return;
--
--    g_free(model->name);
--    g_free(model->signatures);
--    virCPUx86DataClear(&model->data);
--    g_free(model);
--}
--G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
--
--
- static int
--x86ModelCopySignatures(virCPUx86ModelPtr dst,
--                       virCPUx86ModelPtr src)
-+virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
-+                        virCPUx86ModelPtr src)
- {
-     size_t i;
- 
-@@ -1124,6 +1110,20 @@ x86ModelCopySignatures(virCPUx86ModelPtr dst,
- }
- 
- 
-+static void
-+x86ModelFree(virCPUx86ModelPtr model)
-+{
-+    if (!model)
-+        return;
-+
-+    g_free(model->name);
-+    g_free(model->signatures);
-+    virCPUx86DataClear(&model->data);
-+    g_free(model);
-+}
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
-+
-+
- static virCPUx86ModelPtr
- x86ModelCopy(virCPUx86ModelPtr model)
- {
-@@ -1132,7 +1132,7 @@ x86ModelCopy(virCPUx86ModelPtr model)
-     copy = g_new0(virCPUx86Model, 1);
-     copy->name = g_strdup(model->name);
- 
--    if (x86ModelCopySignatures(copy, model) < 0) {
-+    if (virCPUx86SignaturesCopy(copy, model) < 0) {
-         x86ModelFree(copy);
-         return NULL;
-     }
-@@ -1360,7 +1360,7 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
-     }
- 
-     model->vendor = ancestor->vendor;
--    if (x86ModelCopySignatures(model, ancestor) < 0)
-+    if (virCPUx86SignaturesCopy(model, ancestor) < 0)
-         return -1;
- 
-     x86DataCopy(&model->data, &ancestor->data);
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Move-and-rename-x86ModelHasSignature.patch b/SOURCES/libvirt-cpu_x86-Move-and-rename-x86ModelHasSignature.patch
deleted file mode 100644
index 5d87091..0000000
--- a/SOURCES/libvirt-cpu_x86-Move-and-rename-x86ModelHasSignature.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 693d01f00b9608a4f4cac3b91e38b5537eff754f Mon Sep 17 00:00:00 2001
-Message-Id: <693d01f00b9608a4f4cac3b91e38b5537eff754f@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:28 +0200
-Subject: [PATCH] cpu_x86: Move and rename x86ModelHasSignature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Later in this series the function will work on a newly introduced
-virCPUx86Signatures structure. Let's move it to the place were all
-related functions will be added and rename the function as
-virCPUx86SignaturesMatch for easier review of the virCPUx86Signatures
-patch.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 782be9f0af2e02e725fca45b7674e8b2f008dc6c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <7662ee03449ae588a5381c546eb7e8a3b64cadb3.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 38 +++++++++++++++++++-------------------
- 1 file changed, 19 insertions(+), 19 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 16e6aa73d2..65a99876a9 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1110,6 +1110,21 @@ virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
- }
- 
- 
-+static bool
-+virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
-+                         uint32_t signature)
-+{
-+    size_t i;
-+
-+    for (i = 0; i < model->nsignatures; i++) {
-+        if (model->signatures[i] == signature)
-+            return true;
-+    }
-+
-+    return false;
-+}
-+
-+
- static void
- x86ModelFree(virCPUx86ModelPtr model)
- {
-@@ -1875,21 +1890,6 @@ virCPUx86Compare(virCPUDefPtr host,
- }
- 
- 
--static bool
--x86ModelHasSignature(virCPUx86ModelPtr model,
--                     uint32_t signature)
--{
--    size_t i;
--
--    for (i = 0; i < model->nsignatures; i++) {
--        if (model->signatures[i] == signature)
--            return true;
--    }
--
--    return false;
--}
--
--
- static char *
- x86FormatSignatures(virCPUx86ModelPtr model)
- {
-@@ -1961,8 +1961,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
-      * consider candidates with matching family/model.
-      */
-     if (signature &&
--        x86ModelHasSignature(current, signature) &&
--        !x86ModelHasSignature(candidate, signature)) {
-+        virCPUx86SignaturesMatch(current, signature) &&
-+        !virCPUx86SignaturesMatch(candidate, signature)) {
-         VIR_DEBUG("%s differs in signature from matching %s",
-                   cpuCandidate->model, cpuCurrent->model);
-         return 0;
-@@ -1978,8 +1978,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
-      * result in longer list of features.
-      */
-     if (signature &&
--        x86ModelHasSignature(candidate, signature) &&
--        !x86ModelHasSignature(current, signature)) {
-+        virCPUx86SignaturesMatch(candidate, signature) &&
-+        !virCPUx86SignaturesMatch(current, signature)) {
-         VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
-         return 1;
-     }
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Prepare-virCPUx86UpdateLive-for-easier-extension.patch b/SOURCES/libvirt-cpu_x86-Prepare-virCPUx86UpdateLive-for-easier-extension.patch
deleted file mode 100644
index 621e1e4..0000000
--- a/SOURCES/libvirt-cpu_x86-Prepare-virCPUx86UpdateLive-for-easier-extension.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 760e248164be819bebc03893ace58e0ddae7e440 Mon Sep 17 00:00:00 2001
-Message-Id: <760e248164be819bebc03893ace58e0ddae7e440@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:52 +0200
-Subject: [PATCH] cpu_x86: Prepare virCPUx86UpdateLive for easier extension
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Adding more checks into the existing if statements would turn them into
-an unreadable mess.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8dc791b5d3b20552cc0b8d6c04e34dd0f3ebe2ff)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1839999
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <169ed0334144715b52575ca3f7e67ce3170ba91a.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 9b7981d574..9e686a86d2 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -3036,9 +3036,15 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
- 
-     for (i = 0; i < map->nfeatures; i++) {
-         virCPUx86FeaturePtr feature = map->features[i];
-+        virCPUFeaturePolicy expected = VIR_CPU_FEATURE_LAST;
- 
--        if (x86DataIsSubset(&enabled, &feature->data) &&
--            !x86DataIsSubset(&model->data, &feature->data)) {
-+        if (x86DataIsSubset(&model->data, &feature->data))
-+            expected = VIR_CPU_FEATURE_REQUIRE;
-+        else
-+            expected = VIR_CPU_FEATURE_DISABLE;
-+
-+        if (expected == VIR_CPU_FEATURE_DISABLE &&
-+            x86DataIsSubset(&enabled, &feature->data)) {
-             VIR_DEBUG("Feature '%s' enabled by the hypervisor", feature->name);
-             if (cpu->check == VIR_CPU_CHECK_FULL)
-                 virBufferAsprintf(&bufAdded, "%s,", feature->name);
-@@ -3048,7 +3054,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-         }
- 
-         if (x86DataIsSubset(&disabled, &feature->data) ||
--            (x86DataIsSubset(&model->data, &feature->data) &&
-+            (expected == VIR_CPU_FEATURE_REQUIRE &&
-              !x86DataIsSubset(&enabled, &feature->data))) {
-             VIR_DEBUG("Feature '%s' disabled by the hypervisor", feature->name);
-             if (cpu->check == VIR_CPU_CHECK_FULL)
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Replace-32b-signatures-in-virCPUx86Model-with-a-struct.patch b/SOURCES/libvirt-cpu_x86-Replace-32b-signatures-in-virCPUx86Model-with-a-struct.patch
deleted file mode 100644
index 203914b..0000000
--- a/SOURCES/libvirt-cpu_x86-Replace-32b-signatures-in-virCPUx86Model-with-a-struct.patch
+++ /dev/null
@@ -1,325 +0,0 @@
-From 22fecd96659495908f37e1c33c1ed52be5fb2d44 Mon Sep 17 00:00:00 2001
-Message-Id: <22fecd96659495908f37e1c33c1ed52be5fb2d44@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:32 +0200
-Subject: [PATCH] cpu_x86: Replace 32b signatures in virCPUx86Model with a
- struct
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The CPU models in our cpu_map define their signatures using separate
-family and model numbers. Let's store the signatures in the same way in
-our runtime representation of the cpu_map.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 22bded201ffc91661e44065203dcb987e51084ca)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Conflicts:
-	src/cpu/cpu_x86.c
-            - v6.0.0-264-g0a125c7144 which removes the third argument
-              from virBufferTrim was not backported
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <21c1eee9c7bb3811f43aa044bb97fa373a159e26.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 149 +++++++++++++++++++++++++++++-----------------
- 1 file changed, 95 insertions(+), 54 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index dad3bceff0..b87e3753da 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -121,6 +121,19 @@ static virCPUx86Feature x86_kvm_features[] =
-     KVM_FEATURE(VIR_CPU_x86_HV_STIMER_DIRECT),
- };
- 
-+typedef struct _virCPUx86Signature virCPUx86Signature;
-+struct _virCPUx86Signature {
-+    unsigned int family;
-+    unsigned int model;
-+};
-+
-+typedef struct _virCPUx86Signatures virCPUx86Signatures;
-+typedef virCPUx86Signatures *virCPUx86SignaturesPtr;
-+struct _virCPUx86Signatures {
-+    size_t count;
-+    virCPUx86Signature *items;
-+};
-+
- typedef struct _virCPUx86Model virCPUx86Model;
- typedef virCPUx86Model *virCPUx86ModelPtr;
- struct _virCPUx86Model {
-@@ -128,8 +141,7 @@ struct _virCPUx86Model {
-     bool decodeHost;
-     bool decodeGuest;
-     virCPUx86VendorPtr vendor;
--    size_t nsignatures;
--    uint32_t *signatures;
-+    virCPUx86SignaturesPtr signatures;
-     virCPUx86Data data;
- };
- 
-@@ -717,6 +729,13 @@ x86MakeSignature(unsigned int family,
- }
- 
- 
-+static uint32_t
-+virCPUx86SignatureToCPUID(virCPUx86Signature *sig)
-+{
-+    return x86MakeSignature(sig->family, sig->model, 0);
-+}
-+
-+
- static void
- virCPUx86SignatureFromCPUID(uint32_t sig,
-                             unsigned int *family,
-@@ -1099,41 +1118,65 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
- }
- 
- 
-+static virCPUx86SignaturesPtr
-+virCPUx86SignaturesNew(size_t count)
-+{
-+    virCPUx86SignaturesPtr sigs;
-+
-+    sigs = g_new0(virCPUx86Signatures, 1);
-+    sigs->items = g_new0(virCPUx86Signature, count);
-+    sigs->count = count;
-+
-+    return sigs;
-+}
-+
-+
- static void
--virCPUx86SignaturesFree(uint32_t *signatures)
-+virCPUx86SignaturesFree(virCPUx86SignaturesPtr sigs)
- {
--    g_free(signatures);
-+    if (!sigs)
-+        return;
-+
-+    g_free(sigs->items);
-+    g_free(sigs);
- }
- 
- 
--static int
--virCPUx86SignaturesCopy(virCPUx86ModelPtr dst,
--                        virCPUx86ModelPtr src)
-+static virCPUx86SignaturesPtr
-+virCPUx86SignaturesCopy(virCPUx86SignaturesPtr src)
- {
-+    virCPUx86SignaturesPtr dst;
-     size_t i;
- 
--    if (src->nsignatures == 0)
--        return 0;
-+    if (!src || src->count == 0)
-+        return NULL;
- 
--    if (VIR_ALLOC_N(dst->signatures, src->nsignatures) < 0)
--        return -1;
-+    dst = virCPUx86SignaturesNew(src->count);
- 
--    dst->nsignatures = src->nsignatures;
--    for (i = 0; i < src->nsignatures; i++)
--        dst->signatures[i] = src->signatures[i];
-+    for (i = 0; i < src->count; i++)
-+        dst->items[i] = src->items[i];
- 
--    return 0;
-+    return dst;
- }
- 
- 
- static bool
--virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
-+virCPUx86SignaturesMatch(virCPUx86SignaturesPtr sigs,
-                          uint32_t signature)
- {
-     size_t i;
-+    unsigned int family;
-+    unsigned int model;
-+    unsigned int stepping;
- 
--    for (i = 0; i < model->nsignatures; i++) {
--        if (model->signatures[i] == signature)
-+    if (!sigs)
-+        return false;
-+
-+    virCPUx86SignatureFromCPUID(signature, &family, &model, &stepping);
-+
-+    for (i = 0; i < sigs->count; i++) {
-+        if (sigs->items[i].family == family &&
-+            sigs->items[i].model == model)
-             return true;
-     }
- 
-@@ -1142,17 +1185,21 @@ virCPUx86SignaturesMatch(virCPUx86ModelPtr model,
- 
- 
- static char *
--virCPUx86SignaturesFormat(virCPUx86ModelPtr model)
-+virCPUx86SignaturesFormat(virCPUx86SignaturesPtr sigs)
- {
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     size_t i;
- 
--    for (i = 0; i < model->nsignatures; i++) {
--        virBufferAsprintf(&buf, "%06lx,",
--                          (unsigned long)model->signatures[i]);
-+    if (!sigs)
-+        return virBufferContentAndReset(&buf);
-+
-+    for (i = 0; i < sigs->count; i++) {
-+        virBufferAsprintf(&buf, "(%u,%u,0), ",
-+                          sigs->items[i].family,
-+                          sigs->items[i].model);
-     }
- 
--    virBufferTrim(&buf, ",", -1);
-+    virBufferTrim(&buf, ", ", -1);
- 
-     return virBufferContentAndReset(&buf);
- }
-@@ -1179,16 +1226,11 @@ x86ModelCopy(virCPUx86ModelPtr model)
- 
-     copy = g_new0(virCPUx86Model, 1);
-     copy->name = g_strdup(model->name);
--
--    if (virCPUx86SignaturesCopy(copy, model) < 0) {
--        x86ModelFree(copy);
--        return NULL;
--    }
-+    copy->signatures = virCPUx86SignaturesCopy(model->signatures);
-     x86DataCopy(&copy->data, &model->data);
--
-     copy->vendor = model->vendor;
- 
--    return copy;
-+    return g_steal_pointer(&copy);
- }
- 
- 
-@@ -1408,9 +1450,7 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
-     }
- 
-     model->vendor = ancestor->vendor;
--    if (virCPUx86SignaturesCopy(model, ancestor) < 0)
--        return -1;
--
-+    model->signatures = virCPUx86SignaturesCopy(ancestor->signatures);
-     x86DataCopy(&model->data, &ancestor->data);
- 
-     return 0;
-@@ -1432,34 +1472,29 @@ x86ModelParseSignatures(virCPUx86ModelPtr model,
-     /* Remove inherited signatures. */
-     virCPUx86SignaturesFree(model->signatures);
- 
--    model->nsignatures = n;
--    if (VIR_ALLOC_N(model->signatures, n) < 0)
--       return -1;
-+    model->signatures = virCPUx86SignaturesNew(n);
- 
-     for (i = 0; i < n; i++) {
--        unsigned int sigFamily = 0;
--        unsigned int sigModel = 0;
-+        virCPUx86Signature *sig = &model->signatures->items[i];
-         int rc;
- 
-         ctxt->node = nodes[i];
- 
--        rc = virXPathUInt("string(@family)", ctxt, &sigFamily);
--        if (rc < 0 || sigFamily == 0) {
-+        rc = virXPathUInt("string(@family)", ctxt, &sig->family);
-+        if (rc < 0 || sig->family == 0) {
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("Invalid CPU signature family in model %s"),
-                            model->name);
-             return -1;
-         }
- 
--        rc = virXPathUInt("string(@model)", ctxt, &sigModel);
-+        rc = virXPathUInt("string(@model)", ctxt, &sig->model);
-         if (rc < 0) {
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("Invalid CPU signature model in model %s"),
-                            model->name);
-             return -1;
-         }
--
--        model->signatures[i] = x86MakeSignature(sigFamily, sigModel, 0);
-     }
- 
-     ctxt->node = root;
-@@ -1865,9 +1900,12 @@ x86Compute(virCPUDefPtr host,
-                                  &host_model->vendor->data) < 0)
-             return VIR_CPU_COMPARE_ERROR;
- 
--        if (host_model->signatures &&
--            x86DataAddSignature(&guest_model->data, *host_model->signatures) < 0)
--            return VIR_CPU_COMPARE_ERROR;
-+        if (host_model->signatures && host_model->signatures->count > 0) {
-+            virCPUx86Signature *sig = &host_model->signatures->items[0];
-+            if (x86DataAddSignature(&guest_model->data,
-+                                    virCPUx86SignatureToCPUID(sig)) < 0)
-+                return VIR_CPU_COMPARE_ERROR;
-+        }
- 
-         if (cpu->type == VIR_CPU_TYPE_GUEST
-             && cpu->match == VIR_CPU_MATCH_EXACT)
-@@ -1977,8 +2015,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
-      * consider candidates with matching family/model.
-      */
-     if (signature &&
--        virCPUx86SignaturesMatch(current, signature) &&
--        !virCPUx86SignaturesMatch(candidate, signature)) {
-+        virCPUx86SignaturesMatch(current->signatures, signature) &&
-+        !virCPUx86SignaturesMatch(candidate->signatures, signature)) {
-         VIR_DEBUG("%s differs in signature from matching %s",
-                   cpuCandidate->model, cpuCurrent->model);
-         return 0;
-@@ -1994,8 +2032,8 @@ x86DecodeUseCandidate(virCPUx86ModelPtr current,
-      * result in longer list of features.
-      */
-     if (signature &&
--        virCPUx86SignaturesMatch(candidate, signature) &&
--        !virCPUx86SignaturesMatch(current, signature)) {
-+        virCPUx86SignaturesMatch(candidate->signatures, signature) &&
-+        !virCPUx86SignaturesMatch(current->signatures, signature)) {
-         VIR_DEBUG("%s provides matching signature", cpuCandidate->model);
-         return 1;
-     }
-@@ -2150,7 +2188,7 @@ x86Decode(virCPUDefPtr cpu,
-     if (vendor)
-         cpu->vendor = g_strdup(vendor->name);
- 
--    sigs = virCPUx86SignaturesFormat(model);
-+    sigs = virCPUx86SignaturesFormat(model->signatures);
- 
-     VIR_DEBUG("Using CPU model %s (signatures %s) for CPU with signature %06lx",
-               model->name, NULLSTR(sigs), (unsigned long)signature);
-@@ -3046,9 +3084,12 @@ virCPUx86Translate(virCPUDefPtr cpu,
-         virCPUx86DataAddItem(&model->data, &model->vendor->data) < 0)
-         return -1;
- 
--    if (model->signatures &&
--        x86DataAddSignature(&model->data, model->signatures[0]) < 0)
--        return -1;
-+    if (model->signatures && model->signatures->count > 0) {
-+        virCPUx86Signature *sig = &model->signatures->items[0];
-+        if (x86DataAddSignature(&model->data,
-+                                virCPUx86SignatureToCPUID(sig)) < 0)
-+            return -1;
-+    }
- 
-     if (!(translated = virCPUDefCopyWithoutModel(cpu)))
-         return -1;
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Baseline.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Baseline.patch
deleted file mode 100644
index 7eed7c0..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Baseline.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-From da1511d57b10d2cc1cb14d78c6911815ec7d9f64 Mon Sep 17 00:00:00 2001
-Message-Id: <da1511d57b10d2cc1cb14d78c6911815ec7d9f64@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:20 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Baseline
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5efefe7d7eb129b72bcbbebfbba2d5750ffeeeff)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <d93fb6757fd9ecd9ffe8634c422cc613c8d03e84.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 46 +++++++++++++++++-----------------------------
- 1 file changed, 17 insertions(+), 29 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 1ade53a4a8..6e7311694d 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2697,21 +2697,20 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
-                   bool migratable)
- {
-     virCPUx86MapPtr map = NULL;
--    virCPUx86ModelPtr base_model = NULL;
--    virCPUDefPtr cpu = NULL;
-+    g_autoptr(virCPUx86Model) base_model = NULL;
-+    g_autoptr(virCPUDef) cpu = NULL;
-     size_t i;
-     virCPUx86VendorPtr vendor = NULL;
--    virCPUx86ModelPtr model = NULL;
-     bool outputVendor = true;
-     const char *modelName;
-     bool matchingNames = true;
--    virCPUDataPtr featData = NULL;
-+    g_autoptr(virCPUData) featData = NULL;
- 
-     if (!(map = virCPUx86GetMap()))
--        goto error;
-+        return NULL;
- 
-     if (!(base_model = x86ModelFromCPU(cpus[0], map, -1)))
--        goto error;
-+        return NULL;
- 
-     cpu = virCPUDefNew();
- 
-@@ -2723,11 +2722,12 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
-     } else if (!(vendor = x86VendorFind(map, cpus[0]->vendor))) {
-         virReportError(VIR_ERR_OPERATION_FAILED,
-                        _("Unknown CPU vendor %s"), cpus[0]->vendor);
--        goto error;
-+        return NULL;
-     }
- 
-     modelName = cpus[0]->model;
-     for (i = 1; i < ncpus; i++) {
-+        g_autoptr(virCPUx86Model) model = NULL;
-         const char *vn = NULL;
- 
-         if (matchingNames && cpus[i]->model) {
-@@ -2740,14 +2740,14 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
-         }
- 
-         if (!(model = x86ModelFromCPU(cpus[i], map, -1)))
--            goto error;
-+            return NULL;
- 
-         if (cpus[i]->vendor && model->vendor &&
-             STRNEQ(cpus[i]->vendor, model->vendor->name)) {
-             virReportError(VIR_ERR_OPERATION_FAILED,
-                            _("CPU vendor %s of model %s differs from vendor %s"),
-                            model->vendor->name, model->name, cpus[i]->vendor);
--            goto error;
-+            return NULL;
-         }
- 
-         if (cpus[i]->vendor) {
-@@ -2763,30 +2763,28 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
-                 if (!(vendor = x86VendorFind(map, vn))) {
-                     virReportError(VIR_ERR_OPERATION_FAILED,
-                                    _("Unknown CPU vendor %s"), vn);
--                    goto error;
-+                    return NULL;
-                 }
-             } else if (STRNEQ(vendor->name, vn)) {
-                 virReportError(VIR_ERR_OPERATION_FAILED,
-                                "%s", _("CPU vendors do not match"));
--                goto error;
-+                return NULL;
-             }
-         }
- 
-         x86DataIntersect(&base_model->data, &model->data);
--        x86ModelFree(model);
--        model = NULL;
-     }
- 
-     if (features) {
-         virCPUx86FeaturePtr feat;
- 
-         if (!(featData = virCPUDataNew(archs[0])))
--            goto cleanup;
-+            return NULL;
- 
-         for (i = 0; features[i]; i++) {
-             if ((feat = x86FeatureFind(map, features[i])) &&
-                 x86DataAdd(&featData->data.x86, &feat->data) < 0)
--                goto cleanup;
-+                return NULL;
-         }
- 
-         x86DataIntersect(&base_model->data, &featData->data.x86);
-@@ -2795,15 +2793,15 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
-     if (x86DataIsEmpty(&base_model->data)) {
-         virReportError(VIR_ERR_OPERATION_FAILED,
-                        "%s", _("CPUs are incompatible"));
--        goto error;
-+        return NULL;
-     }
- 
-     if (vendor &&
-         virCPUx86DataAddItem(&base_model->data, &vendor->data) < 0)
--        goto error;
-+        return NULL;
- 
-     if (x86Decode(cpu, &base_model->data, models, modelName, migratable) < 0)
--        goto error;
-+        return NULL;
- 
-     if (STREQ_NULLABLE(cpu->model, modelName))
-         cpu->fallback = VIR_CPU_FALLBACK_FORBID;
-@@ -2811,17 +2809,7 @@ virCPUx86Baseline(virCPUDefPtr *cpus,
-     if (!outputVendor)
-         VIR_FREE(cpu->vendor);
- 
-- cleanup:
--    x86ModelFree(base_model);
--    virCPUx86DataFree(featData);
--
--    return cpu;
--
-- error:
--    x86ModelFree(model);
--    virCPUDefFree(cpu);
--    cpu = NULL;
--    goto cleanup;
-+    return g_steal_pointer(&cpu);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86CheckFeature.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86CheckFeature.patch
deleted file mode 100644
index e10e3a4..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86CheckFeature.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 22d4493fd34661f4b93c8d4c885e627d561f2e70 Mon Sep 17 00:00:00 2001
-Message-Id: <22d4493fd34661f4b93c8d4c885e627d561f2e70@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:18 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86CheckFeature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3b5f1ca58e8f12bc7b768206cb9c7c2ef237e3ff)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <0834c0debe689b9b8a5f694738edc149856a08fa.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 11 +++--------
- 1 file changed, 3 insertions(+), 8 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 56081145c0..0aebe534e6 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2278,21 +2278,16 @@ static int
- virCPUx86CheckFeature(const virCPUDef *cpu,
-                       const char *name)
- {
--    int ret = -1;
-     virCPUx86MapPtr map;
--    virCPUx86ModelPtr model = NULL;
-+    g_autoptr(virCPUx86Model) model = NULL;
- 
-     if (!(map = virCPUx86GetMap()))
-         return -1;
- 
-     if (!(model = x86ModelFromCPU(cpu, map, -1)))
--        goto cleanup;
--
--    ret = x86FeatureInData(name, &model->data, map);
-+        return -1;
- 
-- cleanup:
--    x86ModelFree(model);
--    return ret;
-+    return x86FeatureInData(name, &model->data, map);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Compare.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Compare.patch
deleted file mode 100644
index 1d15db0..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Compare.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 2abd91246d3967f62473a9034f5d11f8e8ea8980 Mon Sep 17 00:00:00 2001
-Message-Id: <2abd91246d3967f62473a9034f5d11f8e8ea8980@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:14 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Compare
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit bc62d7a49141d745b19d066c07599f228020a0b3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <548eeddbf9eabf5e4a872390189bb0adf746c75f.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 16 +++++++---------
- 1 file changed, 7 insertions(+), 9 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 1a1c846383..c111ff45d4 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1847,32 +1847,30 @@ virCPUx86Compare(virCPUDefPtr host,
-                  virCPUDefPtr cpu,
-                  bool failIncompatible)
- {
--    virCPUCompareResult ret = VIR_CPU_COMPARE_ERROR;
--    char *message = NULL;
-+    virCPUCompareResult ret;
-+    g_autofree char *message = NULL;
- 
-     if (!host || !host->model) {
-         if (failIncompatible) {
-             virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s",
-                            _("unknown host CPU"));
--        } else {
--            VIR_WARN("unknown host CPU");
--            ret = VIR_CPU_COMPARE_INCOMPATIBLE;
-+            return VIR_CPU_COMPARE_ERROR;
-         }
--        goto cleanup;
-+
-+        VIR_WARN("unknown host CPU");
-+        return VIR_CPU_COMPARE_INCOMPATIBLE;
-     }
- 
-     ret = x86Compute(host, cpu, NULL, &message);
- 
-     if (ret == VIR_CPU_COMPARE_INCOMPATIBLE && failIncompatible) {
--        ret = VIR_CPU_COMPARE_ERROR;
-         if (message)
-             virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s", message);
-         else
-             virReportError(VIR_ERR_CPU_INCOMPATIBLE, NULL);
-+        return VIR_CPU_COMPARE_ERROR;
-     }
- 
-- cleanup:
--    VIR_FREE(message);
-     return ret;
- }
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86CopyMigratable.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86CopyMigratable.patch
deleted file mode 100644
index cd2562e..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86CopyMigratable.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From a96d5bdc7d2d2de7b35820530f0665dda3c66c68 Mon Sep 17 00:00:00 2001
-Message-Id: <a96d5bdc7d2d2de7b35820530f0665dda3c66c68@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:26 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86CopyMigratable
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit a32a3e934f5e7769dc9d12a221f344319200b435)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <240a340d63d1c8612e58c2d5c52970291f3e7b6d.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 10 +++-------
- 1 file changed, 3 insertions(+), 7 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 917cf857a6..b4b1b475d6 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -3109,7 +3109,7 @@ x86FeatureFilterMigratable(const char *name,
- static virCPUDefPtr
- virCPUx86CopyMigratable(virCPUDefPtr cpu)
- {
--    virCPUDefPtr copy;
-+    g_autoptr(virCPUDef) copy = NULL;
-     virCPUx86MapPtr map;
- 
-     if (!(map = virCPUx86GetMap()))
-@@ -3120,13 +3120,9 @@ virCPUx86CopyMigratable(virCPUDefPtr cpu)
- 
-     if (virCPUDefCopyModelFilter(copy, cpu, false,
-                                  x86FeatureFilterMigratable, map) < 0)
--        goto error;
--
--    return copy;
-+        return NULL;
- 
-- error:
--    virCPUDefFree(copy);
--    return NULL;
-+    return g_steal_pointer(&copy);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86DataParse.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86DataParse.patch
deleted file mode 100644
index f9b1904..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86DataParse.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From 45226d208c57719b50152dbec99a75969989208b Mon Sep 17 00:00:00 2001
-Message-Id: <45226d208c57719b50152dbec99a75969989208b@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:12 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86DataParse
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c1532711dda6db27c7f6fa7d86ab5ec5d2ab2224)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <e98c6869043aa0b7d0cc3adffe879f5d7d3c39f2.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 23 ++++++++---------------
- 1 file changed, 8 insertions(+), 15 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index cb5a2f941e..107fd9227d 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1636,8 +1636,8 @@ virCPUx86DataFormat(const virCPUData *data)
- static virCPUDataPtr
- virCPUx86DataParse(xmlXPathContextPtr ctxt)
- {
--    xmlNodePtr *nodes = NULL;
--    virCPUDataPtr cpuData = NULL;
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    g_autoptr(virCPUData) cpuData = NULL;
-     virCPUx86DataItem item;
-     size_t i;
-     int n;
-@@ -1646,11 +1646,11 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
-     if (n <= 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                        _("no x86 CPU data found"));
--        goto error;
-+        return NULL;
-     }
- 
-     if (!(cpuData = virCPUDataNew(VIR_ARCH_X86_64)))
--        goto error;
-+        return NULL;
- 
-     for (i = 0; i < n; i++) {
-         ctxt->node = nodes[i];
-@@ -1658,28 +1658,21 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
-             if (x86ParseCPUID(ctxt, &item) < 0) {
-                 virReportError(VIR_ERR_INTERNAL_ERROR,
-                                _("failed to parse cpuid[%zu]"), i);
--                goto error;
-+                return NULL;
-             }
-         } else {
-             if (x86ParseMSR(ctxt, &item) < 0) {
-                 virReportError(VIR_ERR_INTERNAL_ERROR,
-                                _("failed to parse msr[%zu]"), i);
--                goto error;
-+                return NULL;
-             }
-         }
- 
-         if (virCPUx86DataAdd(cpuData, &item) < 0)
--            goto error;
-+            return NULL;
-     }
- 
-- cleanup:
--    VIR_FREE(nodes);
--    return cpuData;
--
-- error:
--    virCPUx86DataFree(cpuData);
--    cpuData = NULL;
--    goto cleanup;
-+    return g_steal_pointer(&cpuData);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86ExpandFeatures.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86ExpandFeatures.patch
deleted file mode 100644
index 21fe489..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86ExpandFeatures.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 5f9b035adcf2813beb6cc82200b745f5e34acd8d Mon Sep 17 00:00:00 2001
-Message-Id: <5f9b035adcf2813beb6cc82200b745f5e34acd8d@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:25 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86ExpandFeatures
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit ff6897c84504a3e663759d710968ad1f72bc9208)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <d82daa166403fda2bcd89c68478162b45d8b9711.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 22 ++++++++--------------
- 1 file changed, 8 insertions(+), 14 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index c4654c8d4c..917cf857a6 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -3055,30 +3055,29 @@ static int
- virCPUx86ExpandFeatures(virCPUDefPtr cpu)
- {
-     virCPUx86MapPtr map;
--    virCPUDefPtr expanded = NULL;
--    virCPUx86ModelPtr model = NULL;
-+    g_autoptr(virCPUDef) expanded = NULL;
-+    g_autoptr(virCPUx86Model) model = NULL;
-     bool host = cpu->type == VIR_CPU_TYPE_HOST;
-     size_t i;
--    int ret = -1;
- 
-     if (!(map = virCPUx86GetMap()))
--        goto cleanup;
-+        return -1;
- 
-     if (!(expanded = virCPUDefCopy(cpu)))
--        goto cleanup;
-+        return -1;
- 
-     virCPUDefFreeFeatures(expanded);
- 
-     if (!(model = x86ModelFind(map, cpu->model))) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("unknown CPU model %s"), cpu->model);
--        goto cleanup;
-+        return -1;
-     }
- 
-     if (!(model = x86ModelCopy(model)) ||
-         x86DataToCPUFeatures(expanded, host ? -1 : VIR_CPU_FEATURE_REQUIRE,
-                              &model->data, map) < 0)
--        goto cleanup;
-+        return -1;
- 
-     for (i = 0; i < cpu->nfeatures; i++) {
-         virCPUFeatureDefPtr f = cpu->features + i;
-@@ -3089,17 +3088,12 @@ virCPUx86ExpandFeatures(virCPUDefPtr cpu)
-             continue;
- 
-         if (virCPUDefUpdateFeature(expanded, f->name, f->policy) < 0)
--            goto cleanup;
-+            return -1;
-     }
- 
-     virCPUDefFreeModel(cpu);
- 
--    ret = virCPUDefCopyModel(cpu, expanded, false);
--
-- cleanup:
--    virCPUDefFree(expanded);
--    x86ModelFree(model);
--    return ret;
-+    return virCPUDefCopyModel(cpu, expanded, false);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86GetHost.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86GetHost.patch
deleted file mode 100644
index 41ebaa9..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86GetHost.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 0b64dac1a3a9ef9cdfe3446ebbe114da1ae86e97 Mon Sep 17 00:00:00 2001
-Message-Id: <0b64dac1a3a9ef9cdfe3446ebbe114da1ae86e97@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:19 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86GetHost
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4a7f6f43a2a6144780d7ab74b8a6f6b008a7aa9d)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <94056710375d491c42d12a46b20f670453c2a1c8.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 14 ++++++--------
- 1 file changed, 6 insertions(+), 8 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 0aebe534e6..1ade53a4a8 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2637,18 +2637,18 @@ static int
- virCPUx86GetHost(virCPUDefPtr cpu,
-                  virDomainCapsCPUModelsPtr models)
- {
--    virCPUDataPtr cpuData = NULL;
--    int ret = -1;
-+    g_autoptr(virCPUData) cpuData = NULL;
-+    int ret;
- 
-     if (virCPUx86DriverInitialize() < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (!(cpuData = virCPUDataNew(archs[0])))
--        goto cleanup;
-+        return -1;
- 
-     if (cpuidSet(CPUX86_BASIC, cpuData) < 0 ||
-         cpuidSet(CPUX86_EXTENDED, cpuData) < 0)
--        goto cleanup;
-+        return -1;
- 
-     /* Read the IA32_ARCH_CAPABILITIES MSR (0x10a) if supported.
-      * This is best effort since there might be no way to read the MSR
-@@ -2668,7 +2668,7 @@ virCPUx86GetHost(virCPUDefPtr cpu,
-             };
- 
-             if (virCPUx86DataAdd(cpuData, &item) < 0)
--                goto cleanup;
-+                return -1;
-         }
-     }
- 
-@@ -2684,8 +2684,6 @@ virCPUx86GetHost(virCPUDefPtr cpu,
-         VIR_DEBUG("Host CPU does not support invariant TSC");
-     }
- 
-- cleanup:
--    virCPUx86DataFree(cpuData);
-     return ret;
- }
- #endif
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86LoadMap.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86LoadMap.patch
deleted file mode 100644
index d07a62e..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86LoadMap.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 91a87dbe3a25e405ea5fbd87e4444ca77d04a34c Mon Sep 17 00:00:00 2001
-Message-Id: <91a87dbe3a25e405ea5fbd87e4444ca77d04a34c@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:11 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86LoadMap
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3c650a8f7a89046b925fb5ddc78c4b6669ed76ef)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <63da1b86ef1c4f174234ff34e43d502afe326a2b.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 10 +++-------
- 1 file changed, 3 insertions(+), 7 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 20cdd24390..cb5a2f941e 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1559,18 +1559,14 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Map, x86MapFree);
- static virCPUx86MapPtr
- virCPUx86LoadMap(void)
- {
--    virCPUx86MapPtr map;
-+    g_autoptr(virCPUx86Map) map = NULL;
- 
-     map = g_new0(virCPUx86Map, 1);
- 
-     if (cpuMapLoad("x86", x86VendorParse, x86FeatureParse, x86ModelParse, map) < 0)
--        goto error;
--
--    return map;
-+        return NULL;
- 
-- error:
--    x86MapFree(map);
--    return NULL;
-+    return g_steal_pointer(&map);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Translate.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Translate.patch
deleted file mode 100644
index e174de7..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Translate.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From 13d45a3f07d1639250101b037bb65c20aed60763 Mon Sep 17 00:00:00 2001
-Message-Id: <13d45a3f07d1639250101b037bb65c20aed60763@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:24 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Translate
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit dff59020187c34e3f814c2aa24f3832d1d5b34f9)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <574920457f9fec4bc1938615016278eddd46ba90.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 26 ++++++++++----------------
- 1 file changed, 10 insertions(+), 16 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index e3a83061d0..c4654c8d4c 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -3015,45 +3015,39 @@ static int
- virCPUx86Translate(virCPUDefPtr cpu,
-                    virDomainCapsCPUModelsPtr models)
- {
--    virCPUDefPtr translated = NULL;
-+    g_autoptr(virCPUDef) translated = NULL;
-     virCPUx86MapPtr map;
--    virCPUx86ModelPtr model = NULL;
-+    g_autoptr(virCPUx86Model) model = NULL;
-     size_t i;
--    int ret = -1;
- 
-     if (!(map = virCPUx86GetMap()))
--        goto cleanup;
-+        return -1;
- 
-     if (!(model = x86ModelFromCPU(cpu, map, -1)))
--        goto cleanup;
-+        return -1;
- 
-     if (model->vendor &&
-         virCPUx86DataAddItem(&model->data, &model->vendor->data) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (model->signatures &&
-         x86DataAddSignature(&model->data, model->signatures[0]) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (!(translated = virCPUDefCopyWithoutModel(cpu)))
--        goto cleanup;
-+        return -1;
- 
-     if (x86Decode(translated, &model->data, models, NULL, false) < 0)
--        goto cleanup;
-+        return -1;
- 
-     for (i = 0; i < cpu->nfeatures; i++) {
-         virCPUFeatureDefPtr f = cpu->features + i;
-         if (virCPUDefUpdateFeature(translated, f->name, f->policy) < 0)
--            goto cleanup;
-+            return -1;
-     }
- 
-     virCPUDefStealModel(cpu, translated, true);
--    ret = 0;
--
-- cleanup:
--    virCPUDefFree(translated);
--    x86ModelFree(model);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Update.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Update.patch
deleted file mode 100644
index be42132..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86Update.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 2631931d1dc94aeab384d92bd00866de912c9b7d Mon Sep 17 00:00:00 2001
-Message-Id: <2631931d1dc94aeab384d92bd00866de912c9b7d@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:22 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86Update
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit e0244a786db265647ab6c1c37ca3852876e4b0a3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1d8ad3e099081c35a41e1013458fa52d8fb4fae0.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 15 +++++----------
- 1 file changed, 5 insertions(+), 10 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 98f7863b6f..1f7a8802f6 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2853,9 +2853,8 @@ static int
- virCPUx86Update(virCPUDefPtr guest,
-                 const virCPUDef *host)
- {
--    virCPUx86ModelPtr model = NULL;
-+    g_autoptr(virCPUx86Model) model = NULL;
-     virCPUx86MapPtr map;
--    int ret = -1;
-     size_t i;
- 
-     if (!host) {
-@@ -2868,14 +2867,14 @@ virCPUx86Update(virCPUDefPtr guest,
-         return -1;
- 
-     if (!(model = x86ModelFromCPU(host, map, -1)))
--        goto cleanup;
-+        return -1;
- 
-     for (i = 0; i < guest->nfeatures; i++) {
-         if (guest->features[i].policy == VIR_CPU_FEATURE_OPTIONAL) {
-             int supported = x86FeatureInData(guest->features[i].name,
-                                              &model->data, map);
-             if (supported < 0)
--                goto cleanup;
-+                return -1;
-             else if (supported)
-                 guest->features[i].policy = VIR_CPU_FEATURE_REQUIRE;
-             else
-@@ -2885,13 +2884,9 @@ virCPUx86Update(virCPUDefPtr guest,
- 
-     if (guest->mode == VIR_CPU_MODE_HOST_MODEL ||
-         guest->match == VIR_CPU_MATCH_MINIMUM)
--        ret = x86UpdateHostModel(guest, host);
--    else
--        ret = 0;
-+        return x86UpdateHostModel(guest, host);
- 
-- cleanup:
--    x86ModelFree(model);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86UpdateLive.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86UpdateLive.patch
deleted file mode 100644
index 33aba20..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-virCPUx86UpdateLive.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 7a293db132130fdda7b550d701fdb426de5257e3 Mon Sep 17 00:00:00 2001
-Message-Id: <7a293db132130fdda7b550d701fdb426de5257e3@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:23 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in virCPUx86UpdateLive
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2748e91c548cbc48a5ea499e06e62de528c10d20)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <5c29b10ead2332033087fc6ed487c9ca53b7e3a4.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 42 +++++++++++++++---------------------------
- 1 file changed, 15 insertions(+), 27 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 1f7a8802f6..e3a83061d0 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2897,26 +2897,25 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
- {
-     bool hostPassthrough = cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH;
-     virCPUx86MapPtr map;
--    virCPUx86ModelPtr model = NULL;
--    virCPUx86ModelPtr modelDisabled = NULL;
--    virCPUx86Data enabled = VIR_CPU_X86_DATA_INIT;
--    virCPUx86Data disabled = VIR_CPU_X86_DATA_INIT;
--    virBuffer bufAdded = VIR_BUFFER_INITIALIZER;
--    virBuffer bufRemoved = VIR_BUFFER_INITIALIZER;
--    char *added = NULL;
--    char *removed = NULL;
-+    g_autoptr(virCPUx86Model) model = NULL;
-+    g_autoptr(virCPUx86Model) modelDisabled = NULL;
-+    g_auto(virCPUx86Data) enabled = VIR_CPU_X86_DATA_INIT;
-+    g_auto(virCPUx86Data) disabled = VIR_CPU_X86_DATA_INIT;
-+    g_auto(virBuffer) bufAdded = VIR_BUFFER_INITIALIZER;
-+    g_auto(virBuffer) bufRemoved = VIR_BUFFER_INITIALIZER;
-+    g_autofree char *added = NULL;
-+    g_autofree char *removed = NULL;
-     size_t i;
--    int ret = -1;
- 
-     if (!(map = virCPUx86GetMap()))
-         return -1;
- 
-     if (!(model = x86ModelFromCPU(cpu, map, -1)))
--        goto cleanup;
-+        return -1;
- 
-     if (hostPassthrough &&
-         !(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
--        goto cleanup;
-+        return -1;
- 
-     if (dataEnabled)
-         x86DataCopy(&enabled, &dataEnabled->data.x86);
-@@ -2941,7 +2940,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-                 virBufferAsprintf(&bufAdded, "%s,", feature->name);
-             else if (virCPUDefUpdateFeature(cpu, feature->name,
-                                             VIR_CPU_FEATURE_REQUIRE) < 0)
--                goto cleanup;
-+                return -1;
-         }
- 
-         if (x86DataIsSubset(&disabled, &feature->data) ||
-@@ -2952,7 +2951,7 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-                 virBufferAsprintf(&bufRemoved, "%s,", feature->name);
-             else if (virCPUDefUpdateFeature(cpu, feature->name,
-                                             VIR_CPU_FEATURE_DISABLE) < 0)
--                goto cleanup;
-+                return -1;
-         }
-     }
- 
-@@ -2978,28 +2977,17 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-                            _("guest CPU doesn't match specification: "
-                              "missing features: %s"),
-                            removed);
--        goto cleanup;
-+        return -1;
-     }
- 
-     if (cpu->check == VIR_CPU_CHECK_FULL &&
-         !x86DataIsEmpty(&disabled)) {
-         virReportError(VIR_ERR_OPERATION_FAILED, "%s",
-                        _("guest CPU doesn't match specification"));
--        goto cleanup;
-+        return -1;
-     }
- 
--    ret = 0;
--
-- cleanup:
--    x86ModelFree(model);
--    x86ModelFree(modelDisabled);
--    virCPUx86DataClear(&enabled);
--    virCPUx86DataClear(&disabled);
--    VIR_FREE(added);
--    VIR_FREE(removed);
--    virBufferFreeAndReset(&bufAdded);
--    virBufferFreeAndReset(&bufRemoved);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Compute.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Compute.patch
deleted file mode 100644
index ed0548d..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Compute.patch
+++ /dev/null
@@ -1,181 +0,0 @@
-From b8162d4174443babbd260b36ea4645469eca7d67 Mon Sep 17 00:00:00 2001
-Message-Id: <b8162d4174443babbd260b36ea4645469eca7d67@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:13 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86Compute
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit edf3c9045f1742d6c132066e4ba2da25c9ad7b26)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <6022f3717ce7ab0df25d31f2aaa08cac1c5f82de.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 65 +++++++++++++++++------------------------------
- 1 file changed, 24 insertions(+), 41 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 107fd9227d..1a1c846383 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1680,7 +1680,6 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
-  * redundant code:
-  * MSG: error message
-  * CPU_DEF: a virCPUx86Data pointer with flags that are conflicting
-- * RET: return code to set
-  *
-  * This macro generates the error string outputs it into logs.
-  */
-@@ -1689,13 +1688,12 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
-             char *flagsStr = NULL; \
-             if (!(flagsStr = x86FeatureNames(map, ", ", (CPU_DEF)))) { \
-                 virReportOOMError(); \
--                goto error; \
-+                return VIR_CPU_COMPARE_ERROR; \
-             } \
-             if (message) \
-                 *message = g_strdup_printf("%s: %s", _(MSG), flagsStr); \
-             VIR_DEBUG("%s: %s", MSG, flagsStr); \
-             VIR_FREE(flagsStr); \
--            ret = VIR_CPU_COMPARE_INCOMPATIBLE; \
-         } while (0)
- 
- 
-@@ -1706,15 +1704,15 @@ x86Compute(virCPUDefPtr host,
-            char **message)
- {
-     virCPUx86MapPtr map = NULL;
--    virCPUx86ModelPtr host_model = NULL;
--    virCPUx86ModelPtr cpu_force = NULL;
--    virCPUx86ModelPtr cpu_require = NULL;
--    virCPUx86ModelPtr cpu_optional = NULL;
--    virCPUx86ModelPtr cpu_disable = NULL;
--    virCPUx86ModelPtr cpu_forbid = NULL;
--    virCPUx86ModelPtr diff = NULL;
--    virCPUx86ModelPtr guest_model = NULL;
--    virCPUDataPtr guestData = NULL;
-+    g_autoptr(virCPUx86Model) host_model = NULL;
-+    g_autoptr(virCPUx86Model) cpu_force = NULL;
-+    g_autoptr(virCPUx86Model) cpu_require = NULL;
-+    g_autoptr(virCPUx86Model) cpu_optional = NULL;
-+    g_autoptr(virCPUx86Model) cpu_disable = NULL;
-+    g_autoptr(virCPUx86Model) cpu_forbid = NULL;
-+    g_autoptr(virCPUx86Model) diff = NULL;
-+    g_autoptr(virCPUx86Model) guest_model = NULL;
-+    g_autoptr(virCPUData) guestData = NULL;
-     virCPUCompareResult ret;
-     virCPUx86CompareResult result;
-     virArch arch;
-@@ -1764,13 +1762,13 @@ x86Compute(virCPUDefPtr host,
-         !(cpu_optional = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_OPTIONAL)) ||
-         !(cpu_disable = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)) ||
-         !(cpu_forbid = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_FORBID)))
--        goto error;
-+        return VIR_CPU_COMPARE_ERROR;
- 
-     x86DataIntersect(&cpu_forbid->data, &host_model->data);
-     if (!x86DataIsEmpty(&cpu_forbid->data)) {
-         virX86CpuIncompatible(N_("Host CPU provides forbidden features"),
-                               &cpu_forbid->data);
--        goto cleanup;
-+        return VIR_CPU_COMPARE_INCOMPATIBLE;
-     }
- 
-     /* first remove features that were inherited from the CPU model and were
-@@ -1785,20 +1783,20 @@ x86Compute(virCPUDefPtr host,
-         virX86CpuIncompatible(N_("Host CPU does not provide required "
-                                  "features"),
-                               &cpu_require->data);
--        goto cleanup;
-+        return VIR_CPU_COMPARE_INCOMPATIBLE;
-     }
- 
--    ret = VIR_CPU_COMPARE_IDENTICAL;
--
-     if (!(diff = x86ModelCopy(host_model)))
--        goto error;
-+        return VIR_CPU_COMPARE_ERROR;
- 
-     x86DataSubtract(&diff->data, &cpu_optional->data);
-     x86DataSubtract(&diff->data, &cpu_require->data);
-     x86DataSubtract(&diff->data, &cpu_disable->data);
-     x86DataSubtract(&diff->data, &cpu_force->data);
- 
--    if (!x86DataIsEmpty(&diff->data))
-+    if (x86DataIsEmpty(&diff->data))
-+        ret = VIR_CPU_COMPARE_IDENTICAL;
-+    else
-         ret = VIR_CPU_COMPARE_SUPERSET;
- 
-     if (ret == VIR_CPU_COMPARE_SUPERSET
-@@ -1807,54 +1805,39 @@ x86Compute(virCPUDefPtr host,
-         virX86CpuIncompatible(N_("Host CPU does not strictly match guest CPU: "
-                                  "Extra features"),
-                               &diff->data);
--        goto cleanup;
-+        return VIR_CPU_COMPARE_INCOMPATIBLE;
-     }
- 
-     if (guest) {
-         if (!(guest_model = x86ModelCopy(host_model)))
--            goto error;
-+            return VIR_CPU_COMPARE_ERROR;
- 
-         if (cpu->vendor && host_model->vendor &&
-             virCPUx86DataAddItem(&guest_model->data,
-                                  &host_model->vendor->data) < 0)
--            goto error;
-+            return VIR_CPU_COMPARE_ERROR;
- 
-         if (host_model->signatures &&
-             x86DataAddSignature(&guest_model->data, *host_model->signatures) < 0)
--            goto error;
-+            return VIR_CPU_COMPARE_ERROR;
- 
-         if (cpu->type == VIR_CPU_TYPE_GUEST
-             && cpu->match == VIR_CPU_MATCH_EXACT)
-             x86DataSubtract(&guest_model->data, &diff->data);
- 
-         if (x86DataAdd(&guest_model->data, &cpu_force->data))
--            goto error;
-+            return VIR_CPU_COMPARE_ERROR;
- 
-         x86DataSubtract(&guest_model->data, &cpu_disable->data);
- 
-         if (!(guestData = virCPUDataNew(arch)))
--            goto error;
-+            return VIR_CPU_COMPARE_ERROR;
-         x86DataCopy(&guestData->data.x86, &guest_model->data);
- 
--        *guest = guestData;
-+        *guest = g_steal_pointer(&guestData);
-     }
- 
-- cleanup:
--    x86ModelFree(host_model);
--    x86ModelFree(diff);
--    x86ModelFree(cpu_force);
--    x86ModelFree(cpu_require);
--    x86ModelFree(cpu_optional);
--    x86ModelFree(cpu_disable);
--    x86ModelFree(cpu_forbid);
--    x86ModelFree(guest_model);
--
-     return ret;
--
-- error:
--    virCPUx86DataFree(guestData);
--    ret = VIR_CPU_COMPARE_ERROR;
--    goto cleanup;
- }
- #undef virX86CpuIncompatible
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86DataToCPU.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86DataToCPU.patch
deleted file mode 100644
index 563a3f0..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86DataToCPU.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From caedf791f3486b5b3ed1ef54e9c25e7c97b3a39a Mon Sep 17 00:00:00 2001
-Message-Id: <caedf791f3486b5b3ed1ef54e9c25e7c97b3a39a@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:06 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86DataToCPU
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4f2fdad36db2da1aa139470846b3f60f65da8424)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <6f88b9d54c70352f9e4aeadd515cd9f4a599545a.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 20 ++++++--------------
- 1 file changed, 6 insertions(+), 14 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 48f36c2bfc..310dfcbcb3 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -771,9 +771,9 @@ x86DataToCPU(const virCPUx86Data *data,
-              virCPUx86MapPtr map,
-              virDomainCapsCPUModelPtr hvModel)
- {
--    virCPUDefPtr cpu;
--    virCPUx86Data copy = VIR_CPU_X86_DATA_INIT;
--    virCPUx86Data modelData = VIR_CPU_X86_DATA_INIT;
-+    g_autoptr(virCPUDef) cpu = NULL;
-+    g_auto(virCPUx86Data) copy = VIR_CPU_X86_DATA_INIT;
-+    g_auto(virCPUx86Data) modelData = VIR_CPU_X86_DATA_INIT;
-     virCPUx86VendorPtr vendor;
- 
-     cpu = virCPUDefNew();
-@@ -801,7 +801,7 @@ x86DataToCPU(const virCPUx86Data *data,
-             if ((feature = x86FeatureFind(map, *blocker)) &&
-                 !x86DataIsSubset(&copy, &feature->data))
-                 if (x86DataAdd(&modelData, &feature->data) < 0)
--                    goto error;
-+                    return NULL;
-         }
-     }
- 
-@@ -810,17 +810,9 @@ x86DataToCPU(const virCPUx86Data *data,
- 
-     if (x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_REQUIRE, &copy, map) ||
-         x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_DISABLE, &modelData, map))
--        goto error;
--
-- cleanup:
--    virCPUx86DataClear(&modelData);
--    virCPUx86DataClear(&copy);
--    return cpu;
-+        return NULL;
- 
-- error:
--    virCPUDefFree(cpu);
--    cpu = NULL;
--    goto cleanup;
-+    return g_steal_pointer(&cpu);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Decode.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Decode.patch
deleted file mode 100644
index a98d3e4..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Decode.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From e9b93240af4c391414b301c7a4a20837bc09b109 Mon Sep 17 00:00:00 2001
-Message-Id: <e9b93240af4c391414b301c7a4a20837bc09b109@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:15 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86Decode
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9bb9cbf6761ecf985fe9cf8a18030a8aff9b448b)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1414d86a79eb63d5600cf494455411814cbf10f7.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 24 +++++++-----------------
- 1 file changed, 7 insertions(+), 17 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index c111ff45d4..dba4165527 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2032,15 +2032,12 @@ x86Decode(virCPUDefPtr cpu,
-           const char *preferred,
-           bool migratable)
- {
--    int ret = -1;
-     virCPUx86MapPtr map;
-     virCPUx86ModelPtr candidate;
-     virCPUDefPtr cpuCandidate;
-     virCPUx86ModelPtr model = NULL;
--    virCPUDefPtr cpuModel = NULL;
--    virCPUx86Data data = VIR_CPU_X86_DATA_INIT;
--    virCPUx86Data copy = VIR_CPU_X86_DATA_INIT;
--    virCPUx86Data features = VIR_CPU_X86_DATA_INIT;
-+    g_autoptr(virCPUDef) cpuModel = NULL;
-+    g_auto(virCPUx86Data) data = VIR_CPU_X86_DATA_INIT;
-     virCPUx86VendorPtr vendor;
-     virDomainCapsCPUModelPtr hvModel = NULL;
-     g_autofree char *sigs = NULL;
-@@ -2054,7 +2051,7 @@ x86Decode(virCPUDefPtr cpu,
-     x86DataCopy(&data, cpuData);
- 
-     if (!(map = virCPUx86GetMap()))
--        goto cleanup;
-+        return -1;
- 
-     vendor = x86DataToVendor(&data, map);
-     signature = x86DataToSignature(&data);
-@@ -2073,7 +2070,7 @@ x86Decode(virCPUDefPtr cpu,
-                     virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                                    _("CPU model %s is not supported by hypervisor"),
-                                    preferred);
--                    goto cleanup;
-+                    return -1;
-                 } else {
-                     VIR_WARN("Preferred CPU model %s not allowed by"
-                              " hypervisor; closest supported model will be"
-@@ -2096,7 +2093,7 @@ x86Decode(virCPUDefPtr cpu,
-         }
- 
-         if (!(cpuCandidate = x86DataToCPU(&data, candidate, map, hvModel)))
--            goto cleanup;
-+            return -1;
-         cpuCandidate->type = cpu->type;
- 
-         if ((rc = x86DecodeUseCandidate(model, cpuModel,
-@@ -2115,7 +2112,7 @@ x86Decode(virCPUDefPtr cpu,
-     if (!cpuModel) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        "%s", _("Cannot find suitable CPU model for given data"));
--        goto cleanup;
-+        return -1;
-     }
- 
-     /* Remove non-migratable features if requested
-@@ -2149,14 +2146,7 @@ x86Decode(virCPUDefPtr cpu,
-     cpu->nfeatures_max = cpuModel->nfeatures_max;
-     cpuModel->nfeatures_max = 0;
- 
--    ret = 0;
--
-- cleanup:
--    virCPUDefFree(cpuModel);
--    virCPUx86DataClear(&data);
--    virCPUx86DataClear(&copy);
--    virCPUx86DataClear(&features);
--    return ret;
-+    return 0;
- }
- 
- static int
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Encode.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Encode.patch
deleted file mode 100644
index bd2ed7e..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86Encode.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-From fc8f77c828ada1bfd3ac4957410f9b4efc659ce1 Mon Sep 17 00:00:00 2001
-Message-Id: <fc8f77c828ada1bfd3ac4957410f9b4efc659ce1@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:17 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86Encode
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit e6e54fcebe99f1c07fe905c419cbe5d12f6844b1)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <4729842dcc538cca58a2ccd18fe2bcf9be410bbb.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 51 +++++++++++++++++++----------------------------
- 1 file changed, 21 insertions(+), 30 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index fd410aeafb..56081145c0 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2188,12 +2188,12 @@ x86Encode(virArch arch,
-           virCPUDataPtr *vendor)
- {
-     virCPUx86MapPtr map = NULL;
--    virCPUDataPtr data_forced = NULL;
--    virCPUDataPtr data_required = NULL;
--    virCPUDataPtr data_optional = NULL;
--    virCPUDataPtr data_disabled = NULL;
--    virCPUDataPtr data_forbidden = NULL;
--    virCPUDataPtr data_vendor = NULL;
-+    g_autoptr(virCPUData) data_forced = NULL;
-+    g_autoptr(virCPUData) data_required = NULL;
-+    g_autoptr(virCPUData) data_optional = NULL;
-+    g_autoptr(virCPUData) data_disabled = NULL;
-+    g_autoptr(virCPUData) data_forbidden = NULL;
-+    g_autoptr(virCPUData) data_vendor = NULL;
- 
-     if (forced)
-         *forced = NULL;
-@@ -2209,37 +2209,37 @@ x86Encode(virArch arch,
-         *vendor = NULL;
- 
-     if (!(map = virCPUx86GetMap()))
--        goto error;
-+        return -1;
- 
-     if (forced &&
-         (!(data_forced = virCPUDataNew(arch)) ||
-          x86EncodePolicy(&data_forced->data.x86, cpu, map,
-                          VIR_CPU_FEATURE_FORCE) < 0))
--        goto error;
-+        return -1;
- 
-     if (required &&
-         (!(data_required = virCPUDataNew(arch)) ||
-          x86EncodePolicy(&data_required->data.x86, cpu, map,
-                          VIR_CPU_FEATURE_REQUIRE) < 0))
--        goto error;
-+        return -1;
- 
-     if (optional &&
-         (!(data_optional = virCPUDataNew(arch)) ||
-          x86EncodePolicy(&data_optional->data.x86, cpu, map,
-                          VIR_CPU_FEATURE_OPTIONAL) < 0))
--        goto error;
-+        return -1;
- 
-     if (disabled &&
-         (!(data_disabled = virCPUDataNew(arch)) ||
-          x86EncodePolicy(&data_disabled->data.x86, cpu, map,
-                          VIR_CPU_FEATURE_DISABLE) < 0))
--        goto error;
-+        return -1;
- 
-     if (forbidden &&
-         (!(data_forbidden = virCPUDataNew(arch)) ||
-          x86EncodePolicy(&data_forbidden->data.x86, cpu, map,
-                          VIR_CPU_FEATURE_FORBID) < 0))
--        goto error;
-+        return -1;
- 
-     if (vendor) {
-         virCPUx86VendorPtr v = NULL;
-@@ -2247,39 +2247,30 @@ x86Encode(virArch arch,
-         if (cpu->vendor && !(v = x86VendorFind(map, cpu->vendor))) {
-             virReportError(VIR_ERR_OPERATION_FAILED,
-                            _("CPU vendor %s not found"), cpu->vendor);
--            goto error;
-+            return -1;
-         }
- 
-         if (!(data_vendor = virCPUDataNew(arch)))
--            goto error;
-+            return -1;
- 
-         if (v && virCPUx86DataAdd(data_vendor, &v->data) < 0)
--            goto error;
-+            return -1;
-     }
- 
-     if (forced)
--        *forced = data_forced;
-+        *forced = g_steal_pointer(&data_forced);
-     if (required)
--        *required = data_required;
-+        *required = g_steal_pointer(&data_required);
-     if (optional)
--        *optional = data_optional;
-+        *optional = g_steal_pointer(&data_optional);
-     if (disabled)
--        *disabled = data_disabled;
-+        *disabled = g_steal_pointer(&data_disabled);
-     if (forbidden)
--        *forbidden = data_forbidden;
-+        *forbidden = g_steal_pointer(&data_forbidden);
-     if (vendor)
--        *vendor = data_vendor;
-+        *vendor = g_steal_pointer(&data_vendor);
- 
-     return 0;
--
-- error:
--    virCPUx86DataFree(data_forced);
--    virCPUx86DataFree(data_required);
--    virCPUx86DataFree(data_optional);
--    virCPUx86DataFree(data_disabled);
--    virCPUx86DataFree(data_forbidden);
--    virCPUx86DataFree(data_vendor);
--    return -1;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86EncodePolicy.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86EncodePolicy.patch
deleted file mode 100644
index ccdbf31..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86EncodePolicy.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From b91ae8a08c0906011e9ff2ed4f8c8fce908603b5 Mon Sep 17 00:00:00 2001
-Message-Id: <b91ae8a08c0906011e9ff2ed4f8c8fce908603b5@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:16 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86EncodePolicy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5b45d2cf1ff0d2d972f103a678c01bc0eb7c1e18)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <cf057cf29d8f8f2369eab3afb5202a6466c0dc2e.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index dba4165527..fd410aeafb 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2164,7 +2164,7 @@ x86EncodePolicy(virCPUx86Data *data,
-                 virCPUx86MapPtr map,
-                 virCPUFeaturePolicy policy)
- {
--    virCPUx86ModelPtr model;
-+    g_autoptr(virCPUx86Model) model = NULL;
- 
-     if (!(model = x86ModelFromCPU(cpu, map, policy)))
-         return -1;
-@@ -2172,7 +2172,6 @@ x86EncodePolicy(virCPUx86Data *data,
-     *data = model->data;
-     model->data.len = 0;
-     model->data.items = NULL;
--    x86ModelFree(model);
- 
-     return 0;
- }
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86FeatureParse.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86FeatureParse.patch
deleted file mode 100644
index 9f24a7b..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86FeatureParse.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 39dea7f80de53e9f7fb8f298d1f9f7f32f20fc29 Mon Sep 17 00:00:00 2001
-Message-Id: <39dea7f80de53e9f7fb8f298d1f9f7f32f20fc29@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:08 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86FeatureParse
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3125688f78f6289e51bfdaa196addb230b0de4e1)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <14cf6ca6816ee8bda3e195aa5218162b280715b5.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 31 ++++++++++++-------------------
- 1 file changed, 12 insertions(+), 19 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 3ffddf0342..10c5fbacf7 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1023,13 +1023,12 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
-                 void *data)
- {
-     virCPUx86MapPtr map = data;
--    xmlNodePtr *nodes = NULL;
--    virCPUx86FeaturePtr feature;
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    g_autoptr(virCPUx86Feature) feature = NULL;
-     virCPUx86DataItem item;
-     size_t i;
-     int n;
--    char *str = NULL;
--    int ret = -1;
-+    g_autofree char *str = NULL;
- 
-     feature = g_new0(virCPUx86Feature, 1);
-     feature->migratable = true;
-@@ -1038,7 +1037,7 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
-     if (x86FeatureFind(map, feature->name)) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("CPU feature %s already defined"), feature->name);
--        goto cleanup;
-+        return -1;
-     }
- 
-     str = virXPathString("string(@migratable)", ctxt);
-@@ -1047,13 +1046,13 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
- 
-     n = virXPathNodeSet("./cpuid|./msr", ctxt, &nodes);
-     if (n < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (n == 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("Missing cpuid or msr element in feature %s"),
-                        feature->name);
--        goto cleanup;
-+        return -1;
-     }
- 
-     for (i = 0; i < n; i++) {
-@@ -1063,37 +1062,31 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
-                 virReportError(VIR_ERR_INTERNAL_ERROR,
-                                _("Invalid cpuid[%zu] in %s feature"),
-                                i, feature->name);
--                goto cleanup;
-+                return -1;
-             }
-         } else {
-             if (x86ParseMSR(ctxt, &item) < 0) {
-                 virReportError(VIR_ERR_INTERNAL_ERROR,
-                                _("Invalid msr[%zu] in %s feature"),
-                                i, feature->name);
--                goto cleanup;
-+                return -1;
-             }
-         }
- 
-         if (virCPUx86DataAddItem(&feature->data, &item))
--            goto cleanup;
-+            return -1;
-     }
- 
-     if (!feature->migratable &&
-         VIR_APPEND_ELEMENT_COPY(map->migrate_blockers,
-                                 map->nblockers,
-                                 feature) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (VIR_APPEND_ELEMENT(map->features, map->nfeatures, feature) < 0)
--        goto cleanup;
--
--    ret = 0;
-+        return -1;
- 
-- cleanup:
--    x86FeatureFree(feature);
--    VIR_FREE(nodes);
--    VIR_FREE(str);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelFromCPU.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelFromCPU.patch
deleted file mode 100644
index c152310..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelFromCPU.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From db7c7611aa3f80aca75e557795a12354f6fde82c Mon Sep 17 00:00:00 2001
-Message-Id: <db7c7611aa3f80aca75e557795a12354f6fde82c@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:09 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86ModelFromCPU
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 93f173adbecee92f9973745a2aca65a27c4aa8a6)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <f205d9dfe07f4009faaeb702cf6be1726306747b.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 14 +++++---------
- 1 file changed, 5 insertions(+), 9 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 10c5fbacf7..5215405755 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1173,7 +1173,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
-                 virCPUx86MapPtr map,
-                 int policy)
- {
--    virCPUx86ModelPtr model = NULL;
-+    g_autoptr(virCPUx86Model) model = NULL;
-     size_t i;
- 
-     /* host CPU only contains required features; requesting other features
-@@ -1216,7 +1216,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
-         if (!(feature = x86FeatureFind(map, cpu->features[i].name))) {
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("Unknown CPU feature %s"), cpu->features[i].name);
--            goto error;
-+            return NULL;
-         }
- 
-         if (policy == -1) {
-@@ -1224,7 +1224,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
-             case VIR_CPU_FEATURE_FORCE:
-             case VIR_CPU_FEATURE_REQUIRE:
-                 if (x86DataAdd(&model->data, &feature->data) < 0)
--                    goto error;
-+                    return NULL;
-                 break;
- 
-             case VIR_CPU_FEATURE_DISABLE:
-@@ -1238,15 +1238,11 @@ x86ModelFromCPU(const virCPUDef *cpu,
-                 break;
-             }
-         } else if (x86DataAdd(&model->data, &feature->data) < 0) {
--            goto error;
-+            return NULL;
-         }
-     }
- 
--    return model;
--
-- error:
--    x86ModelFree(model);
--    return NULL;
-+    return g_steal_pointer(&model);
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelParse.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelParse.patch
deleted file mode 100644
index 53b7217..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86ModelParse.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 3400f296861c822d2b0e6d3b31e878c69187f40e Mon Sep 17 00:00:00 2001
-Message-Id: <3400f296861c822d2b0e6d3b31e878c69187f40e@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:10 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86ModelParse
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b239a60967cc2979f01e4521d6582b7d6acedd72)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <ed4ff8e858f5f735a3a6e013188aca08e8a9a94a.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 23 +++++++++--------------
- 1 file changed, 9 insertions(+), 14 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 5215405755..20cdd24390 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1493,41 +1493,36 @@ x86ModelParse(xmlXPathContextPtr ctxt,
-               void *data)
- {
-     virCPUx86MapPtr map = data;
--    virCPUx86ModelPtr model = NULL;
--    int ret = -1;
-+    g_autoptr(virCPUx86Model) model = NULL;
- 
-     if (x86ModelFind(map, name)) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("Multiple definitions of CPU model '%s'"), name);
--        goto cleanup;
-+        return -1;
-     }
- 
-     model = g_new0(virCPUx86Model, 1);
-     model->name = g_strdup(name);
- 
-     if (x86ModelParseDecode(model, ctxt) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (x86ModelParseAncestor(model, ctxt, map) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (x86ModelParseSignatures(model, ctxt) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (x86ModelParseVendor(model, ctxt, map) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (x86ModelParseFeatures(model, ctxt, map) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (VIR_APPEND_ELEMENT(map->models, map->nmodels, model) < 0)
--        goto cleanup;
--
--    ret = 0;
-+        return -1;
- 
-- cleanup:
--    x86ModelFree(model);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86UpdateHostModel.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86UpdateHostModel.patch
deleted file mode 100644
index d9f2fa0..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86UpdateHostModel.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 2545e373c4a5b08836742742960244ece2586545 Mon Sep 17 00:00:00 2001
-Message-Id: <2545e373c4a5b08836742742960244ece2586545@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:21 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86UpdateHostModel
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2f9d15b495efdd9e63c07cd6fda611701e71ee46)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <f39c8eb1774d8c9af13a8af47689f8759ce57cb3.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 14 +++++---------
- 1 file changed, 5 insertions(+), 9 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 6e7311694d..98f7863b6f 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -2817,17 +2817,16 @@ static int
- x86UpdateHostModel(virCPUDefPtr guest,
-                    const virCPUDef *host)
- {
--    virCPUDefPtr updated = NULL;
-+    g_autoptr(virCPUDef) updated = NULL;
-     size_t i;
--    int ret = -1;
- 
-     if (!(updated = virCPUDefCopyWithoutModel(host)))
--        goto cleanup;
-+        return -1;
- 
-     updated->type = VIR_CPU_TYPE_GUEST;
-     updated->mode = VIR_CPU_MODE_CUSTOM;
-     if (virCPUDefCopyModel(updated, host, true) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (guest->vendor_id) {
-         VIR_FREE(updated->vendor_id);
-@@ -2838,18 +2837,15 @@ x86UpdateHostModel(virCPUDefPtr guest,
-         if (virCPUDefUpdateFeature(updated,
-                                    guest->features[i].name,
-                                    guest->features[i].policy) < 0)
--            goto cleanup;
-+            return -1;
-     }
- 
-     virCPUDefStealModel(guest, updated,
-                         guest->mode == VIR_CPU_MODE_CUSTOM);
-     guest->mode = VIR_CPU_MODE_CUSTOM;
-     guest->match = VIR_CPU_MATCH_EXACT;
--    ret = 0;
- 
-- cleanup:
--    virCPUDefFree(updated);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86VendorParse.patch b/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86VendorParse.patch
deleted file mode 100644
index 05031ea..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-g_auto-in-x86VendorParse.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From 6a7bb46df53af5c1213e3a53a530c8745eb1aa0e Mon Sep 17 00:00:00 2001
-Message-Id: <6a7bb46df53af5c1213e3a53a530c8745eb1aa0e@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:07 +0200
-Subject: [PATCH] cpu_x86: Use g_auto* in x86VendorParse
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 6a0a7db9041cb1d8d92919bb4adf0d19bdd5dd68)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <3d21717ab7a594e301afc7f33ddbb32b57a8c56e.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 20 +++++++-------------
- 1 file changed, 7 insertions(+), 13 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 310dfcbcb3..3ffddf0342 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -849,9 +849,8 @@ x86VendorParse(xmlXPathContextPtr ctxt,
-                void *data)
- {
-     virCPUx86MapPtr map = data;
--    virCPUx86VendorPtr vendor = NULL;
--    char *string = NULL;
--    int ret = -1;
-+    g_autoptr(virCPUx86Vendor) vendor = NULL;
-+    g_autofree char *string = NULL;
- 
-     vendor = g_new0(virCPUx86Vendor, 1);
-     vendor->name = g_strdup(name);
-@@ -859,7 +858,7 @@ x86VendorParse(xmlXPathContextPtr ctxt,
-     if (x86VendorFind(map, vendor->name)) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("CPU vendor %s already defined"), vendor->name);
--        goto cleanup;
-+        return -1;
-     }
- 
-     string = virXPathString("string(@string)", ctxt);
-@@ -867,21 +866,16 @@ x86VendorParse(xmlXPathContextPtr ctxt,
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("Missing vendor string for CPU vendor %s"),
-                        vendor->name);
--        goto cleanup;
-+        return -1;
-     }
- 
-     if (virCPUx86VendorToData(string, &vendor->data) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (VIR_APPEND_ELEMENT(map->vendors, map->nvendors, vendor) < 0)
--        goto cleanup;
--
--    ret = 0;
-+        return -1;
- 
-- cleanup:
--    x86VendorFree(vendor);
--    VIR_FREE(string);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPU-x86-Data.patch b/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPU-x86-Data.patch
deleted file mode 100644
index 5e65254..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPU-x86-Data.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From 6fa7baf5345b053e8215b34f721316f6f72f1cf3 Mon Sep 17 00:00:00 2001
-Message-Id: <6fa7baf5345b053e8215b34f721316f6f72f1cf3@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:00 +0200
-Subject: [PATCH] cpu_x86: Use glib allocation for virCPU{, x86}Data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 800868583012e20fb60eb4be9fb1ccc018677006)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <dbb07df3c1ad3f47f21caa1b9555bd37db037694.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 45 ++++++++++++++++++++++-----------------------
- 1 file changed, 22 insertions(+), 23 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 1b388ec1b2..4d82d85746 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -468,8 +468,9 @@ virCPUx86DataClear(virCPUx86Data *data)
-     if (!data)
-         return;
- 
--    VIR_FREE(data->items);
-+    g_free(data->items);
- }
-+G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(virCPUx86Data, virCPUx86DataClear);
- 
- 
- static void
-@@ -481,21 +482,19 @@ virCPUx86DataFree(virCPUDataPtr data)
-     virCPUx86DataClear(&data->data.x86);
-     VIR_FREE(data);
- }
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUData, virCPUx86DataFree);
- 
- 
--static int
-+static void
- x86DataCopy(virCPUx86Data *dst, const virCPUx86Data *src)
- {
-     size_t i;
- 
--    if (VIR_ALLOC_N(dst->items, src->len) < 0)
--        return -1;
--
-+    dst->items = g_new0(virCPUx86DataItem, src->len);
-     dst->len = src->len;
-+
-     for (i = 0; i < src->len; i++)
-         dst->items[i] = src->items[i];
--
--    return 0;
- }
- 
- 
-@@ -781,9 +780,8 @@ x86DataToCPU(const virCPUx86Data *data,
- 
-     cpu->model = g_strdup(model->name);
- 
--    if (x86DataCopy(&copy, data) < 0 ||
--        x86DataCopy(&modelData, &model->data) < 0)
--        goto error;
-+    x86DataCopy(&copy, data);
-+    x86DataCopy(&modelData, &model->data);
- 
-     if ((vendor = x86DataToVendor(&copy, map)))
-         cpu->vendor = g_strdup(vendor->name);
-@@ -1183,11 +1181,11 @@ x86ModelCopy(virCPUx86ModelPtr model)
- 
-     copy->name = g_strdup(model->name);
- 
--    if (x86ModelCopySignatures(copy, model) < 0 ||
--        x86DataCopy(&copy->data, &model->data) < 0) {
-+    if (x86ModelCopySignatures(copy, model) < 0) {
-         x86ModelFree(copy);
-         return NULL;
-     }
-+    x86DataCopy(&copy->data, &model->data);
- 
-     copy->vendor = model->vendor;
- 
-@@ -1415,10 +1413,11 @@ x86ModelParseAncestor(virCPUx86ModelPtr model,
-     }
- 
-     model->vendor = ancestor->vendor;
--    if (x86ModelCopySignatures(model, ancestor) < 0 ||
--        x86DataCopy(&model->data, &ancestor->data) < 0)
-+    if (x86ModelCopySignatures(model, ancestor) < 0)
-         return -1;
- 
-+    x86DataCopy(&model->data, &ancestor->data);
-+
-     return 0;
- }
- 
-@@ -1904,9 +1903,9 @@ x86Compute(virCPUDefPtr host,
- 
-         x86DataSubtract(&guest_model->data, &cpu_disable->data);
- 
--        if (!(guestData = virCPUDataNew(arch)) ||
--            x86DataCopy(&guestData->data.x86, &guest_model->data) < 0)
-+        if (!(guestData = virCPUDataNew(arch)))
-             goto error;
-+        x86DataCopy(&guestData->data.x86, &guest_model->data);
- 
-         *guest = guestData;
-     }
-@@ -2139,9 +2138,11 @@ x86Decode(virCPUDefPtr cpu,
-     ssize_t i;
-     int rc;
- 
--    if (!cpuData || x86DataCopy(&data, cpuData) < 0)
-+    if (!cpuData)
-         return -1;
- 
-+    x86DataCopy(&data, cpuData);
-+
-     if (!(map = virCPUx86GetMap()))
-         goto cleanup;
- 
-@@ -3055,13 +3056,11 @@ virCPUx86UpdateLive(virCPUDefPtr cpu,
-         !(modelDisabled = x86ModelFromCPU(cpu, map, VIR_CPU_FEATURE_DISABLE)))
-         goto cleanup;
- 
--    if (dataEnabled &&
--        x86DataCopy(&enabled, &dataEnabled->data.x86) < 0)
--        goto cleanup;
-+    if (dataEnabled)
-+        x86DataCopy(&enabled, &dataEnabled->data.x86);
- 
--    if (dataDisabled &&
--        x86DataCopy(&disabled, &dataDisabled->data.x86) < 0)
--        goto cleanup;
-+    if (dataDisabled)
-+        x86DataCopy(&disabled, &dataDisabled->data.x86);
- 
-     for (i = 0; i < map->nfeatures; i++) {
-         virCPUx86FeaturePtr feature = map->features[i];
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Feature.patch b/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Feature.patch
deleted file mode 100644
index 5b84dd1..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Feature.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 9810efd43b52070c20fe41b41175b0afff6710aa Mon Sep 17 00:00:00 2001
-Message-Id: <9810efd43b52070c20fe41b41175b0afff6710aa@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:02 +0200
-Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Feature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 51b6e9c1000151cc515804134a00ccb0d7b3e44a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <4c4090765c01f7359c521cb09d247b1694afbe9c.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 22 ++++------------------
- 1 file changed, 4 insertions(+), 18 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index aa66309b21..3a598e35d2 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -893,28 +893,17 @@ x86VendorParse(xmlXPathContextPtr ctxt,
- }
- 
- 
--static virCPUx86FeaturePtr
--x86FeatureNew(void)
--{
--    virCPUx86FeaturePtr feature;
--
--    if (VIR_ALLOC(feature) < 0)
--        return NULL;
--
--    return feature;
--}
--
--
- static void
- x86FeatureFree(virCPUx86FeaturePtr feature)
- {
-     if (!feature)
-         return;
- 
--    VIR_FREE(feature->name);
-+    g_free(feature->name);
-     virCPUx86DataClear(&feature->data);
--    VIR_FREE(feature);
-+    g_free(feature);
- }
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Feature, x86FeatureFree);
- 
- 
- static int
-@@ -1056,11 +1045,8 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
-     char *str = NULL;
-     int ret = -1;
- 
--    if (!(feature = x86FeatureNew()))
--        goto cleanup;
--
-+    feature = g_new0(virCPUx86Feature, 1);
-     feature->migratable = true;
--
-     feature->name = g_strdup(name);
- 
-     if (x86FeatureFind(map, feature->name)) {
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Map.patch b/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Map.patch
deleted file mode 100644
index 4f33301..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Map.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 9adc6c8a4450e5eab78d7a8abd14b0e460d23a08 Mon Sep 17 00:00:00 2001
-Message-Id: <9adc6c8a4450e5eab78d7a8abd14b0e460d23a08@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:04 +0200
-Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Map
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 247e115e2753bde7957cc07a20d5a48a8a6632b0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <0e3dc412e6e755f75e39a9ec22b2b5549c82930e.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 373c34a834..3711e03b3f 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1566,23 +1566,24 @@ x86MapFree(virCPUx86MapPtr map)
- 
-     for (i = 0; i < map->nfeatures; i++)
-         x86FeatureFree(map->features[i]);
--    VIR_FREE(map->features);
-+    g_free(map->features);
- 
-     for (i = 0; i < map->nmodels; i++)
-         x86ModelFree(map->models[i]);
--    VIR_FREE(map->models);
-+    g_free(map->models);
- 
-     for (i = 0; i < map->nvendors; i++)
-         x86VendorFree(map->vendors[i]);
--    VIR_FREE(map->vendors);
-+    g_free(map->vendors);
- 
-     /* migrate_blockers only points to the features from map->features list,
-      * which were already freed above
-      */
--    VIR_FREE(map->migrate_blockers);
-+    g_free(map->migrate_blockers);
- 
--    VIR_FREE(map);
-+    g_free(map);
- }
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Map, x86MapFree);
- 
- 
- static virCPUx86MapPtr
-@@ -1590,8 +1591,7 @@ virCPUx86LoadMap(void)
- {
-     virCPUx86MapPtr map;
- 
--    if (VIR_ALLOC(map) < 0)
--        return NULL;
-+    map = g_new0(virCPUx86Map, 1);
- 
-     if (cpuMapLoad("x86", x86VendorParse, x86FeatureParse, x86ModelParse, map) < 0)
-         goto error;
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Model.patch b/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Model.patch
deleted file mode 100644
index 5d8ca7a..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Model.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From 18b41d5bb489080b8be3c78d7f8436c9fb13087a Mon Sep 17 00:00:00 2001
-Message-Id: <18b41d5bb489080b8be3c78d7f8436c9fb13087a@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:03 +0200
-Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Model
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit ccc0c2e4de58d62308e224076a7aa979ae97b520)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <db624beaa5c879842c45b90269fb58a8f2fcfff2.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 31 ++++++++-----------------------
- 1 file changed, 8 insertions(+), 23 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 3a598e35d2..373c34a834 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -1111,29 +1111,18 @@ x86FeatureParse(xmlXPathContextPtr ctxt,
- }
- 
- 
--static virCPUx86ModelPtr
--x86ModelNew(void)
--{
--    virCPUx86ModelPtr model;
--
--    if (VIR_ALLOC(model) < 0)
--        return NULL;
--
--    return model;
--}
--
--
- static void
- x86ModelFree(virCPUx86ModelPtr model)
- {
-     if (!model)
-         return;
- 
--    VIR_FREE(model->name);
--    VIR_FREE(model->signatures);
-+    g_free(model->name);
-+    g_free(model->signatures);
-     virCPUx86DataClear(&model->data);
--    VIR_FREE(model);
-+    g_free(model);
- }
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree);
- 
- 
- static int
-@@ -1161,9 +1150,7 @@ x86ModelCopy(virCPUx86ModelPtr model)
- {
-     virCPUx86ModelPtr copy;
- 
--    if (VIR_ALLOC(copy) < 0)
--        return NULL;
--
-+    copy = g_new0(virCPUx86Model, 1);
-     copy->name = g_strdup(model->name);
- 
-     if (x86ModelCopySignatures(copy, model) < 0) {
-@@ -1216,7 +1203,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
-     if (cpu->type == VIR_CPU_TYPE_HOST &&
-         policy != VIR_CPU_FEATURE_REQUIRE &&
-         policy != -1)
--        return x86ModelNew();
-+        return g_new0(virCPUx86Model, 1);
- 
-     if (cpu->model &&
-         (policy == VIR_CPU_FEATURE_REQUIRE || policy == -1)) {
-@@ -1228,7 +1215,7 @@ x86ModelFromCPU(const virCPUDef *cpu,
- 
-         model = x86ModelCopy(model);
-     } else {
--        model = x86ModelNew();
-+        model = g_new0(virCPUx86Model, 1);
-     }
- 
-     if (!model)
-@@ -1540,9 +1527,7 @@ x86ModelParse(xmlXPathContextPtr ctxt,
-         goto cleanup;
-     }
- 
--    if (!(model = x86ModelNew()))
--        goto cleanup;
--
-+    model = g_new0(virCPUx86Model, 1);
-     model->name = g_strdup(name);
- 
-     if (x86ModelParseDecode(model, ctxt) < 0)
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Vendor.patch b/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Vendor.patch
deleted file mode 100644
index 31bdeee..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Vendor.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From d151191af331a2127aa6b2126d15e2afd19e548d Mon Sep 17 00:00:00 2001
-Message-Id: <d151191af331a2127aa6b2126d15e2afd19e548d@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:01 +0200
-Subject: [PATCH] cpu_x86: Use glib allocation for virCPUx86Vendor
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8a41417b23dda97eb09bcd2921c1ab0d5fbce1b6)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <f5811f02d9c0cce74d007f5986454b8d89b2f548.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 4d82d85746..aa66309b21 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -830,9 +830,10 @@ x86VendorFree(virCPUx86VendorPtr vendor)
-     if (!vendor)
-         return;
- 
--    VIR_FREE(vendor->name);
--    VIR_FREE(vendor);
-+    g_free(vendor->name);
-+    g_free(vendor);
- }
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Vendor, x86VendorFree);
- 
- 
- static virCPUx86VendorPtr
-@@ -860,9 +861,7 @@ x86VendorParse(xmlXPathContextPtr ctxt,
-     char *string = NULL;
-     int ret = -1;
- 
--    if (VIR_ALLOC(vendor) < 0)
--        goto cleanup;
--
-+    vendor = g_new0(virCPUx86Vendor, 1);
-     vendor->name = g_strdup(name);
- 
-     if (x86VendorFind(map, vendor->name)) {
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-in-virCPUx86GetModels.patch b/SOURCES/libvirt-cpu_x86-Use-glib-allocation-in-virCPUx86GetModels.patch
deleted file mode 100644
index ab20050..0000000
--- a/SOURCES/libvirt-cpu_x86-Use-glib-allocation-in-virCPUx86GetModels.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From a271a6a71073253a7dde518a63d5ee4965ee53d8 Mon Sep 17 00:00:00 2001
-Message-Id: <a271a6a71073253a7dde518a63d5ee4965ee53d8@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:05 +0200
-Subject: [PATCH] cpu_x86: Use glib allocation in virCPUx86GetModels
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit e43e2ff7f5b629f979e56387c4be46f2be251b75)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1d1d9c9b60f1ea44a2252cb2fbfbf3886ecd245f.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu/cpu_x86.c | 10 +---------
- 1 file changed, 1 insertion(+), 9 deletions(-)
-
-diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c
-index 3711e03b3f..48f36c2bfc 100644
---- a/src/cpu/cpu_x86.c
-+++ b/src/cpu/cpu_x86.c
-@@ -3121,21 +3121,13 @@ virCPUx86GetModels(char ***models)
-         return -1;
- 
-     if (models) {
--        if (VIR_ALLOC_N(*models, map->nmodels + 1) < 0)
--            goto error;
-+        *models = g_new0(char *, map->nmodels + 1);
- 
-         for (i = 0; i < map->nmodels; i++)
-             (*models)[i] = g_strdup(map->models[i]->name);
-     }
- 
-     return map->nmodels;
--
-- error:
--    if (models) {
--        virStringListFree(*models);
--        *models = NULL;
--    }
--    return -1;
- }
- 
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cpumap-Add-support-for-ibrs-CPU-feature.patch b/SOURCES/libvirt-cpumap-Add-support-for-ibrs-CPU-feature.patch
deleted file mode 100644
index 9fcd3a4..0000000
--- a/SOURCES/libvirt-cpumap-Add-support-for-ibrs-CPU-feature.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From bb9f39342d4ea6b76b67378f514f52a9627206b9 Mon Sep 17 00:00:00 2001
-Message-Id: <bb9f39342d4ea6b76b67378f514f52a9627206b9@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Wed, 3 Mar 2021 11:11:52 +0100
-Subject: [PATCH] cpumap: Add support for ibrs CPU feature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 5c17a7ba41670f3182186c06e621995b5d03fc95)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1926864
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <0aee3baa35e04f56e3c95bb2f60c8a17d7806e7a.1614766279.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_features.xml                               | 3 +++
- tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml | 1 +
- tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml  | 1 +
- 3 files changed, 5 insertions(+)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index 83d8e641a8..abefb7928e 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -501,6 +501,9 @@
-   <feature name='ibpb'>
-     <cpuid eax_in='0x80000008' ebx='0x00001000'/>
-   </feature>
-+  <feature name='ibrs'>
-+    <cpuid eax_in='0x80000008' ebx='0x00004000'/>
-+  </feature>
-   <feature name='amd-stibp'>
-     <cpuid eax_in='0x80000008' ebx='0x00008000'/>
-   </feature>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-index 6d95b508b2..40e7912398 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-guest.xml
-@@ -17,6 +17,7 @@
-   <feature policy='require' name='topoext'/>
-   <feature policy='require' name='perfctr_nb'/>
-   <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='ibrs'/>
-   <feature policy='require' name='amd-ssbd'/>
-   <feature policy='require' name='lbrv'/>
-   <feature policy='require' name='svm-lock'/>
-diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-index 65eaeabdd0..9f8108cdaa 100644
---- a/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-+++ b/tests/cputestdata/x86_64-cpuid-EPYC-7502-32-Core-host.xml
-@@ -18,6 +18,7 @@
-   <feature name='topoext'/>
-   <feature name='perfctr_nb'/>
-   <feature name='invtsc'/>
-+  <feature name='ibrs'/>
-   <feature name='amd-ssbd'/>
-   <feature name='lbrv'/>
-   <feature name='svm-lock'/>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cpumap-Add-support-for-svme-addr-check-CPU-feature.patch b/SOURCES/libvirt-cpumap-Add-support-for-svme-addr-check-CPU-feature.patch
deleted file mode 100644
index 97d1b6f..0000000
--- a/SOURCES/libvirt-cpumap-Add-support-for-svme-addr-check-CPU-feature.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 87fdbd2d0ab24f00c70a298317d50df44a5f76ad Mon Sep 17 00:00:00 2001
-Message-Id: <87fdbd2d0ab24f00c70a298317d50df44a5f76ad@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Wed, 3 Mar 2021 11:11:53 +0100
-Subject: [PATCH] cpumap: Add support for svme-addr-check CPU feature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 5ac6ab2fde63881d3c5cc7372a0d0e59618feb55)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1926864
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <aa154754f76021b9f61788944f6c329c6088cf77.1614766279.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/cpu_map/x86_features.xml | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/cpu_map/x86_features.xml b/src/cpu_map/x86_features.xml
-index abefb7928e..8acd42f796 100644
---- a/src/cpu_map/x86_features.xml
-+++ b/src/cpu_map/x86_features.xml
-@@ -548,6 +548,9 @@
-   <feature name='pfthreshold'>
-     <cpuid eax_in='0x8000000a' edx='0x00001000'/>
-   </feature>
-+  <feature name='svme-addr-check'>
-+    <cpuid eax_in='0x8000000a' edx='0x10000000'/>
-+  </feature>
- 
-   <!-- IA32_ARCH_CAPABILITIES features -->
-   <feature name='rdctl-no'>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-cputest-Add-data-for-Cooperlake-CPU.patch b/SOURCES/libvirt-cputest-Add-data-for-Cooperlake-CPU.patch
deleted file mode 100644
index 1ed7790..0000000
--- a/SOURCES/libvirt-cputest-Add-data-for-Cooperlake-CPU.patch
+++ /dev/null
@@ -1,1869 +0,0 @@
-From 8efc803f2180f53f935275a88f5709b80022c1b2 Mon Sep 17 00:00:00 2001
-Message-Id: <8efc803f2180f53f935275a88f5709b80022c1b2@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:38 +0200
-Subject: [PATCH] cputest: Add data for Cooperlake CPU
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-(cherry picked from commit 58691208e2063285d981a620873d48ddf8df8be5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1781878
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <c74a7ac270b786983feaff1712fc49629b461fdc.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/cputest.c                               |    1 +
- .../x86_64-cpuid-Cooperlake-disabled.xml      |    7 +
- .../x86_64-cpuid-Cooperlake-enabled.xml       |   11 +
- .../x86_64-cpuid-Cooperlake-guest.xml         |   40 +
- .../x86_64-cpuid-Cooperlake-host.xml          |   41 +
- .../x86_64-cpuid-Cooperlake-json.xml          |   23 +
- .../cputestdata/x86_64-cpuid-Cooperlake.json  | 1574 +++++++++++++++++
- tests/cputestdata/x86_64-cpuid-Cooperlake.sig |    4 +
- tests/cputestdata/x86_64-cpuid-Cooperlake.xml |   68 +
- 9 files changed, 1769 insertions(+)
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake-disabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake.json
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake.sig
- create mode 100644 tests/cputestdata/x86_64-cpuid-Cooperlake.xml
-
-diff --git a/tests/cputest.c b/tests/cputest.c
-index 869d016ffc..68e8eb0290 100644
---- a/tests/cputest.c
-+++ b/tests/cputest.c
-@@ -1272,6 +1272,7 @@ mymain(void)
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Ice-Lake-Server", JSON_MODELS);
-+    DO_TEST_CPUID(VIR_ARCH_X86_64, "Cooperlake", JSON_MODELS);
- 
-  cleanup:
- #if WITH_QEMU
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-disabled.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-disabled.xml
-new file mode 100644
-index 0000000000..e7c59cef1e
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-disabled.xml
-@@ -0,0 +1,7 @@
-+<!-- Features disabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1dc' edx='0xb0600000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000010' 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'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml
-new file mode 100644
-index 0000000000..2d7f83c80f
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-enabled.xml
-@@ -0,0 +1,11 @@
-+<!-- Features enabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7fa3223' edx='0x0f8bfbff'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0xd19f4fbb' ecx='0x0000080c' edx='0xac000400'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x01' eax='0x00000020' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01001000' ecx='0x00000000' edx='0x00000000'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x000001eb'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-new file mode 100644
-index 0000000000..b5137e3c03
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-guest.xml
-@@ -0,0 +1,40 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ds'/>
-+  <feature policy='require' name='acpi'/>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='ht'/>
-+  <feature policy='require' name='tm'/>
-+  <feature policy='require' name='pbe'/>
-+  <feature policy='require' name='dtes64'/>
-+  <feature policy='require' name='monitor'/>
-+  <feature policy='require' name='ds_cpl'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='smx'/>
-+  <feature policy='require' name='est'/>
-+  <feature policy='require' name='tm2'/>
-+  <feature policy='require' name='xtpr'/>
-+  <feature policy='require' name='pdcm'/>
-+  <feature policy='require' name='dca'/>
-+  <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='pku'/>
-+  <feature policy='require' name='ospke'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='avx512-bf16'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='mbm_total'/>
-+  <feature policy='require' name='mbm_local'/>
-+  <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='ibrs-all'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='tsx-ctrl'/>
-+  <feature policy='require' name='taa-no'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-new file mode 100644
-index 0000000000..52b352f4f1
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-host.xml
-@@ -0,0 +1,41 @@
-+<cpu>
-+  <arch>x86_64</arch>
-+  <model>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature name='ds'/>
-+  <feature name='acpi'/>
-+  <feature name='ss'/>
-+  <feature name='ht'/>
-+  <feature name='tm'/>
-+  <feature name='pbe'/>
-+  <feature name='dtes64'/>
-+  <feature name='monitor'/>
-+  <feature name='ds_cpl'/>
-+  <feature name='vmx'/>
-+  <feature name='smx'/>
-+  <feature name='est'/>
-+  <feature name='tm2'/>
-+  <feature name='xtpr'/>
-+  <feature name='pdcm'/>
-+  <feature name='dca'/>
-+  <feature name='osxsave'/>
-+  <feature name='tsc_adjust'/>
-+  <feature name='cmt'/>
-+  <feature name='intel-pt'/>
-+  <feature name='pku'/>
-+  <feature name='ospke'/>
-+  <feature name='md-clear'/>
-+  <feature name='stibp'/>
-+  <feature name='arch-capabilities'/>
-+  <feature name='avx512-bf16'/>
-+  <feature name='xsaves'/>
-+  <feature name='mbm_total'/>
-+  <feature name='mbm_local'/>
-+  <feature name='invtsc'/>
-+  <feature name='rdctl-no'/>
-+  <feature name='ibrs-all'/>
-+  <feature name='skip-l1dfl-vmentry'/>
-+  <feature name='mds-no'/>
-+  <feature name='tsx-ctrl'/>
-+  <feature name='taa-no'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-new file mode 100644
-index 0000000000..e323d6205e
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake-json.xml
-@@ -0,0 +1,23 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='hypervisor'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='pku'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='avx512-bf16'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='ibpb'/>
-+  <feature policy='require' name='amd-ssbd'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='ibrs-all'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='tsx-ctrl'/>
-+  <feature policy='require' name='taa-no'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake.json b/tests/cputestdata/x86_64-cpuid-Cooperlake.json
-new file mode 100644
-index 0000000000..fd407affb6
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake.json
-@@ -0,0 +1,1574 @@
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "phys-bits": 0,
-+        "vmx-entry-load-rtit-ctl": false,
-+        "core-id": -1,
-+        "xlevel": 2147483656,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": true,
-+        "mmx": true,
-+        "rdpid": false,
-+        "vmx-page-walk-5": false,
-+        "vmx-page-walk-4": true,
-+        "arat": true,
-+        "gfni": false,
-+        "vmx-desc-exit": true,
-+        "ibrs-all": true,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": true,
-+        "hv-frequencies": false,
-+        "tsc-frequency": 0,
-+        "vmx-rdseed-exit": true,
-+        "xd": true,
-+        "x-intel-pt-auto-level": true,
-+        "hv-vendor-id": "",
-+        "vmx-eptp-switching": true,
-+        "kvm-asyncpf": true,
-+        "kvm_asyncpf": true,
-+        "perfctr_core": false,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "decodeassists": false,
-+        "avx512cd": true,
-+        "vmx-exit-load-efer": true,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4_1": true,
-+        "sse4.1": true,
-+        "sse4-1": true,
-+        "legacy-cache": true,
-+        "family": 6,
-+        "vmx-vmwrite-vmexit-fields": true,
-+        "vmx-vnmi": true,
-+        "vmx-true-ctls": true,
-+        "host-phys-bits-limit": 0,
-+        "vmx-ept-execonly": true,
-+        "vmx-exit-save-efer": true,
-+        "vmx-invept-all-context": true,
-+        "vmware-cpuid-freq": true,
-+        "wbnoinvd": false,
-+        "avx512f": true,
-+        "hv-runtime": false,
-+        "hv-stimer-direct": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "xcrypt": false,
-+        "thread-id": -1,
-+        "vmx-exit-load-pat": true,
-+        "vmx-intr-exit": true,
-+        "min-level": 31,
-+        "vmx-flexpriority": true,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "hv-relaxed": false,
-+        "hv-crash": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": true,
-+        "vmx-cr8-load-exit": true,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": true,
-+        "vmx-exit-save-pat": true,
-+        "xtpr": false,
-+        "tsx-ctrl": true,
-+        "vmx-ple": false,
-+        "hv-evmcs": false,
-+        "avx512vl": true,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": true,
-+        "vmx-vmfunc": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "vmx-encls-exit": false,
-+        "cr8legacy": false,
-+        "vmx-msr-bitmap": true,
-+        "stibp": true,
-+        "cpuid-0xb": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": true,
-+        "kvm_pv_eoi": true,
-+        "vmx-pml": true,
-+        "apic-id": 4294967295,
-+        "vmx-nmi-exit": true,
-+        "vmx-invept-single-context-noglobals": true,
-+        "rsba": false,
-+        "pn": false,
-+        "dca": false,
-+        "hv-ipi": false,
-+        "vendor": "GenuineIntel",
-+        "vmx-unrestricted-guest": true,
-+        "vmx-cr3-store-noexit": true,
-+        "pku": true,
-+        "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,
-+        "rdctl-no": true,
-+        "vmx-invvpid": 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,
-+        "vmx-invpcid-exit": true,
-+        "x2apic": true,
-+        "avx512vbmi": false,
-+        "avx512vnni": true,
-+        "vmx-apicv-x2apic": true,
-+        "hv-stimer": false,
-+        "kvm-pv-sched-yield": true,
-+        "x-hv-synic-kvm-only": false,
-+        "vmx-invlpg-exit": true,
-+        "vmx-invvpid-all-context": true,
-+        "i64": true,
-+        "vmx-activity-hlt": true,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "vmx-exit-ack-intr": true,
-+        "ace2-en": false,
-+        "pat": true,
-+        "pae": true,
-+        "sse": true,
-+        "die-id": -1,
-+        "vmx-tsc-offset": true,
-+        "phe-en": false,
-+        "kvm_nopiodelay": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": true,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": true,
-+        "socket-id": -1,
-+        "mds-no": true,
-+        "pcommit": false,
-+        "vmx-vpid": true,
-+        "syscall": true,
-+        "level": 31,
-+        "x-migrate-smi-count": true,
-+        "avx512dq": true,
-+        "svm": false,
-+        "full-cpuid-auto-level": true,
-+        "hv-reset": false,
-+        "invtsc": false,
-+        "vmx-monitor-exit": true,
-+        "sse3": true,
-+        "sse2": true,
-+        "vmx-wbinvd-exit": true,
-+        "ssbd": true,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "kvm_poll_control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-ipi": true,
-+        "kvm-pv-eoi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": true,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": true,
-+        "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,
-+        "vmx-entry-load-bndcfgs": false,
-+        "pdcm": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "movbe": true,
-+        "model": 85,
-+        "nrip_save": false,
-+        "nrip-save": false,
-+        "kvm_pv_unhalt": true,
-+        "ssse3": true,
-+        "sse4a": false,
-+        "vmx-pause-exit": true,
-+        "invpcid": true,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "fma": true,
-+        "cx16": true,
-+        "de": true,
-+        "enforce": false,
-+        "stepping": 11,
-+        "xsave": true,
-+        "clflush": true,
-+        "skinit": false,
-+        "tce": false,
-+        "tsc": true,
-+        "fpu": true,
-+        "ibs": false,
-+        "ds_cpl": false,
-+        "ds-cpl": false,
-+        "host-phys-bits": false,
-+        "vmx-exit-nosave-debugctl": true,
-+        "fma4": false,
-+        "vmx-invept": true,
-+        "la57": false,
-+        "osvw": false,
-+        "check": true,
-+        "hv-spinlocks": 4294967295,
-+        "pmu": false,
-+        "vmx-eptad": true,
-+        "pmm": false,
-+        "apic": true,
-+        "vmx-entry-noload-debugctl": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": true,
-+        "vmx-apicv-register": true,
-+        "min-xlevel2": 0,
-+        "tsc-adjust": true,
-+        "tsc_adjust": true,
-+        "kvm-steal-time": true,
-+        "kvm_steal_time": true,
-+        "vmx-zero-len-inject": false,
-+        "kvmclock": true,
-+        "l3-cache": true,
-+        "pschange-mc-no": true,
-+        "vmx-rdrand-exit": true,
-+        "lwp": false,
-+        "hv-passthrough": false,
-+        "amd-ssbd": true,
-+        "ibpb": true,
-+        "xop": false,
-+        "avx": true,
-+        "core-capability": false,
-+        "vmx-invept-single-context": true,
-+        "movdiri": false,
-+        "ace2": false,
-+        "avx512bw": true,
-+        "acpi": false,
-+        "hv-vapic": false,
-+        "fsgsbase": true,
-+        "vmx-ept-1gb": true,
-+        "vmx-ept-2mb": true,
-+        "ht": false,
-+        "vmx-io-exit": true,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "vaes": false,
-+        "popcnt": true,
-+        "xsaves": true,
-+        "movdir64b": false,
-+        "tcg-cpuid": true,
-+        "vmx-shadow-vmcs": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": true,
-+        "vmx-entry-load-pat": true,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": true,
-+        "umip": true,
-+        "vmx-store-lma": true,
-+        "vmx-movdr-exit": true,
-+        "pse": true,
-+        "avx2": true,
-+        "sep": true,
-+        "pclmuldq": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": true,
-+        "x-hv-max-vps": -1,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "kvm": true,
-+        "split-lock-detect": false,
-+        "misalignsse": false,
-+        "min-xlevel": 2147483656,
-+        "realized": false,
-+        "kvm-pv-unhalt": true,
-+        "bmi2": true,
-+        "bmi1": true,
-+        "tsc_scale": false,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "hv-no-nonarch-coresharing": "off",
-+        "hv-vpindex": false,
-+        "amd-stibp": true,
-+        "ucode-rev": 0,
-+        "vmx-preemption-timer": true,
-+        "xlevel2": 0,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": true,
-+        "kvm-no-smi-migration": false,
-+        "monitor": false,
-+        "vmx-vintr-pending": true,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": true,
-+        "taa-no": true,
-+        "vmx-secondary-ctls": true,
-+        "arch-capabilities": true,
-+        "vmx-xsaves": true,
-+        "clzero": false,
-+        "3dnow": false,
-+        "erms": true,
-+        "x-force-features": false,
-+        "vmx-entry-ia32e-mode": true,
-+        "lahf-lm": true,
-+        "lahf_lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": true,
-+        "hv-synic": false,
-+        "fxsr-opt": false,
-+        "xstore": false,
-+        "fxsr_opt": false,
-+        "kvm-hint-dedicated": false,
-+        "rtm": true,
-+        "lmce": true,
-+        "hv-time": false,
-+        "perfctr-nb": false,
-+        "perfctr_nb": false,
-+        "hv-tlbflush": false,
-+        "ffxsr": false,
-+        "rdrand": true,
-+        "rdseed": true,
-+        "avx512-4vnniw": false,
-+        "vmx": true,
-+        "vme": true,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": true,
-+        "level-func7": 1,
-+        "vmx-entry-load-efer": true,
-+        "vmx-mtf": true,
-+        "pause_filter": false,
-+        "sha-ni": false,
-+        "model-id": "Genuine Intel(R) CPU 0000%@",
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": true,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "model-expansion"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "qemu64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32",
-+      "typename": "qemu32-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "qemu32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom",
-+      "typename": "phenom-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "alias-of": "phenom-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "pentium3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2",
-+      "typename": "pentium2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "pentium2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium-v1",
-+      "typename": "pentium-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium",
-+      "typename": "pentium-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "pentium-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270-v1",
-+      "typename": "n270-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270",
-+      "typename": "n270-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "n270-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64-v1",
-+      "typename": "kvm64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64",
-+      "typename": "kvm64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "kvm64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32-v1",
-+      "typename": "kvm32-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32",
-+      "typename": "kvm32-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "kvm32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo-v1",
-+      "typename": "coreduo-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo",
-+      "typename": "coreduo-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "coreduo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo-v1",
-+      "typename": "core2duo-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo",
-+      "typename": "core2duo-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "core2duo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "alias-of": "athlon-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Westmere-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere",
-+      "typename": "Westmere-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Westmere-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "alias-of": "Snowridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Skylake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Skylake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Skylake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Skylake-Client-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Skylake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Skylake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "SandyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge",
-+      "typename": "SandyBridge-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "SandyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn-v1",
-+      "typename": "Penryn-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn",
-+      "typename": "Penryn-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Penryn-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5",
-+      "typename": "Opteron_G5-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Opteron_G5-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4",
-+      "typename": "Opteron_G4-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Opteron_G4-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3",
-+      "typename": "Opteron_G3-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "alias-of": "Opteron_G3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Opteron_G2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1",
-+      "typename": "Opteron_G1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Opteron_G1-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Nehalem-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem",
-+      "typename": "Nehalem-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Nehalem-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512pf",
-+        "avx512er",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill",
-+      "typename": "KnightsMill-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512pf",
-+        "avx512er",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps"
-+      ],
-+      "alias-of": "KnightsMill-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "IvyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge",
-+      "typename": "IvyBridge-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "IvyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v3",
-+      "typename": "Icelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "alias-of": "Icelake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "alias-of": "Icelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "alias-of": "Icelake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "alias-of": "Icelake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Haswell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX",
-+      "typename": "Haswell-noTSX-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Haswell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Haswell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell",
-+      "typename": "Haswell-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Haswell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v3",
-+      "typename": "EPYC-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome-v1",
-+      "typename": "EPYC-Rome-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdpid",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome",
-+      "typename": "EPYC-Rome-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdpid",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "EPYC-Rome-v1",
-+      "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",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "EPYC-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC",
-+      "typename": "EPYC-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "EPYC-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Dhyana-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v2",
-+      "typename": "Denverton-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni"
-+      ],
-+      "alias-of": "Denverton-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake-v1",
-+      "typename": "Cooperlake-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake",
-+      "typename": "Cooperlake-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Cooperlake-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Conroe-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Cascadelake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Cascadelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Broadwell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX",
-+      "typename": "Broadwell-noTSX-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Broadwell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Broadwell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell",
-+      "typename": "Broadwell-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "Broadwell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486-v1",
-+      "typename": "486-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486",
-+      "typename": "486-x86_64-cpu",
-+      "unavailable-features": [],
-+      "alias-of": "486-v1",
-+      "static": false,
-+      "migration-safe": true
-+    }
-+  ],
-+  "id": "definitions"
-+}
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake.sig b/tests/cputestdata/x86_64-cpuid-Cooperlake.sig
-new file mode 100644
-index 0000000000..72a8da4132
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake.sig
-@@ -0,0 +1,4 @@
-+05065b
-+family:     6 (0x06)
-+model:     85 (0x55)
-+stepping:  11 (0x0b)
-diff --git a/tests/cputestdata/x86_64-cpuid-Cooperlake.xml b/tests/cputestdata/x86_64-cpuid-Cooperlake.xml
-new file mode 100644
-index 0000000000..96d364b303
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Cooperlake.xml
-@@ -0,0 +1,68 @@
-+<!-- Cooperlake -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x0000001f' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x0005065b' ebx='0x73400800' ecx='0x7ffefbff' edx='0xbfebfbff'/>
-+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x76036301' ebx='0x00f0b5ff' ecx='0x00000000' edx='0x00c30000'/>
-+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x00' eax='0x7c004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x01' eax='0x7c004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x02' eax='0x7c004143' ebx='0x03c0003f' ecx='0x000003ff' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x03' eax='0x7c0fc163' ebx='0x0280003f' ecx='0x00008fff' edx='0x00000005'/>
-+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00002020'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000ef7' ebx='0x00000002' ecx='0x00000009' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000001' ebx='0xd39ffffb' ecx='0x00000818' edx='0xbc000400'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x01' eax='0x00000020' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300404' ebx='0x00000000' ecx='0x00000000' edx='0x00000603'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000073'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000006' ebx='0x00000024' ecx='0x00000201' edx='0x00000073'/>
-+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x000002ff' ebx='0x00000a88' ecx='0x00000a88' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000a08' ecx='0x00000100' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x03' eax='0x00000040' ebx='0x000003c0' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x04' eax='0x00000040' ebx='0x00000400' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x05' eax='0x00000040' ebx='0x00000440' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x06' eax='0x00000200' ebx='0x00000480' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x07' eax='0x00000400' ebx='0x00000680' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x08' eax='0x00000080' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x09' eax='0x00000008' ebx='0x00000a80' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x0000008f' ecx='0x00000000' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00012000' ecx='0x0000008f' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x0000000a' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x01' eax='0x0000000a' ebx='0x00000600' ecx='0x00000004' edx='0x0000000f'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x03' eax='0x00000059' ebx='0x00000000' ecx='0x00000004' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x00' eax='0x00000001' ebx='0x0000000f' ecx='0x00000007' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x01' eax='0x02490002' ebx='0x003f3fff' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000015' ecx_in='0x00' eax='0x00000002' ebx='0x000000c8' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000016' ecx_in='0x00' eax='0x000009c4' ebx='0x00000ed8' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000017' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000019' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001b' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001d' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000073'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x01' eax='0x00000006' ebx='0x00000024' ecx='0x00000201' edx='0x00000073'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x02' eax='0x00000000' ebx='0x00000000' ecx='0x00000002' edx='0x00000073'/>
-+  <cpuid eax_in='0x20000000' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000073'/>
-+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x756e6547' ebx='0x20656e69' ecx='0x65746e49' edx='0x2952286c'/>
-+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x55504320' ebx='0x30303020' ecx='0x00402530' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01006040' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x0000302e' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000073'/>
-+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000073'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x000001eb'/>
-+</cpudata>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Core-TM-i7-8550U-CPU-without-TSX.patch b/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Core-TM-i7-8550U-CPU-without-TSX.patch
deleted file mode 100644
index 024e53b..0000000
--- a/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Core-TM-i7-8550U-CPU-without-TSX.patch
+++ /dev/null
@@ -1,2028 +0,0 @@
-From 1f609088740213d7972a64cab6f7404996a43bf1 Mon Sep 17 00:00:00 2001
-Message-Id: <1f609088740213d7972a64cab6f7404996a43bf1@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:58:54 +0200
-Subject: [PATCH] cputest: Add data for Intel(R) Core(TM) i7-8550U CPU without
- TSX
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit 62a50628ff34cf4c2c95e82bc645a4648b8f0422)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840008
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <e7362282d6a62fb5f631d2bdadb5e87e507b02cc.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/cputest.c                               |    1 +
- .../x86_64-cpuid-Core-i7-8550U-disabled.xml   |    6 +
- .../x86_64-cpuid-Core-i7-8550U-enabled.xml    |    9 +
- .../x86_64-cpuid-Core-i7-8550U-guest.xml      |   31 +
- .../x86_64-cpuid-Core-i7-8550U-host.xml       |   39 +
- .../x86_64-cpuid-Core-i7-8550U-json.xml       |   19 +
- .../x86_64-cpuid-Core-i7-8550U.json           | 1769 +++++++++++++++++
- .../x86_64-cpuid-Core-i7-8550U.sig            |    4 +
- .../x86_64-cpuid-Core-i7-8550U.xml            |   49 +
- 9 files changed, 1927 insertions(+)
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U-disabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U.json
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U.sig
- create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8550U.xml
-
-diff --git a/tests/cputest.c b/tests/cputest.c
-index 279f788162..1f59f0d3a9 100644
---- a/tests/cputest.c
-+++ b/tests/cputest.c
-@@ -1235,6 +1235,7 @@ mymain(void)
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-5600U-ibrs", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-7600U", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-7700", JSON_MODELS);
-+    DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-8550U", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-8700", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core2-E6850", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core2-Q9500", JSON_NONE);
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-disabled.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-disabled.xml
-new file mode 100644
-index 0000000000..436ded22eb
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-disabled.xml
-@@ -0,0 +1,6 @@
-+<!-- Features disabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0800c19c' edx='0xb0600000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02000000' ecx='0x00000000' edx='0x00000000'/>
-+  <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-8550U-enabled.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
-new file mode 100644
-index 0000000000..6c480eeacf
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-enabled.xml
-@@ -0,0 +1,9 @@
-+<!-- Features enabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7fa3223' edx='0x0f8bfbff'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x009c47ab' ecx='0x00000004' edx='0xac000400'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000008'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-new file mode 100644
-index 0000000000..92404e4d03
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-guest.xml
-@@ -0,0 +1,31 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Skylake-Client-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ds'/>
-+  <feature policy='require' name='acpi'/>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='ht'/>
-+  <feature policy='require' name='tm'/>
-+  <feature policy='require' name='pbe'/>
-+  <feature policy='require' name='dtes64'/>
-+  <feature policy='require' name='monitor'/>
-+  <feature policy='require' name='ds_cpl'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='est'/>
-+  <feature policy='require' name='tm2'/>
-+  <feature policy='require' name='xtpr'/>
-+  <feature policy='require' name='pdcm'/>
-+  <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='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='ssbd'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='pdpe1gb'/>
-+  <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='disable' name='hle'/>
-+  <feature policy='disable' name='rtm'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-new file mode 100644
-index 0000000000..808a8ff969
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-host.xml
-@@ -0,0 +1,39 @@
-+<cpu>
-+  <arch>x86_64</arch>
-+  <model>Broadwell-noTSX-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature name='vme'/>
-+  <feature name='ds'/>
-+  <feature name='acpi'/>
-+  <feature name='ss'/>
-+  <feature name='ht'/>
-+  <feature name='tm'/>
-+  <feature name='pbe'/>
-+  <feature name='dtes64'/>
-+  <feature name='monitor'/>
-+  <feature name='ds_cpl'/>
-+  <feature name='vmx'/>
-+  <feature name='est'/>
-+  <feature name='tm2'/>
-+  <feature name='xtpr'/>
-+  <feature name='pdcm'/>
-+  <feature name='osxsave'/>
-+  <feature name='f16c'/>
-+  <feature name='rdrand'/>
-+  <feature name='arat'/>
-+  <feature name='tsc_adjust'/>
-+  <feature name='mpx'/>
-+  <feature name='clflushopt'/>
-+  <feature name='intel-pt'/>
-+  <feature name='md-clear'/>
-+  <feature name='stibp'/>
-+  <feature name='ssbd'/>
-+  <feature name='xsaveopt'/>
-+  <feature name='xsavec'/>
-+  <feature name='xgetbv1'/>
-+  <feature name='xsaves'/>
-+  <feature name='pdpe1gb'/>
-+  <feature name='abm'/>
-+  <feature name='invtsc'/>
-+  <feature name='skip-l1dfl-vmentry'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-new file mode 100644
-index 0000000000..645c0934c2
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U-json.xml
-@@ -0,0 +1,19 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Skylake-Client-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='hypervisor'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='clflushopt'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='ssbd'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='pdpe1gb'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='disable' name='hle'/>
-+  <feature policy='disable' name='rtm'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.json b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.json
-new file mode 100644
-index 0000000000..484931896a
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.json
-@@ -0,0 +1,1769 @@
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "phys-bits": 0,
-+        "core-id": -1,
-+        "xlevel": 2147483656,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": true,
-+        "mmx": true,
-+        "arat": true,
-+        "rdpid": false,
-+        "vmx-page-walk-5": false,
-+        "vmx-page-walk-4": true,
-+        "vmx-desc-exit": true,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": true,
-+        "hv-frequencies": false,
-+        "tsc-frequency": 0,
-+        "vmx-rdseed-exit": true,
-+        "xd": true,
-+        "x-intel-pt-auto-level": true,
-+        "hv-vendor-id": "",
-+        "vmx-eptp-switching": true,
-+        "kvm_asyncpf": true,
-+        "kvm-asyncpf": true,
-+        "perfctr_core": false,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "avx512cd": false,
-+        "pbe": false,
-+        "decodeassists": false,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "vmx-exit-load-efer": true,
-+        "sse4_1": true,
-+        "sse4-1": true,
-+        "sse4.1": true,
-+        "family": 6,
-+        "legacy-cache": true,
-+        "vmx-vmwrite-vmexit-fields": true,
-+        "vmx-vnmi": true,
-+        "vmx-true-ctls": true,
-+        "host-phys-bits-limit": 0,
-+        "vmx-ept-execonly": true,
-+        "vmx-exit-save-efer": true,
-+        "vmx-invept-all-context": true,
-+        "vmware-cpuid-freq": true,
-+        "wbnoinvd": false,
-+        "avx512f": false,
-+        "xcrypt": false,
-+        "hv-runtime": false,
-+        "hv-stimer-direct": false,
-+        "mce": true,
-+        "mca": true,
-+        "msr": true,
-+        "thread-id": -1,
-+        "vmx-exit-load-pat": true,
-+        "vmx-intr-exit": true,
-+        "min-level": 22,
-+        "vmx-flexpriority": true,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "hv-relaxed": false,
-+        "avx512-bf16": false,
-+        "ds": false,
-+        "hv-crash": false,
-+        "fxsr": true,
-+        "vmx-cr8-load-exit": true,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": false,
-+        "vmx-exit-save-pat": true,
-+        "tsx-ctrl": false,
-+        "xtpr": false,
-+        "vmx-ple": false,
-+        "hv-evmcs": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "avx512vl": false,
-+        "extapic": false,
-+        "vmx-vmfunc": true,
-+        "3dnowprefetch": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "cr8legacy": false,
-+        "vmx-encls-exit": false,
-+        "stibp": true,
-+        "vmx-msr-bitmap": true,
-+        "cpuid-0xb": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": true,
-+        "kvm_pv_eoi": true,
-+        "vmx-pml": true,
-+        "apic-id": 4294967295,
-+        "vmx-nmi-exit": true,
-+        "vmx-invept-single-context-noglobals": true,
-+        "pn": false,
-+        "rsba": false,
-+        "dca": false,
-+        "vmx-unrestricted-guest": true,
-+        "vendor": "GenuineIntel",
-+        "hv-ipi": false,
-+        "vmx-cr3-store-noexit": true,
-+        "pku": false,
-+        "smx": false,
-+        "cmp-legacy": false,
-+        "cmp_legacy": false,
-+        "node-id": -1,
-+        "avx512-4fmaps": false,
-+        "vmcb_clean": false,
-+        "vmcb-clean": false,
-+        "hle": false,
-+        "amd-no-ssb": false,
-+        "3dnowext": false,
-+        "npt": false,
-+        "rdctl-no": false,
-+        "vmx-invvpid": true,
-+        "memory": "/machine/unattached/system[0]",
-+        "clwb": false,
-+        "lbrv": false,
-+        "adx": true,
-+        "ss": true,
-+        "pni": true,
-+        "svm_lock": false,
-+        "svm-lock": false,
-+        "pfthreshold": false,
-+        "smap": true,
-+        "smep": true,
-+        "vmx-invpcid-exit": true,
-+        "x2apic": true,
-+        "avx512vnni": false,
-+        "avx512vbmi": false,
-+        "vmx-apicv-x2apic": true,
-+        "hv-stimer": false,
-+        "kvm-pv-sched-yield": true,
-+        "vmx-invlpg-exit": true,
-+        "x-hv-synic-kvm-only": false,
-+        "vmx-invvpid-all-context": true,
-+        "i64": true,
-+        "vmx-activity-hlt": true,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "vmx-exit-ack-intr": true,
-+        "ace2-en": false,
-+        "pae": true,
-+        "pat": true,
-+        "sse": true,
-+        "die-id": -1,
-+        "vmx-tsc-offset": true,
-+        "phe-en": false,
-+        "kvm_nopiodelay": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": true,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": true,
-+        "socket-id": -1,
-+        "mds-no": false,
-+        "pcommit": false,
-+        "vmx-vpid": true,
-+        "syscall": true,
-+        "level": 22,
-+        "avx512dq": false,
-+        "x-migrate-smi-count": true,
-+        "svm": false,
-+        "full-cpuid-auto-level": true,
-+        "hv-reset": false,
-+        "invtsc": false,
-+        "vmx-monitor-exit": true,
-+        "sse3": true,
-+        "sse2": true,
-+        "ssbd": true,
-+        "vmx-wbinvd-exit": true,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "kvm_poll_control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-eoi": true,
-+        "kvm-pv-ipi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": true,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": true,
-+        "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,
-+        "vmx-entry-load-bndcfgs": false,
-+        "nodeid_msr": false,
-+        "pdcm": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "model": 142,
-+        "movbe": true,
-+        "nrip_save": false,
-+        "nrip-save": false,
-+        "vmx-pause-exit": true,
-+        "ssse3": true,
-+        "kvm_pv_unhalt": true,
-+        "sse4a": false,
-+        "invpcid": true,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "fma": true,
-+        "cx16": true,
-+        "de": true,
-+        "enforce": false,
-+        "stepping": 10,
-+        "xsave": true,
-+        "clflush": true,
-+        "skinit": false,
-+        "tsc": true,
-+        "tce": false,
-+        "fpu": true,
-+        "ds-cpl": false,
-+        "ds_cpl": false,
-+        "ibs": false,
-+        "fma4": false,
-+        "host-phys-bits": false,
-+        "vmx-exit-nosave-debugctl": true,
-+        "vmx-invept": true,
-+        "la57": false,
-+        "osvw": false,
-+        "check": true,
-+        "hv-spinlocks": 4294967295,
-+        "vmx-eptad": true,
-+        "pmu": false,
-+        "vmx-entry-noload-debugctl": true,
-+        "pmm": false,
-+        "apic": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": false,
-+        "vmx-apicv-register": false,
-+        "min-xlevel2": 0,
-+        "tsc-adjust": true,
-+        "tsc_adjust": true,
-+        "kvm-steal-time": true,
-+        "kvm_steal_time": true,
-+        "kvmclock": true,
-+        "vmx-zero-len-inject": false,
-+        "l3-cache": true,
-+        "pschange-mc-no": true,
-+        "vmx-rdrand-exit": true,
-+        "lwp": false,
-+        "hv-passthrough": false,
-+        "amd-ssbd": false,
-+        "ibpb": false,
-+        "xop": false,
-+        "core-capability": false,
-+        "avx": true,
-+        "vmx-invept-single-context": true,
-+        "movdiri": false,
-+        "avx512bw": false,
-+        "acpi": false,
-+        "ace2": false,
-+        "fsgsbase": true,
-+        "hv-vapic": false,
-+        "vmx-ept-1gb": true,
-+        "vmx-ept-2mb": true,
-+        "ht": false,
-+        "vmx-io-exit": true,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "popcnt": true,
-+        "vaes": false,
-+        "xsaves": true,
-+        "movdir64b": false,
-+        "vmx-shadow-vmcs": true,
-+        "tcg-cpuid": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": true,
-+        "vmx-entry-load-pat": true,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": true,
-+        "vmx-store-lma": true,
-+        "umip": true,
-+        "vmx-movdr-exit": true,
-+        "avx2": true,
-+        "pse": true,
-+        "pclmuldq": true,
-+        "sep": true,
-+        "vmx-cr3-load-noexit": true,
-+        "virt-ssbd": false,
-+        "x-hv-max-vps": -1,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "split-lock-detect": false,
-+        "kvm": true,
-+        "misalignsse": false,
-+        "min-xlevel": 2147483656,
-+        "realized": false,
-+        "kvm-pv-unhalt": true,
-+        "bmi2": true,
-+        "bmi1": true,
-+        "tsc_scale": false,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "hv-vpindex": false,
-+        "hv-no-nonarch-coresharing": "off",
-+        "vmx-preemption-timer": true,
-+        "xlevel2": 0,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": true,
-+        "kvm-no-smi-migration": false,
-+        "monitor": false,
-+        "vmx-vintr-pending": true,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "taa-no": false,
-+        "pcid": true,
-+        "vmx-secondary-ctls": true,
-+        "arch-capabilities": true,
-+        "vmx-xsaves": true,
-+        "clzero": false,
-+        "3dnow": false,
-+        "erms": true,
-+        "x-force-features": false,
-+        "vmx-entry-ia32e-mode": true,
-+        "lahf-lm": true,
-+        "lahf_lm": true,
-+        "vmx-ins-outs": true,
-+        "vpclmulqdq": false,
-+        "xstore": false,
-+        "fxsr-opt": false,
-+        "fxsr_opt": false,
-+        "hv-synic": false,
-+        "rtm": false,
-+        "kvm-hint-dedicated": false,
-+        "lmce": true,
-+        "hv-time": false,
-+        "perfctr_nb": false,
-+        "perfctr-nb": false,
-+        "hv-tlbflush": false,
-+        "ffxsr": false,
-+        "rdrand": true,
-+        "rdseed": true,
-+        "avx512-4vnniw": false,
-+        "vme": true,
-+        "vmx": true,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "vmx-rdpmc-exit": true,
-+        "wdt": false,
-+        "vmx-entry-load-efer": true,
-+        "level-func7": 0,
-+        "vmx-mtf": true,
-+        "pause_filter": false,
-+        "model-id": "Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz",
-+        "sha-ni": false,
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": true,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "model-expansion"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-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-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "svm",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom",
-+      "typename": "phenom-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "svm",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-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-v1",
-+      "typename": "pentium-v1-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-v1",
-+      "typename": "n270-v1-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-v1",
-+      "typename": "kvm64-v1-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-v1",
-+      "typename": "kvm32-v1-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-v1",
-+      "typename": "coreduo-v1-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-v1",
-+      "typename": "core2duo-v1-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-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-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": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-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-v1",
-+      "typename": "Penryn-v1-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-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5",
-+      "typename": "Opteron_G5-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4",
-+      "typename": "Opteron_G4-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm",
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3",
-+      "typename": "Opteron_G3-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm",
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [
-+        "svm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-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-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-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": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "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-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-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": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-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": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell",
-+      "typename": "Haswell-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "svm",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "svm",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-IBPB",
-+      "typename": "EPYC-IBPB-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "svm",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC",
-+      "typename": "EPYC-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "svm",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "svm",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "svm",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdctl-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdctl-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake-v1",
-+      "typename": "Cooperlake-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake",
-+      "typename": "Cooperlake-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-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": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell",
-+      "typename": "Broadwell-x86_64-cpu",
-+      "unavailable-features": [
-+        "hle",
-+        "rtm"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486-v1",
-+      "typename": "486-v1-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": "definitions"
-+}
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.sig b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.sig
-new file mode 100644
-index 0000000000..410d0e230c
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.sig
-@@ -0,0 +1,4 @@
-+0806ea
-+family:     6 (0x06)
-+model:    142 (0x8e)
-+stepping:  10 (0x0a)
-diff --git a/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.xml b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.xml
-new file mode 100644
-index 0000000000..d4564b2543
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Core-i7-8550U.xml
-@@ -0,0 +1,49 @@
-+<!-- Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x00000016' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x000806ea' ebx='0x00100800' ecx='0x7ffafbbf' edx='0xbfebfbff'/>
-+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x76036301' ebx='0x00f0b6ff' ecx='0x00000000' edx='0x00c30000'/>
-+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x00' eax='0x1c004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x01' eax='0x1c004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x02' eax='0x1c004143' ebx='0x00c0003f' ecx='0x000003ff' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x03' eax='0x1c03c163' ebx='0x03c0003f' ecx='0x00001fff' edx='0x00000006'/>
-+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x11142120'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x000027f7' ebx='0x00000002' ecx='0x00000009' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x029c67af' ecx='0x00000000' edx='0x9c002400'/>
-+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300804' ebx='0x00000000' ecx='0x00000000' edx='0x00000603'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000004' ebx='0x00000008' ecx='0x00000201' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x0000001f' ebx='0x00000440' ecx='0x00000440' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x000003c0' ecx='0x00000100' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x03' eax='0x00000040' ebx='0x000003c0' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x04' eax='0x00000040' ebx='0x00000400' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x08' eax='0x00000080' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x00' eax='0x00000001' ebx='0x0000000f' ecx='0x00000007' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x01' eax='0x02490002' ebx='0x003f3fff' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000015' ecx_in='0x00' eax='0x00000002' ebx='0x000000a6' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000016' ecx_in='0x00' eax='0x000007d0' ebx='0x00000fa0' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0x20000000' ecx_in='0x00' eax='0x000007d0' ebx='0x00000fa0' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x65746e49' ebx='0x2952286c' ecx='0x726f4320' edx='0x4d542865'/>
-+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x37692029' ebx='0x3535382d' ecx='0x43205530' edx='0x40205550'/>
-+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x382e3120' ebx='0x7a484730' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01006040' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00003027' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x000007d0' ebx='0x00000fa0' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x000007d0' ebx='0x00000fa0' ecx='0x00000064' edx='0x00000000'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000048'/>
-+</cpudata>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Gold-6130-CPU.patch b/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Gold-6130-CPU.patch
deleted file mode 100644
index 60fd572..0000000
--- a/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Gold-6130-CPU.patch
+++ /dev/null
@@ -1,1463 +0,0 @@
-From 6d67e39ed491074df0ff8829278d119f4cd7a77d Mon Sep 17 00:00:00 2001
-Message-Id: <6d67e39ed491074df0ff8829278d119f4cd7a77d@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:36 +0200
-Subject: [PATCH] cputest: Add data for Intel(R) Xeon(R) Gold 6130 CPU
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Skylake-Server with family 6, model 85, stepping 4, which is currently
-mis-detected as Cascadelake-Server CPU model.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3714779b15e594a14de4e6fe49c2e3eafe39b161)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <b78268d7c67fc7fd7e8ff3e0a441c37d5d80f600.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/cputest.c                               |    1 +
- .../x86_64-cpuid-Xeon-Gold-6130-disabled.xml  |    7 +
- .../x86_64-cpuid-Xeon-Gold-6130-enabled.xml   |    9 +
- .../x86_64-cpuid-Xeon-Gold-6130-guest.xml     |   33 +
- .../x86_64-cpuid-Xeon-Gold-6130-host.xml      |   35 +
- .../x86_64-cpuid-Xeon-Gold-6130-json.xml      |   16 +
- .../x86_64-cpuid-Xeon-Gold-6130.json          | 1201 +++++++++++++++++
- .../x86_64-cpuid-Xeon-Gold-6130.sig           |    4 +
- .../x86_64-cpuid-Xeon-Gold-6130.xml           |   54 +
- 9 files changed, 1360 insertions(+)
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-disabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-enabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-host.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.json
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.sig
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.xml
-
-diff --git a/tests/cputest.c b/tests/cputest.c
-index f9f1ca74ff..869d016ffc 100644
---- a/tests/cputest.c
-+++ b/tests/cputest.c
-@@ -1265,6 +1265,7 @@ mymain(void)
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-8890-v3", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7540", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-5115", JSON_MODELS);
-+    DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-6130", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-6148", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Platinum-8268", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Platinum-9242", JSON_MODELS);
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-disabled.xml
-new file mode 100644
-index 0000000000..e7c59cef1e
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-disabled.xml
-@@ -0,0 +1,7 @@
-+<!-- Features disabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1dc' edx='0xb0600000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000010' 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'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-enabled.xml
-new file mode 100644
-index 0000000000..8610577479
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-enabled.xml
-@@ -0,0 +1,9 @@
-+<!-- Features enabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7fa3223' edx='0x0f8bfbff'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0xd19f4fbb' ecx='0x0000000c' edx='0xac000400'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000008'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
-new file mode 100644
-index 0000000000..cfb0eb982d
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-guest.xml
-@@ -0,0 +1,33 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ds'/>
-+  <feature policy='require' name='acpi'/>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='ht'/>
-+  <feature policy='require' name='tm'/>
-+  <feature policy='require' name='pbe'/>
-+  <feature policy='require' name='dtes64'/>
-+  <feature policy='require' name='monitor'/>
-+  <feature policy='require' name='ds_cpl'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='smx'/>
-+  <feature policy='require' name='est'/>
-+  <feature policy='require' name='tm2'/>
-+  <feature policy='require' name='xtpr'/>
-+  <feature policy='require' name='pdcm'/>
-+  <feature policy='require' name='dca'/>
-+  <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='pku'/>
-+  <feature policy='require' name='ospke'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='mbm_total'/>
-+  <feature policy='require' name='mbm_local'/>
-+  <feature policy='require' name='invtsc'/>
-+  <feature policy='disable' name='avx512vnni'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-host.xml
-new file mode 100644
-index 0000000000..207e9e0ee4
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-host.xml
-@@ -0,0 +1,35 @@
-+<cpu>
-+  <arch>x86_64</arch>
-+  <model>Skylake-Server-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature name='ds'/>
-+  <feature name='acpi'/>
-+  <feature name='ss'/>
-+  <feature name='ht'/>
-+  <feature name='tm'/>
-+  <feature name='pbe'/>
-+  <feature name='dtes64'/>
-+  <feature name='monitor'/>
-+  <feature name='ds_cpl'/>
-+  <feature name='vmx'/>
-+  <feature name='smx'/>
-+  <feature name='est'/>
-+  <feature name='tm2'/>
-+  <feature name='xtpr'/>
-+  <feature name='pdcm'/>
-+  <feature name='dca'/>
-+  <feature name='osxsave'/>
-+  <feature name='tsc_adjust'/>
-+  <feature name='cmt'/>
-+  <feature name='clflushopt'/>
-+  <feature name='intel-pt'/>
-+  <feature name='pku'/>
-+  <feature name='ospke'/>
-+  <feature name='md-clear'/>
-+  <feature name='stibp'/>
-+  <feature name='ssbd'/>
-+  <feature name='xsaves'/>
-+  <feature name='mbm_total'/>
-+  <feature name='mbm_local'/>
-+  <feature name='invtsc'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
-new file mode 100644
-index 0000000000..968d904557
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130-json.xml
-@@ -0,0 +1,16 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='hypervisor'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='pku'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='disable' name='avx512vnni'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.json b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.json
-new file mode 100644
-index 0000000000..1a22387617
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.json
-@@ -0,0 +1,1201 @@
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "phys-bits": 0,
-+        "core-id": -1,
-+        "xlevel": 2147483656,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "mmx": true,
-+        "rdpid": false,
-+        "arat": true,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "hv-frequencies": false,
-+        "tsc-frequency": 0,
-+        "xd": true,
-+        "x-intel-pt-auto-level": false,
-+        "hv-vendor-id": "",
-+        "kvm-asyncpf": true,
-+        "kvm_asyncpf": true,
-+        "perfctr_core": false,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "decodeassists": false,
-+        "avx512cd": true,
-+        "sse4_1": true,
-+        "sse4.1": true,
-+        "sse4-1": true,
-+        "family": 6,
-+        "legacy-cache": true,
-+        "host-phys-bits-limit": 48,
-+        "vmware-cpuid-freq": true,
-+        "wbnoinvd": false,
-+        "avx512f": true,
-+        "hv-stimer-direct": 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,
-+        "hv-evmcs": false,
-+        "avx512vl": true,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": true,
-+        "avx512vbmi2": false,
-+        "cr8legacy": false,
-+        "stibp": true,
-+        "cpuid-0xb": true,
-+        "xcrypt-en": false,
-+        "kvm_pv_eoi": true,
-+        "apic-id": 4294967295,
-+        "rsba": false,
-+        "pn": false,
-+        "dca": false,
-+        "vendor": "GenuineIntel",
-+        "hv-ipi": false,
-+        "pku": true,
-+        "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,
-+        "rdctl-no": 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": true,
-+        "avx512vbmi": false,
-+        "avx512vnni": false,
-+        "hv-stimer": false,
-+        "x-hv-synic-kvm-only": true,
-+        "i64": true,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "ace2-en": false,
-+        "pat": true,
-+        "pae": true,
-+        "sse": true,
-+        "die-id": -1,
-+        "phe-en": false,
-+        "kvm_nopiodelay": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "hypervisor": true,
-+        "socket-id": -1,
-+        "mds-no": false,
-+        "pcommit": false,
-+        "syscall": true,
-+        "level": 13,
-+        "avx512dq": true,
-+        "x-migrate-smi-count": false,
-+        "svm": false,
-+        "full-cpuid-auto-level": true,
-+        "hv-reset": false,
-+        "invtsc": false,
-+        "sse3": true,
-+        "sse2": true,
-+        "ssbd": true,
-+        "est": false,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-ipi": true,
-+        "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": 85,
-+        "nrip_save": false,
-+        "nrip-save": false,
-+        "kvm_pv_unhalt": true,
-+        "ssse3": true,
-+        "sse4a": false,
-+        "invpcid": true,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "fma": true,
-+        "cx16": true,
-+        "de": true,
-+        "enforce": false,
-+        "stepping": 4,
-+        "xsave": true,
-+        "clflush": true,
-+        "skinit": false,
-+        "tsc": true,
-+        "tce": false,
-+        "fpu": true,
-+        "ibs": false,
-+        "ds_cpl": false,
-+        "ds-cpl": false,
-+        "host-phys-bits": true,
-+        "fma4": false,
-+        "la57": false,
-+        "osvw": false,
-+        "check": true,
-+        "hv-spinlocks": 4294967295,
-+        "pmu": false,
-+        "pmm": false,
-+        "apic": true,
-+        "spec-ctrl": 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,
-+        "hv-passthrough": false,
-+        "amd-ssbd": false,
-+        "ibpb": false,
-+        "xop": false,
-+        "avx": true,
-+        "core-capability": false,
-+        "movdiri": false,
-+        "ace2": false,
-+        "avx512bw": true,
-+        "acpi": false,
-+        "hv-vapic": false,
-+        "fsgsbase": true,
-+        "ht": false,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "vaes": false,
-+        "popcnt": true,
-+        "xsaves": true,
-+        "movdir64b": false,
-+        "tcg-cpuid": true,
-+        "lm": true,
-+        "umip": true,
-+        "pse": true,
-+        "avx2": true,
-+        "sep": true,
-+        "pclmuldq": true,
-+        "virt-ssbd": false,
-+        "x-hv-max-vps": -1,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "split-lock-detect": 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,
-+        "arch-capabilities": true,
-+        "3dnow": false,
-+        "erms": true,
-+        "x-force-features": false,
-+        "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": 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) Gold 6130 CPU @ 2.10GHz",
-+        "abm": true,
-+        "avx512pf": false,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "model-expansion"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-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-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "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-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-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-v1",
-+      "typename": "pentium-v1-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-v1",
-+      "typename": "n270-v1-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-v1",
-+      "typename": "kvm64-v1-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-v1",
-+      "typename": "kvm32-v1-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": "cpu64-rhel6-v1",
-+      "typename": "cpu64-rhel6-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "cpu64-rhel6",
-+      "typename": "cpu64-rhel6-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo-v1",
-+      "typename": "coreduo-v1-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-v1",
-+      "typename": "core2duo-v1-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-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-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": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-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-v1",
-+      "typename": "Penryn-v1-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-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "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-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "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-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "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-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-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-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-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": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512pf",
-+        "avx512er",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill",
-+      "typename": "KnightsMill-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512pf",
-+        "avx512er",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-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": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-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": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-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": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "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": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vnni",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vnni"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vnni"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-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": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-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": "486-v1",
-+      "typename": "486-v1-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": "definitions"
-+}
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.sig b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.sig
-new file mode 100644
-index 0000000000..1a3f3449f0
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.sig
-@@ -0,0 +1,4 @@
-+050654
-+family:     6 (0x06)
-+model:     85 (0x55)
-+stepping:   4 (0x04)
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.xml
-new file mode 100644
-index 0000000000..cb9233ee22
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Gold-6130.xml
-@@ -0,0 +1,54 @@
-+<!-- Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x00000016' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00050654' ebx='0x29200800' ecx='0x7ffefbff' edx='0xbfebfbff'/>
-+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x76036301' ebx='0x00f0b5ff' ecx='0x00000000' edx='0x00c30000'/>
-+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x00' eax='0x3c004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x01' eax='0x3c004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x02' eax='0x3c004143' ebx='0x03c0003f' ecx='0x000003ff' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x03' eax='0x3c07c163' ebx='0x0280003f' ecx='0x00007fff' edx='0x00000004'/>
-+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00002020'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000077' ebx='0x00000002' ecx='0x00000009' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0xd39ffffb' ecx='0x00000018' edx='0x9c002400'/>
-+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300404' ebx='0x00000000' ecx='0x00000000' edx='0x00000603'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000029'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000005' ebx='0x00000020' ecx='0x00000201' edx='0x00000029'/>
-+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x000002ff' ebx='0x00000a88' ecx='0x00000a88' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000a08' ecx='0x00000100' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x03' eax='0x00000040' ebx='0x000003c0' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x04' eax='0x00000040' ebx='0x00000400' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x05' eax='0x00000040' ebx='0x00000440' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x06' eax='0x00000200' ebx='0x00000480' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x07' eax='0x00000400' ebx='0x00000680' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x08' eax='0x00000080' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x09' eax='0x00000008' ebx='0x00000a80' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x0000007f' ecx='0x00000000' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x00010000' ecx='0x0000007f' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x0000000a' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x01' eax='0x0000000a' ebx='0x00000600' ecx='0x00000004' edx='0x0000000f'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x03' eax='0x00000059' ebx='0x00000000' ecx='0x00000004' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x00' eax='0x00000001' ebx='0x0000000f' ecx='0x00000007' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x01' eax='0x02490002' ebx='0x003f3fff' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000015' ecx_in='0x00' eax='0x00000002' ebx='0x000000a8' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000016' ecx_in='0x00' eax='0x00000834' ebx='0x00000e74' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x65746e49' ebx='0x2952286c' ecx='0x6f655820' edx='0x2952286e'/>
-+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x6c6f4720' ebx='0x31362064' ecx='0x43203033' edx='0x40205550'/>
-+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x312e3220' ebx='0x7a484730' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01006040' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x0000302e' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x00000834' ebx='0x00000e74' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x00000834' ebx='0x00000e74' ecx='0x00000064' edx='0x00000000'/>
-+</cpudata>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Platinum-9242-CPU.patch b/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Platinum-9242-CPU.patch
deleted file mode 100644
index 4df4203..0000000
--- a/SOURCES/libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Platinum-9242-CPU.patch
+++ /dev/null
@@ -1,1695 +0,0 @@
-From 0bd5ba1097ac8824a4a4a96b654f7ac8374703af Mon Sep 17 00:00:00 2001
-Message-Id: <0bd5ba1097ac8824a4a4a96b654f7ac8374703af@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Tue, 26 May 2020 10:59:35 +0200
-Subject: [PATCH] cputest: Add data for Intel(R) Xeon(R) Platinum 9242 CPU
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Cascadelake-Server with family 6, model 85, stepping 7.
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8605960389d208936b7f2cf3d2842a22a1aa7e22)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1840010
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <72ee1c6054fd300004508dd4fa01fd319dc2b527.1590483392.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/cputest.c                               |    1 +
- ...6_64-cpuid-Xeon-Platinum-9242-disabled.xml |    7 +
- ...86_64-cpuid-Xeon-Platinum-9242-enabled.xml |   10 +
- .../x86_64-cpuid-Xeon-Platinum-9242-guest.xml |   38 +
- .../x86_64-cpuid-Xeon-Platinum-9242-host.xml  |   39 +
- .../x86_64-cpuid-Xeon-Platinum-9242-json.xml  |   21 +
- .../x86_64-cpuid-Xeon-Platinum-9242.json      | 1405 +++++++++++++++++
- .../x86_64-cpuid-Xeon-Platinum-9242.sig       |    4 +
- .../x86_64-cpuid-Xeon-Platinum-9242.xml       |   68 +
- 9 files changed, 1593 insertions(+)
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-disabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-guest.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-host.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.json
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.sig
- create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.xml
-
-diff --git a/tests/cputest.c b/tests/cputest.c
-index 1f59f0d3a9..f9f1ca74ff 100644
---- a/tests/cputest.c
-+++ b/tests/cputest.c
-@@ -1267,6 +1267,7 @@ mymain(void)
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-5115", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-6148", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Platinum-8268", JSON_HOST);
-+    DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Platinum-9242", JSON_MODELS);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Ice-Lake-Server", JSON_MODELS);
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-disabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-disabled.xml
-new file mode 100644
-index 0000000000..e7c59cef1e
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-disabled.xml
-@@ -0,0 +1,7 @@
-+<!-- Features disabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x0804c1dc' edx='0xb0600000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000010' 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'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
-new file mode 100644
-index 0000000000..43c3a93a16
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-enabled.xml
-@@ -0,0 +1,10 @@
-+<!-- Features enabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xf7fa3223' edx='0x0f8bfbff'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0xd19f4fbb' ecx='0x0000080c' edx='0xac000400'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01001000' ecx='0x00000000' edx='0x00000000'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x000000ab'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-guest.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-guest.xml
-new file mode 100644
-index 0000000000..faabdde8a0
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-guest.xml
-@@ -0,0 +1,38 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ds'/>
-+  <feature policy='require' name='acpi'/>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='ht'/>
-+  <feature policy='require' name='tm'/>
-+  <feature policy='require' name='pbe'/>
-+  <feature policy='require' name='dtes64'/>
-+  <feature policy='require' name='monitor'/>
-+  <feature policy='require' name='ds_cpl'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='smx'/>
-+  <feature policy='require' name='est'/>
-+  <feature policy='require' name='tm2'/>
-+  <feature policy='require' name='xtpr'/>
-+  <feature policy='require' name='pdcm'/>
-+  <feature policy='require' name='dca'/>
-+  <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='pku'/>
-+  <feature policy='require' name='ospke'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='mbm_total'/>
-+  <feature policy='require' name='mbm_local'/>
-+  <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='ibrs-all'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='tsx-ctrl'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-host.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-host.xml
-new file mode 100644
-index 0000000000..01447f3478
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-host.xml
-@@ -0,0 +1,39 @@
-+<cpu>
-+  <arch>x86_64</arch>
-+  <model>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature name='ds'/>
-+  <feature name='acpi'/>
-+  <feature name='ss'/>
-+  <feature name='ht'/>
-+  <feature name='tm'/>
-+  <feature name='pbe'/>
-+  <feature name='dtes64'/>
-+  <feature name='monitor'/>
-+  <feature name='ds_cpl'/>
-+  <feature name='vmx'/>
-+  <feature name='smx'/>
-+  <feature name='est'/>
-+  <feature name='tm2'/>
-+  <feature name='xtpr'/>
-+  <feature name='pdcm'/>
-+  <feature name='dca'/>
-+  <feature name='osxsave'/>
-+  <feature name='tsc_adjust'/>
-+  <feature name='cmt'/>
-+  <feature name='intel-pt'/>
-+  <feature name='pku'/>
-+  <feature name='ospke'/>
-+  <feature name='md-clear'/>
-+  <feature name='stibp'/>
-+  <feature name='arch-capabilities'/>
-+  <feature name='xsaves'/>
-+  <feature name='mbm_total'/>
-+  <feature name='mbm_local'/>
-+  <feature name='invtsc'/>
-+  <feature name='rdctl-no'/>
-+  <feature name='ibrs-all'/>
-+  <feature name='skip-l1dfl-vmentry'/>
-+  <feature name='mds-no'/>
-+  <feature name='tsx-ctrl'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
-new file mode 100644
-index 0000000000..36e95029be
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242-json.xml
-@@ -0,0 +1,21 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>Cascadelake-Server</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='hypervisor'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='pku'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='ibpb'/>
-+  <feature policy='require' name='amd-ssbd'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='ibrs-all'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='tsx-ctrl'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.json b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.json
-new file mode 100644
-index 0000000000..103b094135
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.json
-@@ -0,0 +1,1405 @@
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "phys-bits": 0,
-+        "core-id": -1,
-+        "xlevel": 2147483656,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": true,
-+        "mmx": true,
-+        "rdpid": false,
-+        "vmx-page-walk-4": true,
-+        "vmx-page-walk-5": false,
-+        "arat": true,
-+        "gfni": false,
-+        "vmx-desc-exit": true,
-+        "ibrs-all": true,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": true,
-+        "hv-frequencies": false,
-+        "tsc-frequency": 0,
-+        "vmx-rdseed-exit": true,
-+        "xd": true,
-+        "x-intel-pt-auto-level": false,
-+        "hv-vendor-id": "",
-+        "vmx-eptp-switching": true,
-+        "kvm-asyncpf": true,
-+        "kvm_asyncpf": true,
-+        "perfctr_core": false,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "decodeassists": false,
-+        "avx512cd": true,
-+        "vmx-exit-load-efer": true,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4_1": true,
-+        "sse4.1": true,
-+        "sse4-1": true,
-+        "family": 6,
-+        "legacy-cache": true,
-+        "vmx-vmwrite-vmexit-fields": true,
-+        "vmx-vnmi": true,
-+        "vmx-true-ctls": true,
-+        "host-phys-bits-limit": 48,
-+        "vmx-ept-execonly": true,
-+        "vmx-exit-save-efer": true,
-+        "vmx-invept-all-context": true,
-+        "vmware-cpuid-freq": true,
-+        "wbnoinvd": false,
-+        "avx512f": true,
-+        "hv-stimer-direct": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "hv-runtime": false,
-+        "xcrypt": false,
-+        "thread-id": -1,
-+        "vmx-exit-load-pat": true,
-+        "vmx-intr-exit": true,
-+        "min-level": 31,
-+        "vmx-flexpriority": true,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "hv-relaxed": false,
-+        "hv-crash": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": false,
-+        "vmx-cr8-load-exit": true,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": true,
-+        "vmx-exit-save-pat": true,
-+        "xtpr": false,
-+        "tsx-ctrl": true,
-+        "vmx-ple": false,
-+        "hv-evmcs": false,
-+        "avx512vl": true,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": true,
-+        "vmx-vmfunc": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "vmx-encls-exit": false,
-+        "cr8legacy": false,
-+        "vmx-msr-bitmap": true,
-+        "stibp": true,
-+        "cpuid-0xb": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": true,
-+        "kvm_pv_eoi": true,
-+        "vmx-pml": true,
-+        "apic-id": 4294967295,
-+        "vmx-nmi-exit": true,
-+        "vmx-invept-single-context-noglobals": true,
-+        "rsba": false,
-+        "pn": false,
-+        "dca": false,
-+        "vendor": "GenuineIntel",
-+        "vmx-unrestricted-guest": true,
-+        "hv-ipi": false,
-+        "vmx-cr3-store-noexit": true,
-+        "pku": true,
-+        "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,
-+        "rdctl-no": true,
-+        "vmx-invvpid": 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,
-+        "vmx-invpcid-exit": true,
-+        "x2apic": true,
-+        "avx512vbmi": false,
-+        "avx512vnni": true,
-+        "vmx-apicv-x2apic": true,
-+        "kvm-pv-sched-yield": true,
-+        "hv-stimer": false,
-+        "vmx-invlpg-exit": true,
-+        "x-hv-synic-kvm-only": true,
-+        "vmx-invvpid-all-context": true,
-+        "i64": true,
-+        "vmx-activity-hlt": true,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "vmx-exit-ack-intr": true,
-+        "ace2-en": false,
-+        "pat": true,
-+        "pae": true,
-+        "sse": true,
-+        "die-id": -1,
-+        "vmx-tsc-offset": true,
-+        "phe-en": false,
-+        "kvm_nopiodelay": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": true,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": true,
-+        "socket-id": -1,
-+        "mds-no": true,
-+        "pcommit": false,
-+        "vmx-vpid": true,
-+        "syscall": true,
-+        "level": 31,
-+        "avx512dq": true,
-+        "x-migrate-smi-count": false,
-+        "svm": false,
-+        "full-cpuid-auto-level": true,
-+        "hv-reset": false,
-+        "invtsc": false,
-+        "vmx-monitor-exit": true,
-+        "sse3": true,
-+        "sse2": true,
-+        "vmx-wbinvd-exit": true,
-+        "ssbd": true,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "kvm_poll_control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-ipi": true,
-+        "kvm-pv-eoi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": true,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": true,
-+        "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,
-+        "vmx-entry-load-bndcfgs": false,
-+        "pdcm": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "movbe": true,
-+        "model": 85,
-+        "nrip_save": false,
-+        "nrip-save": false,
-+        "kvm_pv_unhalt": true,
-+        "ssse3": true,
-+        "sse4a": false,
-+        "vmx-pause-exit": true,
-+        "invpcid": true,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "fma": true,
-+        "cx16": true,
-+        "de": true,
-+        "enforce": false,
-+        "stepping": 7,
-+        "xsave": true,
-+        "clflush": true,
-+        "skinit": false,
-+        "tsc": true,
-+        "tce": false,
-+        "fpu": true,
-+        "ibs": false,
-+        "ds_cpl": false,
-+        "ds-cpl": false,
-+        "vmx-exit-nosave-debugctl": true,
-+        "host-phys-bits": true,
-+        "fma4": false,
-+        "vmx-invept": true,
-+        "la57": false,
-+        "osvw": false,
-+        "check": true,
-+        "hv-spinlocks": 4294967295,
-+        "vmx-eptad": true,
-+        "pmu": false,
-+        "pmm": false,
-+        "apic": true,
-+        "vmx-entry-noload-debugctl": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": true,
-+        "vmx-apicv-register": true,
-+        "min-xlevel2": 0,
-+        "tsc-adjust": true,
-+        "tsc_adjust": true,
-+        "kvm-steal-time": true,
-+        "kvm_steal_time": true,
-+        "vmx-zero-len-inject": false,
-+        "kvmclock": true,
-+        "pschange-mc-no": true,
-+        "l3-cache": true,
-+        "vmx-rdrand-exit": true,
-+        "lwp": false,
-+        "hv-passthrough": false,
-+        "amd-ssbd": true,
-+        "ibpb": true,
-+        "xop": false,
-+        "avx": true,
-+        "core-capability": false,
-+        "vmx-invept-single-context": true,
-+        "movdiri": false,
-+        "ace2": false,
-+        "avx512bw": true,
-+        "acpi": false,
-+        "hv-vapic": false,
-+        "fsgsbase": true,
-+        "vmx-ept-1gb": true,
-+        "vmx-ept-2mb": true,
-+        "ht": false,
-+        "vmx-io-exit": true,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "vaes": false,
-+        "popcnt": true,
-+        "xsaves": true,
-+        "movdir64b": false,
-+        "tcg-cpuid": true,
-+        "vmx-shadow-vmcs": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": true,
-+        "vmx-entry-load-pat": true,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": true,
-+        "umip": true,
-+        "vmx-store-lma": true,
-+        "vmx-movdr-exit": true,
-+        "pse": true,
-+        "avx2": true,
-+        "sep": true,
-+        "pclmuldq": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": true,
-+        "x-hv-max-vps": -1,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "split-lock-detect": 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,
-+        "hv-no-nonarch-coresharing": "off",
-+        "vmx-preemption-timer": true,
-+        "ucode-rev": 0,
-+        "xlevel2": 0,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": true,
-+        "kvm-no-smi-migration": false,
-+        "monitor": false,
-+        "vmx-vintr-pending": true,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": true,
-+        "taa-no": false,
-+        "vmx-secondary-ctls": true,
-+        "arch-capabilities": true,
-+        "vmx-xsaves": true,
-+        "clzero": false,
-+        "3dnow": false,
-+        "erms": true,
-+        "vmx-entry-ia32e-mode": true,
-+        "x-force-features": false,
-+        "lahf_lm": true,
-+        "lahf-lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": true,
-+        "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": true,
-+        "vme": true,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": true,
-+        "level-func7": 0,
-+        "vmx-entry-load-efer": true,
-+        "vmx-mtf": true,
-+        "pause_filter": false,
-+        "sha-ni": false,
-+        "model-id": "Intel(R) Xeon(R) Platinum 9242 CPU @ 2.30GHz",
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": true,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "model-expansion"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-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-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "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-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-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-v1",
-+      "typename": "pentium-v1-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-v1",
-+      "typename": "n270-v1-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-v1",
-+      "typename": "kvm64-v1-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-v1",
-+      "typename": "kvm32-v1-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-v1",
-+      "typename": "coreduo-v1-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-v1",
-+      "typename": "core2duo-v1-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-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-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": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-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-v1",
-+      "typename": "Penryn-v1-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-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "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-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "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-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "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-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-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-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-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": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512pf",
-+        "avx512er",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill",
-+      "typename": "KnightsMill-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512pf",
-+        "avx512er",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-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": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-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": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-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": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "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"
-+      ],
-+      "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": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-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": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-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": "486-v1",
-+      "typename": "486-v1-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": "definitions"
-+}
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.sig b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.sig
-new file mode 100644
-index 0000000000..082a25b4ee
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.sig
-@@ -0,0 +1,4 @@
-+050657
-+family:     6 (0x06)
-+model:     85 (0x55)
-+stepping:   7 (0x07)
-diff --git a/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.xml b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.xml
-new file mode 100644
-index 0000000000..e3bdd881b6
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Xeon-Platinum-9242.xml
-@@ -0,0 +1,68 @@
-+<!-- Intel(R) Xeon(R) Platinum 9242 CPU @ 2.30GHz -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x0000001f' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00050657' ebx='0x07800800' ecx='0x7ffefbff' edx='0xbfebfbff'/>
-+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x76036301' ebx='0x00f0b5ff' ecx='0x00000000' edx='0x00c30000'/>
-+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x00' eax='0x7c004121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x01' eax='0x7c004122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x02' eax='0x7c004143' ebx='0x03c0003f' ecx='0x000003ff' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x03' eax='0x7c0fc163' ebx='0x0280003f' ecx='0x0000cfff' edx='0x00000005'/>
-+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00002020'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000ef7' ebx='0x00000002' ecx='0x00000009' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0xd39ffffb' ecx='0x00000818' edx='0xbc000400'/>
-+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300404' ebx='0x00000000' ecx='0x00000000' edx='0x00000603'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000007'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000006' ebx='0x00000030' ecx='0x00000201' edx='0x00000007'/>
-+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x000002ff' ebx='0x00000a88' ecx='0x00000a88' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000a08' ecx='0x00000100' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x02' eax='0x00000100' ebx='0x00000240' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x03' eax='0x00000040' ebx='0x000003c0' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x04' eax='0x00000040' ebx='0x00000400' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x05' eax='0x00000040' ebx='0x00000440' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x06' eax='0x00000200' ebx='0x00000480' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x07' eax='0x00000400' ebx='0x00000680' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x08' eax='0x00000080' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x09' eax='0x00000008' ebx='0x00000a80' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x000000cf' ecx='0x00000000' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000000' ebx='0x0001a000' ecx='0x000000cf' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x0000000a' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x01' eax='0x0000000a' ebx='0x00000600' ecx='0x00000004' edx='0x0000000f'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x03' eax='0x00000059' ebx='0x00000000' ecx='0x00000004' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x00' eax='0x00000001' ebx='0x0000000f' ecx='0x00000007' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x01' eax='0x02490002' ebx='0x003f3fff' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000015' ecx_in='0x00' eax='0x00000002' ebx='0x000000b8' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000016' ecx_in='0x00' eax='0x000008fc' ebx='0x00000ed8' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000017' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000019' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001a' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001b' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001d' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000007'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x01' eax='0x00000006' ebx='0x00000030' ecx='0x00000201' edx='0x00000007'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x02' eax='0x00000007' ebx='0x00000060' ecx='0x00000502' edx='0x00000007'/>
-+  <cpuid eax_in='0x0000001f' ecx_in='0x03' eax='0x00000000' ebx='0x00000000' ecx='0x00000003' edx='0x00000007'/>
-+  <cpuid eax_in='0x20000000' ecx_in='0x00' eax='0x00000001' ebx='0x00000002' ecx='0x00000100' edx='0x00000007'/>
-+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000121' edx='0x2c100800'/>
-+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x65746e49' ebx='0x2952286c' ecx='0x6f655820' edx='0x2952286e'/>
-+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x616c5020' ebx='0x756e6974' ecx='0x3239206d' edx='0x43203234'/>
-+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x40205550' ebx='0x332e3220' ecx='0x7a484730' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x01006040' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x0000302e' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x000008fc' ebx='0x00000ed8' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x000008fc' ebx='0x00000ed8' ecx='0x00000064' edx='0x00000000'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x000000ab'/>
-+</cpudata>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-cputestdata-Add-test-data-for-Snowridge.patch b/SOURCES/libvirt-cputestdata-Add-test-data-for-Snowridge.patch
deleted file mode 100644
index 0ee3ed2..0000000
--- a/SOURCES/libvirt-cputestdata-Add-test-data-for-Snowridge.patch
+++ /dev/null
@@ -1,2763 +0,0 @@
-From 2d95faf1042465489753179ca46b7ade6225b171 Mon Sep 17 00:00:00 2001
-Message-Id: <2d95faf1042465489753179ca46b7ade6225b171@dist-git>
-From: Tim Wiederhake <twiederh@redhat.com>
-Date: Fri, 15 Jan 2021 15:17:18 +0100
-Subject: [PATCH] cputestdata: Add test data for Snowridge
-
-It's obvious the CPU model detection provides strange results, which
-will be fixed by adding a new Snowridge CPU model few patches later.
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 59a585fdb047669ee36251c7338bb2e2ccd58998)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1537734
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20210115141722.14986-3-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- tests/cputest.c                               |    1 +
- .../x86_64-cpuid-Atom-P5362-disabled.xml      |    8 +
- .../x86_64-cpuid-Atom-P5362-enabled.xml       |   10 +
- .../x86_64-cpuid-Atom-P5362-guest.xml         |   57 +
- .../x86_64-cpuid-Atom-P5362-host.xml          |   66 +
- .../x86_64-cpuid-Atom-P5362-json.xml          |   41 +
- .../cputestdata/x86_64-cpuid-Atom-P5362.json  | 2415 +++++++++++++++++
- tests/cputestdata/x86_64-cpuid-Atom-P5362.sig |    4 +
- tests/cputestdata/x86_64-cpuid-Atom-P5362.xml |   61 +
- 9 files changed, 2663 insertions(+)
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362-enabled.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362.json
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362.sig
- create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-P5362.xml
-
-diff --git a/tests/cputest.c b/tests/cputest.c
-index 388174eba7..2ec3337476 100644
---- a/tests/cputest.c
-+++ b/tests/cputest.c
-@@ -1218,6 +1218,7 @@ mymain(void)
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "A10-5800K", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Atom-D510", JSON_NONE);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Atom-N450", JSON_NONE);
-+    DO_TEST_CPUID(VIR_ARCH_X86_64, "Atom-P5362", JSON_MODELS_REQUIRED);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-650", JSON_MODELS_REQUIRED);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-2500", JSON_HOST);
-     DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-2540M", JSON_MODELS);
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-new file mode 100644
-index 0000000000..842c7b4a2a
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-disabled.xml
-@@ -0,0 +1,8 @@
-+<!-- Features disabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x080041dc' edx='0xb0600000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x02001000' ecx='0x00000020' 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'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x00000100'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-enabled.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-enabled.xml
-new file mode 100644
-index 0000000000..2214d448ef
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-enabled.xml
-@@ -0,0 +1,10 @@
-+<!-- Features enabled by QEMU -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0xc7f8a223' edx='0x0f8bfbff'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000004' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x21940283' ecx='0x1a400104' edx='0xac000400'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000101' edx='0x28100800'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x00000000' ebx='0x01009000' ecx='0x00000000' edx='0x00000000'/>
-+  <msr index='0x10a' edx='0x00000000' eax='0x0000006b'/>
-+</cpudata>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-new file mode 100644
-index 0000000000..0f3e2e506e
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-guest.xml
-@@ -0,0 +1,57 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>IvyBridge-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ds'/>
-+  <feature policy='require' name='acpi'/>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='ht'/>
-+  <feature policy='require' name='tm'/>
-+  <feature policy='require' name='pbe'/>
-+  <feature policy='require' name='dtes64'/>
-+  <feature policy='require' name='monitor'/>
-+  <feature policy='require' name='ds_cpl'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='smx'/>
-+  <feature policy='require' name='est'/>
-+  <feature policy='require' name='tm2'/>
-+  <feature policy='require' name='xtpr'/>
-+  <feature policy='require' name='pdcm'/>
-+  <feature policy='require' name='movbe'/>
-+  <feature policy='require' name='osxsave'/>
-+  <feature policy='require' name='arat'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='cmt'/>
-+  <feature policy='require' name='rdseed'/>
-+  <feature policy='require' name='smap'/>
-+  <feature policy='require' name='clflushopt'/>
-+  <feature policy='require' name='clwb'/>
-+  <feature policy='require' name='intel-pt'/>
-+  <feature policy='require' name='sha-ni'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='waitpkg'/>
-+  <feature policy='require' name='gfni'/>
-+  <feature policy='require' name='rdpid'/>
-+  <feature policy='require' name='cldemote'/>
-+  <feature policy='require' name='movdiri'/>
-+  <feature policy='require' name='movdir64b'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='ssbd'/>
-+  <feature policy='require' name='xsaveopt'/>
-+  <feature policy='require' name='xsavec'/>
-+  <feature policy='require' name='xgetbv1'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='mbm_total'/>
-+  <feature policy='require' name='mbm_local'/>
-+  <feature policy='require' name='3dnowprefetch'/>
-+  <feature policy='require' name='invtsc'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='ibrs-all'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-+  <feature policy='require' name='taa-no'/>
-+  <feature policy='disable' name='avx'/>
-+  <feature policy='disable' name='f16c'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-new file mode 100644
-index 0000000000..3bd009c1da
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-host.xml
-@@ -0,0 +1,66 @@
-+<cpu>
-+  <arch>x86_64</arch>
-+  <model>Westmere-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature name='vme'/>
-+  <feature name='ds'/>
-+  <feature name='acpi'/>
-+  <feature name='ss'/>
-+  <feature name='ht'/>
-+  <feature name='tm'/>
-+  <feature name='pbe'/>
-+  <feature name='pclmuldq'/>
-+  <feature name='dtes64'/>
-+  <feature name='monitor'/>
-+  <feature name='ds_cpl'/>
-+  <feature name='vmx'/>
-+  <feature name='smx'/>
-+  <feature name='est'/>
-+  <feature name='tm2'/>
-+  <feature name='xtpr'/>
-+  <feature name='pdcm'/>
-+  <feature name='x2apic'/>
-+  <feature name='movbe'/>
-+  <feature name='tsc-deadline'/>
-+  <feature name='xsave'/>
-+  <feature name='osxsave'/>
-+  <feature name='rdrand'/>
-+  <feature name='arat'/>
-+  <feature name='fsgsbase'/>
-+  <feature name='tsc_adjust'/>
-+  <feature name='smep'/>
-+  <feature name='erms'/>
-+  <feature name='cmt'/>
-+  <feature name='rdseed'/>
-+  <feature name='smap'/>
-+  <feature name='clflushopt'/>
-+  <feature name='clwb'/>
-+  <feature name='intel-pt'/>
-+  <feature name='sha-ni'/>
-+  <feature name='umip'/>
-+  <feature name='waitpkg'/>
-+  <feature name='gfni'/>
-+  <feature name='rdpid'/>
-+  <feature name='cldemote'/>
-+  <feature name='movdiri'/>
-+  <feature name='movdir64b'/>
-+  <feature name='md-clear'/>
-+  <feature name='stibp'/>
-+  <feature name='arch-capabilities'/>
-+  <feature name='ssbd'/>
-+  <feature name='xsaveopt'/>
-+  <feature name='xsavec'/>
-+  <feature name='xgetbv1'/>
-+  <feature name='xsaves'/>
-+  <feature name='mbm_total'/>
-+  <feature name='mbm_local'/>
-+  <feature name='rdtscp'/>
-+  <feature name='3dnowprefetch'/>
-+  <feature name='invtsc'/>
-+  <feature name='rdctl-no'/>
-+  <feature name='ibrs-all'/>
-+  <feature name='skip-l1dfl-vmentry'/>
-+  <feature name='mds-no'/>
-+  <feature name='pschange-mc-no'/>
-+  <feature name='taa-no'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml
-new file mode 100644
-index 0000000000..ca685d2f80
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362-json.xml
-@@ -0,0 +1,41 @@
-+<cpu mode='custom' match='exact'>
-+  <model fallback='forbid'>IvyBridge-IBRS</model>
-+  <vendor>Intel</vendor>
-+  <feature policy='require' name='ss'/>
-+  <feature policy='require' name='vmx'/>
-+  <feature policy='require' name='pdcm'/>
-+  <feature policy='require' name='movbe'/>
-+  <feature policy='require' name='hypervisor'/>
-+  <feature policy='require' name='arat'/>
-+  <feature policy='require' name='tsc_adjust'/>
-+  <feature policy='require' name='rdseed'/>
-+  <feature policy='require' name='smap'/>
-+  <feature policy='require' name='clflushopt'/>
-+  <feature policy='require' name='clwb'/>
-+  <feature policy='require' name='sha-ni'/>
-+  <feature policy='require' name='umip'/>
-+  <feature policy='require' name='gfni'/>
-+  <feature policy='require' name='rdpid'/>
-+  <feature policy='require' name='cldemote'/>
-+  <feature policy='require' name='movdiri'/>
-+  <feature policy='require' name='movdir64b'/>
-+  <feature policy='require' name='md-clear'/>
-+  <feature policy='require' name='stibp'/>
-+  <feature policy='require' name='arch-capabilities'/>
-+  <feature policy='require' name='ssbd'/>
-+  <feature policy='require' name='xsaveopt'/>
-+  <feature policy='require' name='xsavec'/>
-+  <feature policy='require' name='xgetbv1'/>
-+  <feature policy='require' name='xsaves'/>
-+  <feature policy='require' name='3dnowprefetch'/>
-+  <feature policy='require' name='ibpb'/>
-+  <feature policy='require' name='amd-stibp'/>
-+  <feature policy='require' name='amd-ssbd'/>
-+  <feature policy='require' name='rdctl-no'/>
-+  <feature policy='require' name='ibrs-all'/>
-+  <feature policy='require' name='skip-l1dfl-vmentry'/>
-+  <feature policy='require' name='mds-no'/>
-+  <feature policy='require' name='pschange-mc-no'/>
-+  <feature policy='disable' name='avx'/>
-+  <feature policy='disable' name='f16c'/>
-+</cpu>
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362.json b/tests/cputestdata/x86_64-cpuid-Atom-P5362.json
-new file mode 100644
-index 0000000000..4e5545f177
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362.json
-@@ -0,0 +1,2415 @@
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "phys-bits": 0,
-+        "core-id": -1,
-+        "xlevel": 2147483656,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": true,
-+        "mmx": true,
-+        "rdpid": true,
-+        "vmx-page-walk-4": true,
-+        "vmx-page-walk-5": false,
-+        "arat": true,
-+        "gfni": true,
-+        "vmx-desc-exit": true,
-+        "ibrs-all": true,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": true,
-+        "hv-frequencies": false,
-+        "tsc-frequency": 0,
-+        "vmx-rdseed-exit": true,
-+        "xd": true,
-+        "x-intel-pt-auto-level": false,
-+        "hv-vendor-id": "",
-+        "vmx-eptp-switching": true,
-+        "kvm-asyncpf": true,
-+        "kvm_asyncpf": true,
-+        "perfctr_core": false,
-+        "perfctr-core": false,
-+        "mpx": false,
-+        "pbe": false,
-+        "decodeassists": false,
-+        "avx512cd": false,
-+        "vmx-exit-load-efer": true,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4_1": true,
-+        "sse4.1": true,
-+        "sse4-1": true,
-+        "family": 6,
-+        "legacy-cache": true,
-+        "vmx-vmwrite-vmexit-fields": true,
-+        "vmx-vnmi": true,
-+        "vmx-true-ctls": true,
-+        "host-phys-bits-limit": 48,
-+        "vmx-ept-execonly": true,
-+        "vmx-exit-save-efer": true,
-+        "vmx-invept-all-context": true,
-+        "vmware-cpuid-freq": true,
-+        "wbnoinvd": false,
-+        "avx512f": false,
-+        "hv-stimer-direct": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "hv-runtime": false,
-+        "xcrypt": false,
-+        "thread-id": -1,
-+        "vmx-exit-load-pat": true,
-+        "vmx-intr-exit": true,
-+        "min-level": 27,
-+        "vmx-flexpriority": true,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "hv-relaxed": false,
-+        "hv-crash": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": false,
-+        "vmx-cr8-load-exit": true,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": true,
-+        "vmx-exit-save-pat": true,
-+        "xtpr": false,
-+        "tsx-ctrl": false,
-+        "vmx-ple": false,
-+        "hv-evmcs": false,
-+        "avx512vl": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": true,
-+        "vmx-vmfunc": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "vmx-encls-exit": false,
-+        "cr8legacy": false,
-+        "vmx-msr-bitmap": true,
-+        "stibp": true,
-+        "cpuid-0xb": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": true,
-+        "kvm_pv_eoi": true,
-+        "vmx-pml": true,
-+        "apic-id": 4294967295,
-+        "vmx-nmi-exit": true,
-+        "vmx-invept-single-context-noglobals": true,
-+        "rsba": false,
-+        "pn": false,
-+        "dca": false,
-+        "vendor": "GenuineIntel",
-+        "vmx-unrestricted-guest": true,
-+        "hv-ipi": false,
-+        "vmx-cr3-store-noexit": true,
-+        "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": false,
-+        "npt": false,
-+        "rdctl-no": true,
-+        "vmx-invvpid": true,
-+        "memory": "/machine/unattached/system[0]",
-+        "clwb": true,
-+        "lbrv": false,
-+        "adx": false,
-+        "ss": true,
-+        "pni": true,
-+        "svm_lock": false,
-+        "svm-lock": false,
-+        "pfthreshold": false,
-+        "smep": true,
-+        "smap": true,
-+        "vmx-invpcid-exit": false,
-+        "x2apic": true,
-+        "avx512vbmi": false,
-+        "avx512vnni": false,
-+        "vmx-apicv-x2apic": true,
-+        "kvm-pv-sched-yield": true,
-+        "hv-stimer": false,
-+        "vmx-invlpg-exit": true,
-+        "x-hv-synic-kvm-only": true,
-+        "vmx-invvpid-all-context": true,
-+        "i64": true,
-+        "vmx-activity-hlt": true,
-+        "flushbyasid": false,
-+        "f16c": false,
-+        "vmx-exit-ack-intr": true,
-+        "ace2-en": false,
-+        "pat": true,
-+        "pae": true,
-+        "sse": true,
-+        "die-id": -1,
-+        "vmx-tsc-offset": true,
-+        "phe-en": false,
-+        "kvm_nopiodelay": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": true,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": true,
-+        "socket-id": -1,
-+        "mds-no": true,
-+        "pcommit": false,
-+        "vmx-vpid": true,
-+        "syscall": true,
-+        "level": 27,
-+        "avx512dq": false,
-+        "x-migrate-smi-count": false,
-+        "svm": false,
-+        "full-cpuid-auto-level": true,
-+        "hv-reset": false,
-+        "invtsc": false,
-+        "vmx-monitor-exit": true,
-+        "sse3": true,
-+        "sse2": true,
-+        "vmx-wbinvd-exit": true,
-+        "ssbd": true,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "kvm_poll_control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-ipi": true,
-+        "kvm-pv-eoi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": true,
-+        "waitpkg": false,
-+        "cldemote": true,
-+        "vmx-ept": true,
-+        "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,
-+        "vmx-entry-load-bndcfgs": false,
-+        "pdcm": true,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "movbe": true,
-+        "model": 134,
-+        "nrip_save": false,
-+        "nrip-save": false,
-+        "kvm_pv_unhalt": true,
-+        "ssse3": true,
-+        "sse4a": false,
-+        "vmx-pause-exit": true,
-+        "invpcid": false,
-+        "pdpe1gb": false,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "fma": false,
-+        "cx16": true,
-+        "de": true,
-+        "enforce": false,
-+        "stepping": 5,
-+        "xsave": true,
-+        "clflush": true,
-+        "skinit": false,
-+        "tsc": true,
-+        "tce": false,
-+        "fpu": true,
-+        "ibs": false,
-+        "ds_cpl": false,
-+        "ds-cpl": false,
-+        "vmx-exit-nosave-debugctl": true,
-+        "host-phys-bits": true,
-+        "fma4": false,
-+        "vmx-invept": true,
-+        "la57": false,
-+        "osvw": false,
-+        "check": true,
-+        "hv-spinlocks": 4294967295,
-+        "vmx-eptad": true,
-+        "pmu": false,
-+        "pmm": false,
-+        "apic": true,
-+        "vmx-entry-noload-debugctl": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": true,
-+        "vmx-apicv-register": true,
-+        "min-xlevel2": 0,
-+        "tsc-adjust": true,
-+        "tsc_adjust": true,
-+        "kvm-steal-time": true,
-+        "kvm_steal_time": true,
-+        "vmx-zero-len-inject": false,
-+        "kvmclock": true,
-+        "pschange-mc-no": true,
-+        "l3-cache": true,
-+        "vmx-rdrand-exit": true,
-+        "lwp": false,
-+        "hv-passthrough": false,
-+        "amd-ssbd": true,
-+        "ibpb": true,
-+        "xop": false,
-+        "avx": false,
-+        "core-capability": false,
-+        "vmx-invept-single-context": true,
-+        "movdiri": true,
-+        "ace2": false,
-+        "avx512bw": false,
-+        "acpi": false,
-+        "hv-vapic": false,
-+        "fsgsbase": true,
-+        "vmx-ept-1gb": true,
-+        "vmx-ept-2mb": true,
-+        "ht": false,
-+        "vmx-io-exit": true,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "vaes": false,
-+        "popcnt": true,
-+        "xsaves": true,
-+        "movdir64b": true,
-+        "tcg-cpuid": true,
-+        "vmx-shadow-vmcs": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": true,
-+        "vmx-entry-load-pat": true,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": true,
-+        "umip": true,
-+        "vmx-store-lma": true,
-+        "vmx-movdr-exit": true,
-+        "pse": true,
-+        "avx2": false,
-+        "sep": true,
-+        "pclmuldq": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": true,
-+        "x-hv-max-vps": -1,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "split-lock-detect": false,
-+        "kvm": true,
-+        "misalignsse": false,
-+        "min-xlevel": 2147483656,
-+        "kvm-pv-unhalt": true,
-+        "bmi2": false,
-+        "bmi1": false,
-+        "realized": false,
-+        "tsc_scale": false,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "hv-vpindex": false,
-+        "hv-no-nonarch-coresharing": "off",
-+        "amd-stibp": true,
-+        "vmx-preemption-timer": true,
-+        "ucode-rev": 0,
-+        "xlevel2": 0,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": true,
-+        "kvm-no-smi-migration": false,
-+        "monitor": false,
-+        "vmx-vintr-pending": true,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": false,
-+        "taa-no": false,
-+        "vmx-secondary-ctls": true,
-+        "arch-capabilities": true,
-+        "vmx-xsaves": true,
-+        "clzero": false,
-+        "3dnow": false,
-+        "erms": true,
-+        "vmx-entry-ia32e-mode": true,
-+        "x-force-features": false,
-+        "lahf_lm": true,
-+        "lahf-lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": true,
-+        "fxsr-opt": false,
-+        "hv-synic": false,
-+        "xstore": false,
-+        "fxsr_opt": false,
-+        "kvm-hint-dedicated": false,
-+        "rtm": false,
-+        "lmce": true,
-+        "hv-time": false,
-+        "perfctr-nb": false,
-+        "perfctr_nb": false,
-+        "ffxsr": false,
-+        "hv-tlbflush": false,
-+        "rdrand": true,
-+        "rdseed": true,
-+        "avx512-4vnniw": false,
-+        "vmx": true,
-+        "vme": true,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": true,
-+        "level-func7": 0,
-+        "vmx-entry-load-efer": true,
-+        "vmx-mtf": true,
-+        "pause_filter": false,
-+        "sha-ni": true,
-+        "model-id": "Intel Atom(R) P5362 processor",
-+        "abm": false,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": true,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "model-expansion"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-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-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "3dnowext",
-+        "3dnow",
-+        "abm",
-+        "sse4a"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom",
-+      "typename": "phenom-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "3dnowext",
-+        "3dnow",
-+        "abm",
-+        "sse4a"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-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-v1",
-+      "typename": "pentium-v1-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-v1",
-+      "typename": "n270-v1-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-v1",
-+      "typename": "kvm64-v1-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-v1",
-+      "typename": "kvm32-v1-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-v1",
-+      "typename": "coreduo-v1-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-v1",
-+      "typename": "core2duo-v1-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-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-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": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "core-capability",
-+        "pdpe1gb",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mpx",
-+        "core-capability",
-+        "pdpe1gb",
-+        "mpx",
-+        "mpx",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "mpx",
-+        "core-capability",
-+        "pdpe1gb",
-+        "mpx",
-+        "mpx",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "mpx",
-+        "mpx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "mpx",
-+        "mpx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "adx",
-+        "abm",
-+        "avx",
-+        "mpx",
-+        "mpx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "adx",
-+        "abm",
-+        "avx",
-+        "mpx",
-+        "mpx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge",
-+      "typename": "SandyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn-v1",
-+      "typename": "Penryn-v1-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-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "pdpe1gb",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5",
-+      "typename": "Opteron_G5-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "pdpe1gb",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "pdpe1gb",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4",
-+      "typename": "Opteron_G4-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "pdpe1gb",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "abm",
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3",
-+      "typename": "Opteron_G3-x86_64-cpu",
-+      "unavailable-features": [
-+        "abm",
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-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-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-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": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "avx512f",
-+        "adx",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill",
-+      "typename": "KnightsMill-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "avx512f",
-+        "adx",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "f16c",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "f16c",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "f16c",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge",
-+      "typename": "IvyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "f16c",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v3",
-+      "typename": "Icelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "pdpe1gb",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "taa-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "pdpe1gb",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "pdpe1gb",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "pdpe1gb",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "pdpe1gb",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "mpx",
-+        "mpx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "adx",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "abm",
-+        "wbnoinvd",
-+        "avx",
-+        "mpx",
-+        "mpx",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX",
-+      "typename": "Haswell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell",
-+      "typename": "Haswell-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome-v1",
-+      "typename": "EPYC-Rome-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome",
-+      "typename": "EPYC-Rome-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-IBPB",
-+      "typename": "EPYC-IBPB-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC",
-+      "typename": "EPYC-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "adx",
-+        "mmxext",
-+        "fxsr-opt",
-+        "pdpe1gb",
-+        "cr8legacy",
-+        "abm",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mpx",
-+        "pdpe1gb",
-+        "mpx",
-+        "mpx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "mpx",
-+        "pdpe1gb",
-+        "mpx",
-+        "mpx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake-v1",
-+      "typename": "Cooperlake-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "taa-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake",
-+      "typename": "Cooperlake-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "taa-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "mpx",
-+        "avx512f",
-+        "avx512dq",
-+        "adx",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "pdpe1gb",
-+        "abm",
-+        "avx",
-+        "mpx",
-+        "mpx",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX",
-+      "typename": "Broadwell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell",
-+      "typename": "Broadwell-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "avx",
-+        "f16c",
-+        "bmi1",
-+        "hle",
-+        "avx2",
-+        "bmi2",
-+        "invpcid",
-+        "rtm",
-+        "adx",
-+        "abm",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486-v1",
-+      "typename": "486-v1-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": "definitions"
-+}
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362.sig b/tests/cputestdata/x86_64-cpuid-Atom-P5362.sig
-new file mode 100644
-index 0000000000..788ae6efba
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362.sig
-@@ -0,0 +1,4 @@
-+080665
-+family:     6 (0x06)
-+model:    134 (0x86)
-+stepping:   5 (0x05)
-diff --git a/tests/cputestdata/x86_64-cpuid-Atom-P5362.xml b/tests/cputestdata/x86_64-cpuid-Atom-P5362.xml
-new file mode 100644
-index 0000000000..4fe97c0866
---- /dev/null
-+++ b/tests/cputestdata/x86_64-cpuid-Atom-P5362.xml
-@@ -0,0 +1,61 @@
-+<!-- Intel Atom(R) P5362 processor -->
-+<cpudata arch='x86'>
-+  <cpuid eax_in='0x00000000' ecx_in='0x00' eax='0x0000001b' ebx='0x756e6547' ecx='0x6c65746e' edx='0x49656e69'/>
-+  <cpuid eax_in='0x00000001' ecx_in='0x00' eax='0x00080665' ebx='0x02800800' ecx='0x4ff8ebff' edx='0xbfebfbff'/>
-+  <cpuid eax_in='0x00000002' ecx_in='0x00' eax='0x00feff01' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000003' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x00' eax='0xfc000121' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x01' eax='0xfc000122' ebx='0x01c0003f' ecx='0x0000003f' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x02' eax='0xfc01c143' ebx='0x0440003f' ecx='0x00000fff' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000004' ecx_in='0x03' eax='0xfc1fc163' ebx='0x04c0003f' ecx='0x00002fff' edx='0x00000004'/>
-+  <cpuid eax_in='0x00000005' ecx_in='0x00' eax='0x00000040' ebx='0x00000040' ecx='0x00000003' edx='0x00001020'/>
-+  <cpuid eax_in='0x00000006' ecx_in='0x00' eax='0x00000075' ebx='0x00000002' ecx='0x00000009' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000007' ecx_in='0x00' eax='0x00000000' ebx='0x2394b2c3' ecx='0x1a400124' edx='0xfc000400'/>
-+  <cpuid eax_in='0x00000008' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000009' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000a' ecx_in='0x00' eax='0x07300405' ebx='0x00000000' ecx='0x00000007' edx='0x00008603'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x00' eax='0x00000001' ebx='0x00000001' ecx='0x00000100' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000b' ecx_in='0x01' eax='0x00000007' ebx='0x00000018' ecx='0x00000201' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000c' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x00' eax='0x00000003' ebx='0x00000240' ecx='0x00000240' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x01' eax='0x0000000f' ebx='0x00000240' ecx='0x00000100' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000d' ecx_in='0x08' eax='0x00000080' ebx='0x00000000' ecx='0x00000001' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000e' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x00' eax='0x00000000' ebx='0x0000002f' ecx='0x00000000' edx='0x00000002'/>
-+  <cpuid eax_in='0x0000000f' ecx_in='0x01' eax='0x00000008' ebx='0x00003000' ecx='0x0000002f' edx='0x00000007'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x00' eax='0x00000000' ebx='0x0000000e' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x01' eax='0x00000013' ebx='0x000c0000' ecx='0x00000004' edx='0x0000000d'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x02' eax='0x00000011' ebx='0x00000000' ecx='0x00000004' edx='0x0000000d'/>
-+  <cpuid eax_in='0x00000010' ecx_in='0x03' eax='0x00000059' ebx='0x00000000' ecx='0x00000004' edx='0x0000000d'/>
-+  <cpuid eax_in='0x00000011' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000012' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000013' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x00' eax='0x00000001' ebx='0x0000007f' ecx='0x80000007' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000014' ecx_in='0x01' eax='0x02490002' ebx='0x003fffff' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000015' ecx_in='0x00' eax='0x00000002' ebx='0x000000b0' ecx='0x017d7840' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000016' ecx_in='0x00' eax='0x00000898' ebx='0x00000898' ecx='0x00000064' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000017' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x00' eax='0x00000005' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x01' eax='0x00000000' ebx='0x00300001' ecx='0x00000001' edx='0x00000121'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x02' eax='0x00000000' ebx='0x00040001' ecx='0x00000100' edx='0x00000043'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x03' eax='0x00000000' ebx='0x00040006' ecx='0x00000010' edx='0x00000043'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x04' eax='0x00000000' ebx='0x00300001' ecx='0x00000001' edx='0x00000122'/>
-+  <cpuid eax_in='0x00000018' ecx_in='0x05' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x00000019' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001a' ecx_in='0x00' eax='0x20000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x0000001b' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x20000000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000000' ecx_in='0x00' eax='0x80000008' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000001' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000101' edx='0x28100800'/>
-+  <cpuid eax_in='0x80000002' ecx_in='0x00' eax='0x65746e49' ebx='0x7441206c' ecx='0x52286d6f' edx='0x35502029'/>
-+  <cpuid eax_in='0x80000003' ecx_in='0x00' eax='0x20323633' ebx='0x636f7270' ecx='0x6f737365' edx='0x00000072'/>
-+  <cpuid eax_in='0x80000004' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000005' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000006' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x12008040' edx='0x00000000'/>
-+  <cpuid eax_in='0x80000007' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000100'/>
-+  <cpuid eax_in='0x80000008' ecx_in='0x00' eax='0x0000302a' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0x80860000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <cpuid eax_in='0xc0000000' ecx_in='0x00' eax='0x00000000' ebx='0x00000000' ecx='0x00000000' edx='0x00000000'/>
-+  <msr index='0xcf' edx='0x00000000' eax='0x00000060'/>
-+  <msr index='0x10a' edx='0x001a8c7f' eax='0xa080036b'/>
-+</cpudata>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-docs-Describe-protected-virtualization-guest-setup.patch b/SOURCES/libvirt-docs-Describe-protected-virtualization-guest-setup.patch
deleted file mode 100644
index b7e2705..0000000
--- a/SOURCES/libvirt-docs-Describe-protected-virtualization-guest-setup.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-From 026160bc76bab26772c2a80bd50ae55119e3b60b Mon Sep 17 00:00:00 2001
-Message-Id: <026160bc76bab26772c2a80bd50ae55119e3b60b@dist-git>
-From: Viktor Mihajlovski <mihajlov@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:23 +0200
-Subject: [PATCH] docs: Describe protected virtualization guest setup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Protected virtualization/IBM Secure Execution for Linux protects
-guest memory and state from the host.
-
-Add some basic information about technology and a brief guide
-on setting up secure guests with libvirt.
-
-Signed-off-by: Viktor Mihajlovski <mihajlov@linux.ibm.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Reviewed-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit f0d0cd6179709461b026f24569a688065e90d766)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <cf598d01d242bb56e64e14bfc32cece69341d949.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/kbase.html.in                 |   3 +
- docs/kbase/s390_protected_virt.rst | 189 +++++++++++++++++++++++++++++
- 2 files changed, 192 insertions(+)
- create mode 100644 docs/kbase/s390_protected_virt.rst
-
-diff --git a/docs/kbase.html.in b/docs/kbase.html.in
-index f2975960f6..05773db16d 100644
---- a/docs/kbase.html.in
-+++ b/docs/kbase.html.in
-@@ -14,6 +14,9 @@
-         <dt><a href="kbase/secureusage.html">Secure usage</a></dt>
-         <dd>Secure usage of the libvirt APIs</dd>
- 
-+        <dt><a href="kbase/s390_protected_virt.html">Protected virtualization on s390</a></dt>
-+        <dd>Running secure s390 guests with IBM Secure Execution</dd>
-+
-         <dt><a href="kbase/launch_security_sev.html">Launch security</a></dt>
-         <dd>Securely launching VMs with AMD SEV</dd>
- 
-diff --git a/docs/kbase/s390_protected_virt.rst b/docs/kbase/s390_protected_virt.rst
-new file mode 100644
-index 0000000000..f38d16d743
---- /dev/null
-+++ b/docs/kbase/s390_protected_virt.rst
-@@ -0,0 +1,189 @@
-+================================
-+Protected Virtualization on s390
-+================================
-+
-+.. contents::
-+
-+Overview
-+========
-+
-+Protected virtualization, also known as IBM Secure Execution is a
-+hardware-based privacy protection technology for s390x (IBM Z).
-+It allows to execute virtual machines such that the host system
-+has no access to a VM's state and memory contents.
-+
-+Unlike other similar technologies, the memory of a running guest
-+is not encrypted but protected by hardware access controls, which
-+may only be manipulated by trusted system firmware, called
-+ultravisor.
-+
-+For the cases where the host needs access to guest memory (e.g. for
-+paging), it can request pages to be exported to it. The exported page
-+will be encrypted with a unique key for the running guest by the
-+ultravisor. The ultravisor also computes an integrity value for
-+the page, and stores it in a special table, together with the page
-+index and a counter. This way it can verify the integrity of
-+the page content upon re-import into the guest.
-+
-+In other cases it may be necessary for a guest to grant the host access
-+to dedicated memory regions (e.g. for I/O). The guest can request
-+that the ultravisor removes the memory protection from individual
-+pages, so that they can be shared with the host. Likewise, the
-+guest can undo the sharing.
-+
-+A secure guest will initially start in a regular non-protected VM.
-+The start-up is controlled by a small bootstrap program loaded
-+into memory together with encrypted operating system components and
-+a control structure (the PV header).
-+The operating system components (e.g. Linux kernel, initial RAM
-+file system, kernel parameters) are encrypted and integrity
-+protected. The component encryption keys and integrity values are
-+stored in the PV header.
-+The PV header is wrapped with a public key belonging to a specific
-+system (in fact it can be wrapped with multiple such keys). The
-+matching private key is only accessible by trusted hardware and
-+firmware in that specific system.
-+Consequently, such a secure guest boot image can only be run on the
-+systems it has been prepared for. Its contents can't be decrypted
-+without access to the private key and it can't be modified as
-+it is integrity protected.
-+
-+Host Requirements
-+=================
-+
-+IBM Secure Execution for Linux has some hardware and firmware
-+requirements. The system hardware must be an IBM z15 (or newer),
-+or an IBM LinuxONE III (or newer).
-+
-+It is also necessary that the IBM Secure Execution feature is
-+enabled for that system. With libvirt >= 6.5.0 you can run
-+``libvirt-host--validate`` or otherwise check for facility '158', e.g.
-+
-+::
-+
-+   $ grep facilities /proc/cpuinfo | grep 158
-+
-+The kernel must include the protected virtualization support
-+which can be verified by checking for the presence of directory
-+``/sys/firmware/uv``. It will only be present when both the
-+hardware and the kernel support are available.
-+
-+Finally, the host operating system must donate some memory to
-+the ultravisor needed to store memory security information.
-+This is achieved by specifying the following kernel command
-+line parameter to the host boot configuration
-+
-+::
-+
-+   prot_virt=1
-+
-+
-+Guest Requirements
-+==================
-+
-+Guest Boot
-+----------
-+
-+To start a guest in protected virtualization secure mode, the
-+boot image must have been prepared first with the program
-+``genprotimg`` using the correct public key for this host.
-+``genprotimg`` is part of the package ``s390-tools``, or
-+``s390-utils``, depending on the Linux distribution being used.
-+It can also be found at
-+`<https://github.com/ibm-s390-tools/s390-tools/tree/master/genprotimg>`_
-+
-+The guests have to be configured to use the host CPU model, which
-+must contain the ``unpack`` facility indicating ultravisor guest support.
-+
-+With the following command it's possible to check whether the host
-+CPU model satisfies the requirement
-+
-+::
-+
-+   $ virsh domcapabilities | grep unpack
-+
-+which should return
-+
-+::
-+
-+   <feature policy='require' name='unpack'/>
-+
-+Note that on hosts with libvirt < 6.5.0 if the check fails despite
-+the host system actually supporting protected virtualization guests,
-+this can be caused by a stale libvirt capabilities cache.
-+To recover, run the following commands
-+
-+::
-+
-+   $ systemctl stop libvirtd
-+   $ rm /var/cache/libvirt/qemu/capabilities/*.xml
-+   $ systemctl start libvirtd
-+
-+
-+Guest I/O
-+---------
-+
-+Protected virtualization guests support I/O using virtio devices.
-+As the virtio data structures of secure guests are not accessible
-+by the host, it is necessary to use shared memory ('bounce buffers').
-+
-+To enable virtio devices to use shared buffers, it is necessary
-+to configure them with platform_iommu enabled. This can done by adding
-+``iommu='on'`` to the driver element of a virtio device definition in the
-+guest's XML, e.g.
-+
-+::
-+
-+   <interface type='network'>
-+     <source network='default'/>
-+     <model type='virtio'/>
-+     <driver name='vhost' iommu='on'/>
-+   </interface>
-+
-+It is mandatory to define all virtio bus devices in this way to
-+prevent the host from attempting to access protected memory.
-+Ballooning will not work and is fenced by QEMU. It should be
-+disabled by specifying
-+
-+::
-+
-+   <memballoon model='none'/>
-+
-+Finally, the guest Linux must be instructed to allocate I/O
-+buffers using memory shared between host and guest using SWIOTLB.
-+This is done by adding ``swiotlb=nnn`` to the guest's kernel command
-+line string, where ``nnn`` stands for the number of statically
-+allocated 2K entries. A commonly used value for swiotlb is 262144.
-+
-+Example guest definition
-+========================
-+
-+Minimal domain XML for a protected virtualization guest, essentially
-+it's mostly about the ``iommu`` property
-+
-+::
-+
-+   <domain type='kvm'>
-+     <name>protected</name>
-+     <memory unit='KiB'>2048000</memory>
-+     <currentMemory unit='KiB'>2048000</currentMemory>
-+     <vcpu>1</vcpu>
-+     <os>
-+       <type arch='s390x'>hvm</type>
-+     </os>
-+     <cpu mode='host-model'/>
-+     <devices>
-+       <disk type='file' device='disk'>
-+         <driver name='qemu' type='qcow2' cache='none' io='native' iommu='on'>
-+         <source file='/var/lib/libvirt/images/protected.qcow2'/>
-+         <target dev='vda' bus='virtio'/>
-+       </disk>
-+       <interface type='network'>
-+         <driver iommu='on'/>
-+         <source network='default'/>
-+         <model type='virtio'/>
-+       </interface>
-+       <console type='pty'/>
-+       <memballoon model='none'/>
-+     </devices>
-+   </domain>
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-docs-Document-the-new-slices-sub-element-of-disk-s-source.patch b/SOURCES/libvirt-docs-Document-the-new-slices-sub-element-of-disk-s-source.patch
deleted file mode 100644
index 349ee96..0000000
--- a/SOURCES/libvirt-docs-Document-the-new-slices-sub-element-of-disk-s-source.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 0f126297ca984aa2ef145e2a703fff3dc31c53db Mon Sep 17 00:00:00 2001
-Message-Id: <0f126297ca984aa2ef145e2a703fff3dc31c53db@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:19 +0100
-Subject: [PATCH] docs: Document the new <slices> sub-element of disk's
- <source>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We are going to add support for specifying offset and size attributes
-which will allow controling where the image and where the guest data
-itself starts in the source of the disk. This will be represented by
-a <slices> element filled with either a <slice type='storage'> for the
-offset of the image format data.
-
-Add the XML documentation and RNG schema.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 44f0f76890c6b53a893ffc370836794d74317c34)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <9f5488f2e0e5b6d7df386fa428f7779346cbcff4.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in     | 13 +++++++++++++
- docs/schemas/domaincommon.rng | 19 +++++++++++++++++++
- 2 files changed, 32 insertions(+)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index ec48ed77a5..5dbb8b59cf 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2878,6 +2878,9 @@
-   &lt;disk type='block' device='lun'&gt;
-     &lt;driver name='qemu' type='raw'/&gt;
-     &lt;source dev='/dev/sda'&gt;
-+      &lt;slices&gt;
-+        &lt;slice type='storage' offset='12345' size='123'/&gt;
-+      &lt;/slices&gt;
-       &lt;reservations managed='no'&gt;
-         &lt;source type='unix' path='/path/to/qemu-pr-helper' mode='client'/&gt;
-       &lt;/reservations&gt;
-@@ -3360,6 +3363,16 @@
-             controller.
-             <span class="since">Since 6.0.0</span>
-           </dd>
-+          <dt><code>slices</code></dt>
-+          <dd>The <code>slices</code> element using its <code>slice</code>
-+            sub-elements allows configuring offset and size of either the
-+            location of the image format (<code>slice type='storage'</code>)
-+            inside the storage source or the guest data inside the image format
-+            container (future expansion).
-+
-+            The <code>offset</code> and <code>size</code> values are in bytes.
-+            <span class="since">Since 6.1.0</span>
-+          </dd>
-         </dl>
- 
-         <p>
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 19476a2735..38aef19e89 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1596,12 +1596,31 @@
-     </optional>
-   </define>
- 
-+  <define name="diskSourceSlice">
-+    <attribute name='offset'>
-+      <ref name="positiveInteger"/>
-+    </attribute>
-+    <attribute name='size'>
-+      <ref name="positiveInteger"/>
-+    </attribute>
-+  </define>
-+
-   <define name="diskSourceCommon">
-     <optional>
-       <attribute name="index">
-         <ref name="positiveInteger"/>
-       </attribute>
-     </optional>
-+    <optional>
-+      <element name='slices'>
-+        <element name='slice'>
-+          <attribute name='type'>
-+            <value>storage</value>
-+          </attribute>
-+          <ref name="diskSourceSlice"/>
-+        </element>
-+      </element>
-+    </optional>
-   </define>
- 
-   <define name="diskSource">
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-docs-List-the-armvtimer-timer-among-all-others.patch b/SOURCES/libvirt-docs-List-the-armvtimer-timer-among-all-others.patch
deleted file mode 100644
index e55ca95..0000000
--- a/SOURCES/libvirt-docs-List-the-armvtimer-timer-among-all-others.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 5cef3caf8b82a15405eb7d08c96c346451cab7f7 Mon Sep 17 00:00:00 2001
-Message-Id: <5cef3caf8b82a15405eb7d08c96c346451cab7f7@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 14:50:34 +0100
-Subject: [PATCH] docs: List the armvtimer timer among all others
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 1d742a8772848a72667e1e5e0fa0841abf0af647)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214135034.719753-1-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 98a811bd09..2b6a3fb921 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2466,9 +2466,9 @@
-             "platform" (currently unsupported),
-             "hpet" (libxl, xen, qemu), "kvmclock" (qemu),
-             "pit" (qemu), "rtc" (qemu), "tsc" (libxl, qemu -
--            <span class="since">since 3.2.0</span>)
--            or "hypervclock"
--            (qemu - <span class="since">since 1.2.2</span>).
-+            <span class="since">since 3.2.0</span>), "hypervclock"
-+            (qemu - <span class="since">since 1.2.2</span>) or
-+            "armvtimer" (qemu - <span class="since">since 6.1.0</span>).
- 
-             The <code>hypervclock</code> timer adds support for the
-             reference time counter and the reference page for iTSC
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-docs-Update-AMD-launch-secure-description.patch b/SOURCES/libvirt-docs-Update-AMD-launch-secure-description.patch
deleted file mode 100644
index 61b2820..0000000
--- a/SOURCES/libvirt-docs-Update-AMD-launch-secure-description.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From b89b5b577ae05a9f453a55b8e7cbd81db27e95df Mon Sep 17 00:00:00 2001
-Message-Id: <b89b5b577ae05a9f453a55b8e7cbd81db27e95df@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:22 +0200
-Subject: [PATCH] docs: Update AMD launch secure description
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Update document with changes in qemu capability caching and the added
-secure guest support checking for AMD SEV in virt-host-validate.
-
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 2c3ffa37284b9fa3d1e6c369fa2bb71c6f6dd92a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1229877019008ac6f0135296af502e596c3e30e5.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/kbase/launch_security_sev.rst | 9 ++++++---
- 1 file changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/docs/kbase/launch_security_sev.rst b/docs/kbase/launch_security_sev.rst
-index 65f258587d..19b978481a 100644
---- a/docs/kbase/launch_security_sev.rst
-+++ b/docs/kbase/launch_security_sev.rst
-@@ -30,8 +30,11 @@ Enabling SEV on the host
- ========================
- 
- Before VMs can make use of the SEV feature you need to make sure your
--AMD CPU does support SEV. You can check whether SEV is among the CPU
--flags with:
-+AMD CPU does support SEV. You can run ``libvirt-host-validate``
-+(libvirt >= 6.5.0) to check if your host supports secure guests or you
-+can follow the manual checks below.
-+
-+You can manually check whether SEV is among the CPU flags with:
- 
- ::
- 
-@@ -109,7 +112,7 @@ following:
-      </features>
-    </domainCapabilities>
- 
--Note that if libvirt was already installed and libvirtd running before
-+Note that if libvirt (<6.5.0) was already installed and libvirtd running before
- enabling SEV in the kernel followed by the host reboot you need to force
- libvirtd to re-probe both the host and QEMU capabilities. First stop
- libvirtd:
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-docs-add-virtiofs-kbase.patch b/SOURCES/libvirt-docs-add-virtiofs-kbase.patch
deleted file mode 100644
index 99e20ba..0000000
--- a/SOURCES/libvirt-docs-add-virtiofs-kbase.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-From ee1081b3b87179b5b9ed6a1d14694962fa04a5fd Mon Sep 17 00:00:00 2001
-Message-Id: <ee1081b3b87179b5b9ed6a1d14694962fa04a5fd@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:40 +0100
-Subject: [PATCH] docs: add virtiofs kbase
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a document describing the usage of virtiofs.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit aecf1f5d702ad710aed99a688f38f05cc304b03a)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-
-Conflicts: * downstream is missing the link to qemu-passthrough-security
-  docs/kbase.html.in
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <a037a8c8db2e3be9a54467859b700a9d7ab15429.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/kbase.html.in      |   3 +
- docs/kbase/virtiofs.rst | 147 ++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 150 insertions(+)
- create mode 100644 docs/kbase/virtiofs.rst
-
-diff --git a/docs/kbase.html.in b/docs/kbase.html.in
-index c156414c41..7d6caf3cb1 100644
---- a/docs/kbase.html.in
-+++ b/docs/kbase.html.in
-@@ -29,6 +29,9 @@
-         <dt><a href="kbase/backing_chains.html">Backing chain management</a></dt>
-         <dd>Explanation of how disk backing chain specification impacts libvirt's
-           behaviour and basic troubleshooting steps of disk problems.</dd>
-+
-+        <dt><a href="kbase/virtiofs.html">Virtio-FS</a></dt>
-+        <dd>Share a filesystem between the guest and the host</dd>
-       </dl>
-     </div>
- 
-diff --git a/docs/kbase/virtiofs.rst b/docs/kbase/virtiofs.rst
-new file mode 100644
-index 0000000000..68fbafcf37
---- /dev/null
-+++ b/docs/kbase/virtiofs.rst
-@@ -0,0 +1,147 @@
-+============================
-+Sharing files with Virtio-FS
-+============================
-+
-+.. contents::
-+
-+=========
-+Virtio-FS
-+=========
-+
-+Virtio-FS is a shared file system that lets virtual machines access
-+a directory tree on the host. Unlike existing approaches, it
-+is designed to offer local file system semantics and performance.
-+
-+See https://virtio-fs.gitlab.io/
-+
-+==========
-+Host setup
-+==========
-+
-+The host-side virtiofsd daemon, like other vhost-user backed devices,
-+requires shared memory between the host and the guest. As of QEMU 4.2, this
-+requires specifying a NUMA topology for the guest and explicitly specifying
-+a memory backend. Multiple options are available:
-+
-+Either of the following:
-+
-+* Use file-backed memory
-+
-+  Configure the directory where the files backing the memory will be stored
-+  with the ``memory_backing_dir`` option in ``/etc/libvirt/qemu.conf``
-+
-+  ::
-+
-+    # This directory is used for memoryBacking source if configured as file.
-+    # NOTE: big files will be stored here
-+    memory_backing_dir = "/dev/shm/"
-+
-+* Use hugepage-backed memory
-+
-+  Make sure there are enough huge pages allocated for the requested guest memory.
-+  For example, for one guest with 2 GiB of RAM backed by 2 MiB hugepages:
-+
-+  ::
-+
-+      # virsh allocpages 2M 1024
-+
-+===========
-+Guest setup
-+===========
-+
-+#. Specify the NUMA topology
-+
-+   in the domain XML of the guest.
-+   For the simplest one-node topology for a guest with 2GiB of RAM and 8 vCPUs:
-+
-+   ::
-+
-+      <domain>
-+        ...
-+        <cpu ...>
-+          <numa>
-+            <cell id='0' cpus='0-7' memory='2' unit='GiB' memAccess='shared'/>
-+          </numa>
-+        </cpu>
-+       ...
-+      </domain>
-+
-+   Note that the CPU element might already be specified and only one is allowed.
-+
-+#. Specify the memory backend
-+
-+   Either of the following:
-+
-+   * File-backed memory
-+
-+     ::
-+
-+        <domain>
-+          ...
-+          <memoryBacking>
-+            <access mode='shared'/>
-+          </memoryBacking>
-+          ...
-+        </domain>
-+
-+     This will create a file in the directory specified in ``qemu.conf``
-+
-+   * Hugepage-backed memory
-+
-+     ::
-+
-+        <domain>
-+          ...
-+          <memoryBacking>
-+            <hugepages>
-+              <page size='2' unit='M'/>
-+            </hugepages>
-+            <access mode='shared'/>
-+          </memoryBacking>
-+          ...
-+        </domain>
-+
-+#. Add the ``vhost-user-fs`` QEMU device via the ``filesystem`` element
-+
-+   ::
-+
-+      <domain>
-+        ...
-+        <devices>
-+          ...
-+          <filesystem type='mount' accessmode='passthrough'>
-+            <driver type='virtiofs'/>
-+            <source dir='/path'/>
-+            <target dir='mount_tag'/>
-+          </filesystem>
-+          ...
-+        </devices>
-+      </domain>
-+
-+   Note that despite its name, the ``target dir`` is actually a mount tag and does
-+   not have to correspond to the desired mount point in the guest.
-+
-+   So far, ``passthrough`` is the only supported access mode and it requires
-+   running the ``virtiofsd`` daemon as root.
-+
-+#. Boot the guest and mount the filesystem
-+
-+   ::
-+
-+      guest# mount -t virtiofs mount_tag /mnt/mount/path
-+
-+   Note: this requires virtiofs support in the guest kernel (Linux v5.4 or later)
-+
-+===================
-+Optional parameters
-+===================
-+
-+More optional elements can be specified
-+
-+::
-+
-+  <driver type='virtiofs' queue='1024'/>
-+  <binary path='/usr/libexec/virtiofsd' xattr='on'>
-+    <cache mode='always'/>
-+    <lock posix_lock='on' flock='on'/>
-+  </binary>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-docs-document-interface-subelement-teaming.patch b/SOURCES/libvirt-docs-document-interface-subelement-teaming.patch
deleted file mode 100644
index 9271d56..0000000
--- a/SOURCES/libvirt-docs-document-interface-subelement-teaming.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-From a7ad591f6a6b86b24b1ed030cc9b1ca5b3bf4346 Mon Sep 17 00:00:00 2001
-Message-Id: <a7ad591f6a6b86b24b1ed030cc9b1ca5b3bf4346@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 30 Jan 2020 14:12:44 -0500
-Subject: [PATCH] docs: document <interface> subelement <teaming>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit f0f34056ab26eaa9f903a51cd1fa155088fd640f)
-
-Conflicts:
-   docs/news.xml - feature is in release 6.1.0 upstream, but
-      that release doesn't exist downstream.
-
-https://bugzilla.redhat.com/1693587
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200130191244.24174-7-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/formatdomain.html.in | 101 ++++++++++++++++++++++++++++++++++++++
- docs/news.xml             |  28 +++++++++++
- 2 files changed, 129 insertions(+)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 4db9c292b7..98a811bd09 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -5873,6 +5873,107 @@
- &lt;/devices&gt;
- ...</pre>
- 
-+    <h5><a id="elementsTeaming">Teaming a virtio/hostdev NIC pair</a></h5>
-+
-+    <p>
-+      <span class="since">Since 6.1.0 (QEMU and KVM only, requires
-+        QEMU 4.2.0 or newer axnd a guest virtio-net driver supporting
-+        the "failover" feature, such as the one included in Linux
-+        kernel 4.18 and newer)
-+      </span>
-+      The <code>&lt;teaming&gt;</code> element of two interfaces can
-+      be used to connect them as a team/bond device in the guest
-+      (assuming proper support in the hypervisor and the guest
-+      network driver).
-+    </p>
-+
-+<pre>
-+...
-+&lt;devices&gt;
-+  &lt;interface type='network'&gt;
-+    &lt;source network='mybridge'/&gt;
-+    &lt;mac address='00:11:22:33:44:55'/&gt;
-+    &lt;model type='virtio'/&gt;
-+    &lt;teaming type='persistent'/&gt;
-+    &lt;alias name='ua-backup0'/&gt;
-+  &lt;/interface&gt;
-+  &lt;interface type='network'&gt;
-+    &lt;source network='hostdev-pool'/&gt;
-+    &lt;mac address='00:11:22:33:44:55'/&gt;
-+    &lt;model type='virtio'/&gt;
-+    &lt;teaming type='transient' persistent='ua-backup0'/&gt;
-+  &lt;/interface&gt;
-+&lt;/devices&gt;
-+...</pre>
-+
-+    <p>
-+      The <code>&lt;teaming&gt;</code> element required
-+      attribute <code>type</code> will be set to
-+      either <code>"persistent"</code> to indicate a device that
-+      should always be present in the domain,
-+      or <code>"transient"</code> to indicate a device that may
-+      periodically be removed, then later re-added to the domain. When
-+      type="transient", there should be a second attribute
-+      to <code>&lt;teaming&gt;</code> called <code>"persistent"</code>
-+      - this attribute should be set to the alias name of the other
-+      device in the pair (the one that has <code>&lt;teaming
-+      type="persistent'/&gt;</code>).
-+    </p>
-+    <p>
-+      In the particular case of QEMU,
-+      libvirt's <code>&lt;teaming&gt;</code> element is used to setup
-+      a virtio-net "failover" device pair. For this setup, the
-+      persistent device must be an interface with <code>&lt;model
-+      type="virtio"/&gt;</code>, and the transient device must
-+      be <code>&lt;interface type='hostdev'/&gt;</code>
-+      (or <code>&lt;interface type='network'/&gt;</code> where the
-+      referenced network defines a pool of SRIOV VFs). The guest will
-+      then have a simple network team/bond device made of the virtio
-+      NIC + hostdev NIC pair. In this configuration, the
-+      higher-performing hostdev NIC will normally be preferred for all
-+      network traffic, but when the domain is migrated, QEMU will
-+      automatically unplug the VF from the guest, and then hotplug a
-+      similar device once migration is completed; while migration is
-+      taking place, network traffic will use the virtio NIC. (Of
-+      course the emulated virtio NIC and the hostdev NIC must be
-+      connected to the same subnet for bonding to work properly).
-+    </p>
-+    <p>
-+      NB1: Since you must know the alias name of the virtio NIC when
-+      configuring the hostdev NIC, it will need to be manually set in
-+      the virtio NIC's configuration (as with all other manually set
-+      alias names, this means it must start with "ua-").
-+    </p>
-+    <p>
-+      NB2: Currently the only implementation of the guest OS
-+      virtio-net driver supporting virtio-net failover requires that
-+      the MAC addresses of the virtio and hostdev NIC must
-+      match. Since that may not always be a requirement in the future,
-+      libvirt doesn't enforce this limitation - it is up to the
-+      person/management application that is creating the configuration
-+      to assure the MAC addresses of the two devices match.
-+    </p>
-+    <p>
-+      NB3: Since the PCI addresses of the SRIOV VFs on the hosts that
-+      are the source and destination of the migration will almost
-+      certainly be different, either higher level management software
-+      will need to modify the <code>&lt;source&gt;</code> of the
-+      hostdev NIC (<code>&lt;interface type='hostdev'&gt;</code>) at
-+      the start of migration, or (a simpler solution) the
-+      configuration will need to use a libvirt "hostdev" virtual
-+      network that maintains a pool of such devices, as is implied in
-+      the example's use of the libvirt network named "hostdev-pool" -
-+      as long as the hostdev network pools on both hosts have the same
-+      name, libvirt itself will take care of allocating an appropriate
-+      device on both ends of the migration. Similarly the XML for the
-+      virtio interface must also either work correctly unmodified on
-+      both the source and destination of the migration (e.g. by
-+      connecting to the same bridge device on both hosts, or by using
-+      the same virtual network), or the management software must
-+      properly modify the interface XML during migration so that the
-+      virtio device remains connected to the same network segment
-+      before and after migration.
-+    </p>
- 
-     <h5><a id="elementsNICSMulticast">Multicast tunnel</a></h5>
- 
-diff --git a/docs/news.xml b/docs/news.xml
-index 731f010297..408ffc8518 100644
---- a/docs/news.xml
-+++ b/docs/news.xml
-@@ -65,6 +65,34 @@
-       </change>
-     </section>
-     <section title="New features">
-+      <change>
-+        <summary>
-+          support for virtio+hostdev NIC &lt;teaming&gt;
-+        </summary>
-+        <description>
-+          QEMU 4.2.0 and later, combined with a sufficiently recent
-+          guest virtio-net driver (e.g. the driver included in Linux
-+          kernel 4.18 and later), supports setting up a simple network
-+          bond device comprised of one virtio emulated NIC and one
-+          hostdev NIC (which must be an SRIOV VF). (in QEMU, this is
-+          known as the "virtio failover" feature). The allure of this
-+          setup is that the bond will always favor the hostdev device,
-+          providing better performance, until the guest is migrated -
-+          at that time QEMU will automatically unplug the hostdev NIC
-+          and the bond will send all traffic via the virtio NIC until
-+          migration is completed, then QEMU on the destination side
-+          will hotplug a new hostdev NIC and the bond will switch back
-+          to using the hostdev for network traffic. The result is that
-+          guests desiring the extra performance of a hostdev NIC are
-+          now migratable without network downtime (performance is just
-+          degraded during migration) and without requiring a
-+          complicated bonding configuration in the guest OS network
-+          config and complicated unplug/replug logic in the management
-+          application on the host - it can instead all be accomplished
-+          in libvirt with the interface &lt;teaming&gt; subelement
-+          "type" and "persistent" attributes.
-+        </description>
-+      </change>
-       <change>
-         <summary>
-           new PCI hostdev address type: unassigned
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-docs-domaincaps-Mention-VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA.patch b/SOURCES/libvirt-docs-domaincaps-Mention-VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA.patch
deleted file mode 100644
index d98867b..0000000
--- a/SOURCES/libvirt-docs-domaincaps-Mention-VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 6a852bbf144600e756877ae98736e214a8e8d0cb Mon Sep 17 00:00:00 2001
-Message-Id: <6a852bbf144600e756877ae98736e214a8e8d0cb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:28 +0100
-Subject: [PATCH] docs: domaincaps: Mention
- VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The flag for the virDomainUndefine API is supported even if we report
-that <backup supported='no'/>. Mention it in the docs.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-(cherry picked from commit 7d7e7e2c197782ce06525b0a63cd43e452c3a711)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <bfb56ef76cee8e5e3698df9d7deceb93e5c83b97.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomaincaps.html.in | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in
-index 6bf7a1c17a..2ac8632c69 100644
---- a/docs/formatdomaincaps.html.in
-+++ b/docs/formatdomaincaps.html.in
-@@ -565,7 +565,10 @@
- 
-     <p>Reports whether the hypervisor supports the backup, checkpoint, and
-     related features. (<code>virDomainBackupBegin</code>,
--    <code>virDomainCheckpointCreateXML</code> etc).
-+    <code>virDomainCheckpointCreateXML</code> etc). The presence of the
-+    <code>backup</code> element even if <code>supported='no'</code> implies that
-+    the <code>VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA</code> flag for
-+    <code>virDomainUndefine</code> is supported.
-     </p>
- 
-     <h4><a id="elementsSEV">SEV capabilities</a></h4>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-docs-fix-a-typo.patch b/SOURCES/libvirt-docs-fix-a-typo.patch
deleted file mode 100644
index 9394ba7..0000000
--- a/SOURCES/libvirt-docs-fix-a-typo.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From afd2a8af9d8cb356dcff17791371f4794be368d2 Mon Sep 17 00:00:00 2001
-Message-Id: <afd2a8af9d8cb356dcff17791371f4794be368d2@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 21 Feb 2020 14:32:10 +0100
-Subject: [PATCH] docs: fix a typo
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-s/axnd/and/
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Fixes: f0f34056ab26eaa9f903a51cd1fa155088fd640f
-(cherry picked from commit 5b63cb5abff09882feda8e333285259aecc8e9e8)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1805742
-Message-Id: <f5919e9de65a7f593862ddcf1fc50b6f0b7e5bc0.1582291906.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/formatdomain.html.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 5dbb8b59cf..50914a5207 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -5891,7 +5891,7 @@
- 
-     <p>
-       <span class="since">Since 6.1.0 (QEMU and KVM only, requires
--        QEMU 4.2.0 or newer axnd a guest virtio-net driver supporting
-+        QEMU 4.2.0 or newer and a guest virtio-net driver supporting
-         the "failover" feature, such as the one included in Linux
-         kernel 4.18 and newer)
-       </span>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-docs-formatdomain-Close-source-on-one-of-disk-examples.patch b/SOURCES/libvirt-docs-formatdomain-Close-source-on-one-of-disk-examples.patch
deleted file mode 100644
index 8fb7ca2..0000000
--- a/SOURCES/libvirt-docs-formatdomain-Close-source-on-one-of-disk-examples.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 1a2f74b8b9e507b17d49a3060d29910facba9d89 Mon Sep 17 00:00:00 2001
-Message-Id: <1a2f74b8b9e507b17d49a3060d29910facba9d89@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:13 +0100
-Subject: [PATCH] docs: formatdomain: Close <source> on one of disk examples
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4e93c47576e4c9c37b34fc50707bee97e66d6a19)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <8da0026666677c92084e46f242a48e5248a226e6.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 2b6a3fb921..ec48ed77a5 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -2881,6 +2881,7 @@
-       &lt;reservations managed='no'&gt;
-         &lt;source type='unix' path='/path/to/qemu-pr-helper' mode='client'/&gt;
-       &lt;/reservations&gt;
-+    &lt;/source&gt;
-     &lt;target dev='sda' bus='scsi'/&gt;
-     &lt;address type='drive' controller='0' bus='0' target='3' unit='0'/&gt;
-   &lt;/disk&gt;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-docs-formatdomain-Mention-missing-protocols.patch b/SOURCES/libvirt-docs-formatdomain-Mention-missing-protocols.patch
deleted file mode 100644
index 57b6daa..0000000
--- a/SOURCES/libvirt-docs-formatdomain-Mention-missing-protocols.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From d03688c61e7609b22770f5fa6228431edfc45945 Mon Sep 17 00:00:00 2001
-Message-Id: <d03688c61e7609b22770f5fa6228431edfc45945@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:43 +0200
-Subject: [PATCH] docs: formatdomain: Mention missing protocols
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-http, https, ftp, ftps, and tftp were not mentioned in the
-documentation. Note that 'ssh' is still omitted as it's used only
-internally.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b24281c93405d6e3efb6edb3e7abff31628966b8)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <ed3aac8a1ddcf415808dc9104ce7638344c09523.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/formatdomain.html.in | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 2b8f9eabc2..143db21d4d 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -3086,10 +3086,11 @@
-               <dd>
-               The <code>protocol</code> attribute specifies the protocol to
-               access to the requested image. Possible values are "nbd",
--              "iscsi", "rbd", "sheepdog", "gluster" or "vxhs".
-+              "iscsi", "rbd", "sheepdog", "gluster", "vxhs", "http", "https",
-+              "ftp", ftps", or "tftp".
- 
--              <p>If the <code>protocol</code> attribute is "rbd", "sheepdog",
--              "gluster", or "vxhs", an additional attribute <code>name</code>
-+              <p>For any <code>protocol</code> other than <code>nbd</code>
-+              an additional attribute <code>name</code>
-               is mandatory to specify which volume/image will be used.
-               </p>
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-docs-improve-description-of-secure-attribute-for-loader-element.patch b/SOURCES/libvirt-docs-improve-description-of-secure-attribute-for-loader-element.patch
deleted file mode 100644
index 9114b14..0000000
--- a/SOURCES/libvirt-docs-improve-description-of-secure-attribute-for-loader-element.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 3398815aa337278fe4085f06f3586b2a1a98ab3d Mon Sep 17 00:00:00 2001
-Message-Id: <3398815aa337278fe4085f06f3586b2a1a98ab3d@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:04 +0200
-Subject: [PATCH] docs: improve description of secure attribute for loader
- element
-
-The original text was not explaining what this attribute actually
-controls and could have been interpreted as a control switch for the
-Secure boot feature in firmwares.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Kashyap Chamarthy <kchamart@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit f47d06260b9698f705ab2c079c573f89f832e376)
-
-Conflicts:
-    docs/formatdomain.rst
-        - we still have formatdomain.html.in in downstream
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <e2c4f2faa7f2a525b4d3ea5608a1b305cf18712b.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/formatdomain.html.in | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 7ac9523684..a40bed347b 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -197,7 +197,9 @@
-         path points to an UEFI image, <code>type</code> should be
-         <code>pflash</code>. Moreover, some firmwares may
-         implement the Secure boot feature. Attribute
--        <code>secure</code> can be used then to control it.
-+        <code>secure</code> can be used to tell the hypervisor that the
-+        firmware is capable of Secure Boot feature. It cannot be used to
-+        enable or disable the feature itself in the firmware.
-         <span class="since">Since 2.1.0</span></dd>
-       <dt><code>nvram</code></dt>
-       <dd>Some UEFI firmwares may want to use a non-volatile memory to store
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-docs-mention-hotplug-off-in-news.xml.patch b/SOURCES/libvirt-docs-mention-hotplug-off-in-news.xml.patch
deleted file mode 100644
index 4406351..0000000
--- a/SOURCES/libvirt-docs-mention-hotplug-off-in-news.xml.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 3582a1666686111b86e7b06341bb1a113d7e9b84 Mon Sep 17 00:00:00 2001
-Message-Id: <3582a1666686111b86e7b06341bb1a113d7e9b84@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:09 -0400
-Subject: [PATCH] docs: mention hotplug='off' in news.xml
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 389811d517c270c4f916fce4b3d64f90331244d7)
-
-Conflicts:
-  docs/news.xml
-      upstream this feature is in 6.3.0. downstream is fixed in 6.0.0-whatever
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-7-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/news.xml | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/docs/news.xml b/docs/news.xml
-index 408ffc8518..676a427853 100644
---- a/docs/news.xml
-+++ b/docs/news.xml
-@@ -65,6 +65,18 @@
-       </change>
-     </section>
-     <section title="New features">
-+      <change>
-+        <summary>
-+          qemu: support disabling hotplug/unplug of PCIe devices
-+        </summary>
-+        <description>
-+          libvirt can now set the "hotplug" option for pcie-root-ports
-+          and pcie-switch-downstream-ports, which can be used to
-+          disable hotplug/unplug of devices from these ports (default
-+          behavior is for these controllers to accept all
-+          hotplug/unplug attempts, but this is often undesireable).
-+        </description>
-+      </change>
-       <change>
-         <summary>
-           support for virtio+hostdev NIC &lt;teaming&gt;
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-docs-reduce-excessive-spacing-in-ToC-for-RST-files.patch b/SOURCES/libvirt-docs-reduce-excessive-spacing-in-ToC-for-RST-files.patch
deleted file mode 100644
index 3f17419..0000000
--- a/SOURCES/libvirt-docs-reduce-excessive-spacing-in-ToC-for-RST-files.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From f62a2308cc4b92842363d1cc714c101983374857 Mon Sep 17 00:00:00 2001
-Message-Id: <f62a2308cc4b92842363d1cc714c101983374857@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:33 +0100
-Subject: [PATCH] docs: reduce excessive spacing in ToC for RST files
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The table of contents in the RST based files uses <p> tags inside the
-<li>, which results in 1em's worth of spacing above & below each
-entry. This results in way too much whitespace in the ToC.
-
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4be5a2f0c2c6f1236828592d8cb9ca5dc6f9df10)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <7d1090688b1ea9a76e46416d461784318b5cb8d4.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/libvirt.css | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/docs/libvirt.css b/docs/libvirt.css
-index 2fe123395c..18e55dac59 100644
---- a/docs/libvirt.css
-+++ b/docs/libvirt.css
-@@ -579,3 +579,7 @@ ul.news-section-content li dl dd {
-     font-family: monospace;
-     background: #eeeeee;
- }
-+
-+.contents li p {
-+    margin: 2px;
-+}
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-docs-render-class-literal-with-monospace-font.patch b/SOURCES/libvirt-docs-render-class-literal-with-monospace-font.patch
deleted file mode 100644
index 912fc93..0000000
--- a/SOURCES/libvirt-docs-render-class-literal-with-monospace-font.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 20fafe768fcaa5aef96d5d77e1209f46e48228e0 Mon Sep 17 00:00:00 2001
-Message-Id: <20fafe768fcaa5aef96d5d77e1209f46e48228e0@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:32 +0100
-Subject: [PATCH] docs: render class="literal" with monospace font
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When using ``....`` in RST, this results in <span class="literal">...</span>
-instead of <code>...</code>. We thus need an extra rule to render it
-with a monospace font. Colouring a light gray also helps the text
-stand out a little more and matches background of <pre> blocks.
-
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 039787c71a2bee6e60ddf5cb0515c0cdb85dd20b)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <72f7f14e62e058c436303fdeed68986f435b9011.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/libvirt.css | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/docs/libvirt.css b/docs/libvirt.css
-index d2e1842b62..2fe123395c 100644
---- a/docs/libvirt.css
-+++ b/docs/libvirt.css
-@@ -574,3 +574,8 @@ ul.news-section-content li dl dd {
-     margin-top: 0.5em;
-     margin-bottom: 0.5em;
- }
-+
-+.literal, code {
-+    font-family: monospace;
-+    background: #eeeeee;
-+}
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-docs-use-proper-cpu-quota-value-in-our-documentation.patch b/SOURCES/libvirt-docs-use-proper-cpu-quota-value-in-our-documentation.patch
deleted file mode 100644
index abe880f..0000000
--- a/SOURCES/libvirt-docs-use-proper-cpu-quota-value-in-our-documentation.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From c9113d8cd9d68c932175ea63b634fc5cb7e51ef2 Mon Sep 17 00:00:00 2001
-Message-Id: <c9113d8cd9d68c932175ea63b634fc5cb7e51ef2@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 4 Mar 2021 12:57:56 +0100
-Subject: [PATCH] docs: use proper cpu quota value in our documentation
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Commit <d505b8af58912ae1e1a211fabc9995b19bd40828> changed the cpu quota
-value that reflects what kernel allows but did not update our
-documentation.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 992635b142b261cedb6075e459918418fe6e6962)
-
-Conflicts:
-    docs/formatdomain.rst
-        - missing in downstream, we use formatdomain.html.in
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <ba20be50c3bde1668cb214253e5ef8f212fc062b.1614858616.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in     | 8 ++++----
- docs/manpages/virsh.rst       | 2 +-
- docs/schemas/domaincommon.rng | 2 +-
- 3 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 127dd13cc0..4341e256a8 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -872,7 +872,7 @@
-         bandwidth (unit: microseconds). A domain with <code>quota</code> as any
-         negative value indicates that the domain has infinite bandwidth for
-         vCPU threads, which means that it is not bandwidth controlled. The value
--        should be in range [1000, 18446744073709551] or less than 0. A quota
-+        should be in range [1000, 17592186044415] or less than 0. A quota
-         with value 0 means no value. You can use this feature to ensure that all
-         vCPUs run at the same speed.
-         <span class="since">Only QEMU driver support since 0.9.4, LXC since
-@@ -894,7 +894,7 @@
-         domain. A domain with <code>global_quota</code> as any negative
-         value indicates that the domain has infinite bandwidth, which means that
-         it is not bandwidth controlled. The value should be in range
--        [1000, 18446744073709551] or less than 0. A <code>global_quota</code>
-+        [1000, 17592186044415] or less than 0. A <code>global_quota</code>
-         with value 0 means no value.
-         <span class="since">Only QEMU driver support since 1.3.3</span>
-       </dd>
-@@ -915,7 +915,7 @@
-         excluding vCPUs). A domain with <code>emulator_quota</code> as any negative
-         value indicates that the domain has infinite bandwidth for emulator threads
-         (those excluding vCPUs), which means that it is not bandwidth controlled.
--        The value should be in range [1000, 18446744073709551] or less than 0. A
-+        The value should be in range [1000, 17592186044415] or less than 0. A
-         quota with value 0 means no value.
-         <span class="since">Only QEMU driver support since 0.10.0</span>
-       </dd>
-@@ -937,7 +937,7 @@
-         <code>iothread_quota</code> as any negative value indicates that the
-         domain IOThreads have infinite bandwidth, which means that it is
-         not bandwidth controlled. The value should be in range
--        [1000, 18446744073709551] or less than 0. An <code>iothread_quota</code>
-+        [1000, 17592186044415] or less than 0. An <code>iothread_quota</code>
-         with value 0 means no value. You can use this feature to ensure that
-         all IOThreads run at the same speed.
-         <span class="since">Only QEMU driver support since 2.1.0</span>
-diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
-index 0804465d44..a5b95c1123 100644
---- a/docs/manpages/virsh.rst
-+++ b/docs/manpages/virsh.rst
-@@ -3715,7 +3715,7 @@ XEN_CREDIT scheduler.
- ``Note``: The vcpu_period, emulator_period, and iothread_period parameters
- have a valid value range of 1000-1000000 or 0, and the vcpu_quota,
- emulator_quota, and iothread_quota parameters have a valid value range of
--1000-18446744073709551 or less than 0. The value 0 for
-+1000-17592186044415 or less than 0. The value 0 for
- either parameter is the same as not specifying that parameter.
- 
- 
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 4a42cb9b40..6671ef3dfa 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -6649,7 +6649,7 @@
-   <define name="cpuquota">
-     <data type="long">
-       <param name="pattern">-?[0-9]+</param>
--      <param name="maxInclusive">18446744073709551</param>
-+      <param name="maxInclusive">17592186044415</param>
-       <param name='minInclusive'>-1</param>
-     </data>
-   </define>
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-domain_conf-Don-t-leak-def-os.firmwareFeatures.patch b/SOURCES/libvirt-domain_conf-Don-t-leak-def-os.firmwareFeatures.patch
deleted file mode 100644
index 431bb2f..0000000
--- a/SOURCES/libvirt-domain_conf-Don-t-leak-def-os.firmwareFeatures.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 8ad6e3bc6d3e9e55093b546ee886a2a2d9e875f5 Mon Sep 17 00:00:00 2001
-Message-Id: <8ad6e3bc6d3e9e55093b546ee886a2a2d9e875f5@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 21 May 2021 14:16:13 +0200
-Subject: [PATCH] domain_conf: Don't leak def->os.firmwareFeatures
-
-The firmwareFeatures member of virDomainOSDef struct is allocated
-in virDomainDefParseBootFirmwareOptions() but never freed.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-(cherry picked from commit c116b9481426f86188c71f340d5e3db103120bf8)
-
-Conflicts:
-    src/conf/domain_conf.c
-        - missing upstream commits:
-            77f8e48fc35eaf867eae4f623e381f87f6e29930
-            f9f81f1c8f855b8c21aeae4441abfc877ff2bfc3
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <82f4beea71e682c43ec10370d5a43a608d1cb411.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 28c8d0ecbd..2ffa9c8a2a 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -3431,6 +3431,7 @@ void virDomainDefFree(virDomainDefPtr def)
-     VIR_FREE(def->idmap.uidmap);
-     VIR_FREE(def->idmap.gidmap);
- 
-+    VIR_FREE(def->os.firmwareFeatures);
-     VIR_FREE(def->os.machine);
-     VIR_FREE(def->os.init);
-     for (i = 0; def->os.initargv && def->os.initargv[i]; i++)
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-domain_validate-use-defines-for-cpu-period-and-quota-limits.patch b/SOURCES/libvirt-domain_validate-use-defines-for-cpu-period-and-quota-limits.patch
deleted file mode 100644
index e293dd5..0000000
--- a/SOURCES/libvirt-domain_validate-use-defines-for-cpu-period-and-quota-limits.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From 499e3eb6bdca10a5fac9279261e32e64c28273bd Mon Sep 17 00:00:00 2001
-Message-Id: <499e3eb6bdca10a5fac9279261e32e64c28273bd@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 4 Mar 2021 12:57:55 +0100
-Subject: [PATCH] domain_validate: use defines for cpu period and quota limits
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Commints <bc760f4d7c4f964fadcb2a73e126b0053e7a9b06> and
-<98a09ca48ed4fc011abf2aa290e02ce1b8f1bb5f> fixed the code to use
-defines instead of magic numbers but missed this place.
-
-Following commit <ed1ba69f5a8132f8c1e73d2a1f142d70de0b564a> changed
-the cpu quota limit to reflect what kernel actually allows so using
-the defines fixes XML validations as well.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 22cae2ea4bad7e285ba19d536bd475f8b00841f8)
-
-Conflicts:
-    src/conf/domain_validate.c
-        - not present in downstream, the code is still part of
-          domain_conf.c
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <63a44700876e2bd59f276fcd8395abaff011b4c1.1614858616.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 20 +++++++++++++-------
- 1 file changed, 13 insertions(+), 7 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 166c3e48d2..9f6cdb0de8 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -34,6 +34,7 @@
- #include "domain_addr.h"
- #include "domain_conf.h"
- #include "snapshot_conf.h"
-+#include "vircgroup.h"
- #include "viralloc.h"
- #include "virxml.h"
- #include "viruuid.h"
-@@ -6997,10 +6998,13 @@ virDomainDefLifecycleActionValidate(const virDomainDef *def)
- #define CPUTUNE_VALIDATE_PERIOD(name) \
-     do { \
-         if (def->cputune.name > 0 && \
--            (def->cputune.name < 1000 || def->cputune.name > 1000000)) { \
-+            (def->cputune.name < VIR_CGROUP_CPU_PERIOD_MIN || \
-+             def->cputune.name > VIR_CGROUP_CPU_PERIOD_MAX)) { \
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \
--                           _("Value of cputune '%s' must be in range " \
--                           "[1000, 1000000]"), #name); \
-+                           _("Value of cputune '%s' must be in range [%llu, %llu]"), \
-+                           #name, \
-+                           VIR_CGROUP_CPU_PERIOD_MIN, \
-+                           VIR_CGROUP_CPU_PERIOD_MAX); \
-             return -1; \
-         } \
-     } while (0)
-@@ -7008,11 +7012,13 @@ virDomainDefLifecycleActionValidate(const virDomainDef *def)
- #define CPUTUNE_VALIDATE_QUOTA(name) \
-     do { \
-         if (def->cputune.name > 0 && \
--            (def->cputune.name < 1000 || \
--            def->cputune.name > 18446744073709551LL)) { \
-+            (def->cputune.name < VIR_CGROUP_CPU_QUOTA_MIN || \
-+            def->cputune.name > VIR_CGROUP_CPU_QUOTA_MAX)) { \
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \
--                           _("Value of cputune '%s' must be in range " \
--                           "[1000, 18446744073709551]"), #name); \
-+                           _("Value of cputune '%s' must be in range [%llu, %llu]"), \
-+                           #name, \
-+                           VIR_CGROUP_CPU_QUOTA_MIN, \
-+                           VIR_CGROUP_CPU_QUOTA_MAX); \
-             return -1; \
-         } \
-     } while (0)
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-hostcpu-add-support-for-reporting-die_id-in-NUMA-topology.patch b/SOURCES/libvirt-hostcpu-add-support-for-reporting-die_id-in-NUMA-topology.patch
deleted file mode 100644
index 2866b6b..0000000
--- a/SOURCES/libvirt-hostcpu-add-support-for-reporting-die_id-in-NUMA-topology.patch
+++ /dev/null
@@ -1,519 +0,0 @@
-From 15b2ac591a1c024ecf92a7e40d22eed6e59684b8 Mon Sep 17 00:00:00 2001
-Message-Id: <15b2ac591a1c024ecf92a7e40d22eed6e59684b8@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Mon, 3 Feb 2020 18:07:25 +0000
-Subject: [PATCH] hostcpu: add support for reporting die_id in NUMA topology
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Update the host CPU code to report the die_id in the NUMA topology
-capabilities. On systems with multiple dies, this fixes the bug
-where CPU cores can't be distinguished:
-
- <cpus num='12'>
-   <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
-   <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
-   <cpu id='2' socket_id='0' core_id='0' siblings='2'/>
-   <cpu id='3' socket_id='0' core_id='1' siblings='3'/>
- </cpus>
-
-Notice how core_id is repeated within the scope of the same socket_id.
-
-It now reports
-
- <cpus num='12'>
-   <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-   <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-   <cpu id='2' socket_id='0' die_id='1' core_id='0' siblings='2'/>
-   <cpu id='3' socket_id='0' die_id='1' core_id='1' siblings='3'/>
- </cpus>
-
-So core_id is now unique within a (socket_id, die_id) pair.
-
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 7b79ee2f78bbf2af76df2f6466919e19ae05aeeb)
-
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785211
-Message-Id: <20200203180726.2203691-5-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/schemas/capability.rng                   |  3 ++
- src/conf/capabilities.c                       |  5 ++-
- src/conf/capabilities.h                       |  1 +
- src/libvirt_linux.syms                        |  1 +
- src/util/virhostcpu.c                         | 16 ++++++++++
- src/util/virhostcpu.h                         |  1 +
- .../vircaps2xmldata/vircaps-aarch64-basic.xml | 32 +++++++++----------
- .../vircaps2xmldata/vircaps-x86_64-basic.xml  | 32 +++++++++----------
- .../vircaps2xmldata/vircaps-x86_64-caches.xml | 16 +++++-----
- .../vircaps-x86_64-resctrl-cdp.xml            | 24 +++++++-------
- .../vircaps-x86_64-resctrl-cmt.xml            | 24 +++++++-------
- .../vircaps-x86_64-resctrl-fake-feature.xml   | 24 +++++++-------
- .../vircaps-x86_64-resctrl-skx-twocaches.xml  |  2 +-
- .../vircaps-x86_64-resctrl-skx.xml            |  2 +-
- .../vircaps-x86_64-resctrl.xml                | 24 +++++++-------
- 15 files changed, 116 insertions(+), 91 deletions(-)
-
-diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng
-index 91ee523116..031c55bf20 100644
---- a/docs/schemas/capability.rng
-+++ b/docs/schemas/capability.rng
-@@ -265,6 +265,9 @@
-         <attribute name='socket_id'>
-           <ref name='unsignedInt'/>
-         </attribute>
-+        <attribute name='die_id'>
-+          <ref name='unsignedInt'/>
-+        </attribute>
-         <attribute name='core_id'>
-           <ref name='unsignedInt'/>
-         </attribute>
-diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
-index bf1d9936ed..4bbc79334e 100644
---- a/src/conf/capabilities.c
-+++ b/src/conf/capabilities.c
-@@ -874,8 +874,9 @@ virCapabilitiesHostNUMAFormat(virCapsHostNUMAPtr caps,
-                     return -1;
- 
-                 virBufferAsprintf(buf,
--                                  " socket_id='%d' core_id='%d' siblings='%s'",
-+                                  " socket_id='%d' die_id='%d' core_id='%d' siblings='%s'",
-                                   cell->cpus[j].socket_id,
-+                                  cell->cpus[j].die_id,
-                                   cell->cpus[j].core_id,
-                                   siblings);
-                 VIR_FREE(siblings);
-@@ -1463,6 +1464,7 @@ virCapabilitiesFillCPUInfo(int cpu_id G_GNUC_UNUSED,
-     cpu->id = cpu_id;
- 
-     if (virHostCPUGetSocket(cpu_id, &cpu->socket_id) < 0 ||
-+        virHostCPUGetDie(cpu_id, &cpu->die_id) < 0 ||
-         virHostCPUGetCore(cpu_id, &cpu->core_id) < 0)
-         return -1;
- 
-@@ -1591,6 +1593,7 @@ virCapabilitiesHostNUMAInitFake(virCapsHostNUMAPtr caps)
-                         goto error;
-                     if (tmp) {
-                         cpus[cid].id = id;
-+                        cpus[cid].die_id = 0;
-                         cpus[cid].socket_id = s;
-                         cpus[cid].core_id = c;
-                         if (!(cpus[cid].siblings = virBitmapNew(ncpus)))
-diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
-index 4a49e94aa5..75f29666c9 100644
---- a/src/conf/capabilities.h
-+++ b/src/conf/capabilities.h
-@@ -88,6 +88,7 @@ struct _virCapsGuest {
- struct _virCapsHostNUMACellCPU {
-     unsigned int id;
-     unsigned int socket_id;
-+    unsigned int die_id;
-     unsigned int core_id;
-     virBitmapPtr siblings;
- };
-diff --git a/src/libvirt_linux.syms b/src/libvirt_linux.syms
-index 5fa2c790ef..55649ae39c 100644
---- a/src/libvirt_linux.syms
-+++ b/src/libvirt_linux.syms
-@@ -4,6 +4,7 @@
- 
- # util/virhostcpu.h
- virHostCPUGetCore;
-+virHostCPUGetDie;
- virHostCPUGetInfoPopulateLinux;
- virHostCPUGetSiblingsList;
- virHostCPUGetSocket;
-diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
-index 256976cce1..09c959cd25 100644
---- a/src/util/virhostcpu.c
-+++ b/src/util/virhostcpu.c
-@@ -218,6 +218,22 @@ virHostCPUGetSocket(unsigned int cpu, unsigned int *socket)
-     return 0;
- }
- 
-+int
-+virHostCPUGetDie(unsigned int cpu, unsigned int *die)
-+{
-+    int ret = virFileReadValueUint(die,
-+                                   "%s/cpu/cpu%u/topology/die_id",
-+                                   SYSFS_SYSTEM_PATH, cpu);
-+
-+    /* If the file is not there, it's 0 */
-+    if (ret == -2)
-+        *die = 0;
-+    else if (ret < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
- int
- virHostCPUGetCore(unsigned int cpu, unsigned int *core)
- {
-diff --git a/src/util/virhostcpu.h b/src/util/virhostcpu.h
-index d95d380d4a..9be2e51a38 100644
---- a/src/util/virhostcpu.h
-+++ b/src/util/virhostcpu.h
-@@ -65,6 +65,7 @@ int virHostCPUStatsAssign(virNodeCPUStatsPtr param,
- 
- #ifdef __linux__
- int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket);
-+int virHostCPUGetDie(unsigned int cpu, unsigned int *die);
- int virHostCPUGetCore(unsigned int cpu, unsigned int *core);
- 
- virBitmapPtr virHostCPUGetSiblingsList(unsigned int cpu);
-diff --git a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml
-index 50466f9162..0a04052c40 100644
---- a/tests/vircaps2xmldata/vircaps-aarch64-basic.xml
-+++ b/tests/vircaps2xmldata/vircaps-aarch64-basic.xml
-@@ -16,10 +16,10 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='4'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
-           </cpus>
-         </cell>
-         <cell id='1'>
-@@ -28,10 +28,10 @@
-           <pages unit='KiB' size='2048'>6144</pages>
-           <pages unit='KiB' size='1048576'>8192</pages>
-           <cpus num='4'>
--            <cpu id='4' socket_id='1' core_id='4' siblings='4'/>
--            <cpu id='5' socket_id='1' core_id='5' siblings='5'/>
--            <cpu id='6' socket_id='1' core_id='6' siblings='6'/>
--            <cpu id='7' socket_id='1' core_id='7' siblings='7'/>
-+            <cpu id='4' socket_id='1' die_id='0' core_id='4' siblings='4'/>
-+            <cpu id='5' socket_id='1' die_id='0' core_id='5' siblings='5'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='6' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='7' siblings='7'/>
-           </cpus>
-         </cell>
-         <cell id='2'>
-@@ -40,10 +40,10 @@
-           <pages unit='KiB' size='2048'>8192</pages>
-           <pages unit='KiB' size='1048576'>10240</pages>
-           <cpus num='4'>
--            <cpu id='8' socket_id='2' core_id='8' siblings='8'/>
--            <cpu id='9' socket_id='2' core_id='9' siblings='9'/>
--            <cpu id='10' socket_id='2' core_id='10' siblings='10'/>
--            <cpu id='11' socket_id='2' core_id='11' siblings='11'/>
-+            <cpu id='8' socket_id='2' die_id='0' core_id='8' siblings='8'/>
-+            <cpu id='9' socket_id='2' die_id='0' core_id='9' siblings='9'/>
-+            <cpu id='10' socket_id='2' die_id='0' core_id='10' siblings='10'/>
-+            <cpu id='11' socket_id='2' die_id='0' core_id='11' siblings='11'/>
-           </cpus>
-         </cell>
-         <cell id='3'>
-@@ -52,10 +52,10 @@
-           <pages unit='KiB' size='2048'>10240</pages>
-           <pages unit='KiB' size='1048576'>12288</pages>
-           <cpus num='4'>
--            <cpu id='12' socket_id='3' core_id='12' siblings='12'/>
--            <cpu id='13' socket_id='3' core_id='13' siblings='13'/>
--            <cpu id='14' socket_id='3' core_id='14' siblings='14'/>
--            <cpu id='15' socket_id='3' core_id='15' siblings='15'/>
-+            <cpu id='12' socket_id='3' die_id='0' core_id='12' siblings='12'/>
-+            <cpu id='13' socket_id='3' die_id='0' core_id='13' siblings='13'/>
-+            <cpu id='14' socket_id='3' die_id='0' core_id='14' siblings='14'/>
-+            <cpu id='15' socket_id='3' die_id='0' core_id='15' siblings='15'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml
-index e7be6def3e..4da09f889c 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-basic.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-basic.xml
-@@ -14,10 +14,10 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='4'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
-           </cpus>
-         </cell>
-         <cell id='1'>
-@@ -26,10 +26,10 @@
-           <pages unit='KiB' size='2048'>6144</pages>
-           <pages unit='KiB' size='1048576'>8192</pages>
-           <cpus num='4'>
--            <cpu id='4' socket_id='1' core_id='4' siblings='4'/>
--            <cpu id='5' socket_id='1' core_id='5' siblings='5'/>
--            <cpu id='6' socket_id='1' core_id='6' siblings='6'/>
--            <cpu id='7' socket_id='1' core_id='7' siblings='7'/>
-+            <cpu id='4' socket_id='1' die_id='0' core_id='4' siblings='4'/>
-+            <cpu id='5' socket_id='1' die_id='0' core_id='5' siblings='5'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='6' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='7' siblings='7'/>
-           </cpus>
-         </cell>
-         <cell id='2'>
-@@ -38,10 +38,10 @@
-           <pages unit='KiB' size='2048'>8192</pages>
-           <pages unit='KiB' size='1048576'>10240</pages>
-           <cpus num='4'>
--            <cpu id='8' socket_id='2' core_id='8' siblings='8'/>
--            <cpu id='9' socket_id='2' core_id='9' siblings='9'/>
--            <cpu id='10' socket_id='2' core_id='10' siblings='10'/>
--            <cpu id='11' socket_id='2' core_id='11' siblings='11'/>
-+            <cpu id='8' socket_id='2' die_id='0' core_id='8' siblings='8'/>
-+            <cpu id='9' socket_id='2' die_id='0' core_id='9' siblings='9'/>
-+            <cpu id='10' socket_id='2' die_id='0' core_id='10' siblings='10'/>
-+            <cpu id='11' socket_id='2' die_id='0' core_id='11' siblings='11'/>
-           </cpus>
-         </cell>
-         <cell id='3'>
-@@ -50,10 +50,10 @@
-           <pages unit='KiB' size='2048'>10240</pages>
-           <pages unit='KiB' size='1048576'>12288</pages>
-           <cpus num='4'>
--            <cpu id='12' socket_id='3' core_id='12' siblings='12'/>
--            <cpu id='13' socket_id='3' core_id='13' siblings='13'/>
--            <cpu id='14' socket_id='3' core_id='14' siblings='14'/>
--            <cpu id='15' socket_id='3' core_id='15' siblings='15'/>
-+            <cpu id='12' socket_id='3' die_id='0' core_id='12' siblings='12'/>
-+            <cpu id='13' socket_id='3' die_id='0' core_id='13' siblings='13'/>
-+            <cpu id='14' socket_id='3' die_id='0' core_id='14' siblings='14'/>
-+            <cpu id='15' socket_id='3' die_id='0' core_id='15' siblings='15'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml
-index ca671a1640..28f00c0a90 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-caches.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-caches.xml
-@@ -17,14 +17,14 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='8'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0,4'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1,5'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2,6'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3,7'/>
--            <cpu id='4' socket_id='0' core_id='0' siblings='0,4'/>
--            <cpu id='5' socket_id='0' core_id='1' siblings='1,5'/>
--            <cpu id='6' socket_id='0' core_id='2' siblings='2,6'/>
--            <cpu id='7' socket_id='0' core_id='3' siblings='3,7'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0,4'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1,5'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2,6'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3,7'/>
-+            <cpu id='4' socket_id='0' die_id='0' core_id='0' siblings='0,4'/>
-+            <cpu id='5' socket_id='0' die_id='0' core_id='1' siblings='1,5'/>
-+            <cpu id='6' socket_id='0' die_id='0' core_id='2' siblings='2,6'/>
-+            <cpu id='7' socket_id='0' die_id='0' core_id='3' siblings='3,7'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
-index 1d3df318c5..ee26fe9464 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cdp.xml
-@@ -17,12 +17,12 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='6'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
--            <cpu id='4' socket_id='0' core_id='4' siblings='4'/>
--            <cpu id='5' socket_id='0' core_id='5' siblings='5'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
-+            <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
-+            <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
-           </cpus>
-         </cell>
-         <cell id='1'>
-@@ -31,12 +31,12 @@
-           <pages unit='KiB' size='2048'>6144</pages>
-           <pages unit='KiB' size='1048576'>8192</pages>
-           <cpus num='6'>
--            <cpu id='6' socket_id='1' core_id='0' siblings='6'/>
--            <cpu id='7' socket_id='1' core_id='1' siblings='7'/>
--            <cpu id='8' socket_id='1' core_id='2' siblings='8'/>
--            <cpu id='9' socket_id='1' core_id='3' siblings='9'/>
--            <cpu id='10' socket_id='1' core_id='4' siblings='10'/>
--            <cpu id='11' socket_id='1' core_id='5' siblings='11'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
-+            <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
-+            <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
-+            <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
-+            <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml
-index 6a8cd0e909..acdd97ec58 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-cmt.xml
-@@ -17,12 +17,12 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='6'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
--            <cpu id='4' socket_id='0' core_id='4' siblings='4'/>
--            <cpu id='5' socket_id='0' core_id='5' siblings='5'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
-+            <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
-+            <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
-           </cpus>
-         </cell>
-         <cell id='1'>
-@@ -31,12 +31,12 @@
-           <pages unit='KiB' size='2048'>6144</pages>
-           <pages unit='KiB' size='1048576'>8192</pages>
-           <cpus num='6'>
--            <cpu id='6' socket_id='1' core_id='0' siblings='6'/>
--            <cpu id='7' socket_id='1' core_id='1' siblings='7'/>
--            <cpu id='8' socket_id='1' core_id='2' siblings='8'/>
--            <cpu id='9' socket_id='1' core_id='3' siblings='9'/>
--            <cpu id='10' socket_id='1' core_id='4' siblings='10'/>
--            <cpu id='11' socket_id='1' core_id='5' siblings='11'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
-+            <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
-+            <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
-+            <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
-+            <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml
-index 4e46ead616..5f3678e072 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-fake-feature.xml
-@@ -17,12 +17,12 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='6'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
--            <cpu id='4' socket_id='0' core_id='4' siblings='4'/>
--            <cpu id='5' socket_id='0' core_id='5' siblings='5'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
-+            <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
-+            <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
-           </cpus>
-         </cell>
-         <cell id='1'>
-@@ -31,12 +31,12 @@
-           <pages unit='KiB' size='2048'>6144</pages>
-           <pages unit='KiB' size='1048576'>8192</pages>
-           <cpus num='6'>
--            <cpu id='6' socket_id='1' core_id='0' siblings='6'/>
--            <cpu id='7' socket_id='1' core_id='1' siblings='7'/>
--            <cpu id='8' socket_id='1' core_id='2' siblings='8'/>
--            <cpu id='9' socket_id='1' core_id='3' siblings='9'/>
--            <cpu id='10' socket_id='1' core_id='4' siblings='10'/>
--            <cpu id='11' socket_id='1' core_id='5' siblings='11'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
-+            <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
-+            <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
-+            <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
-+            <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml
-index 44c1042afe..6769bd0591 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx-twocaches.xml
-@@ -17,7 +17,7 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='1'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml
-index 8382a26c7a..bc52480905 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl-skx.xml
-@@ -17,7 +17,7 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='1'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-           </cpus>
-         </cell>
-       </cells>
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
-index a27b3e247e..c386edd4b0 100644
---- a/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-resctrl.xml
-@@ -17,12 +17,12 @@
-           <pages unit='KiB' size='2048'>4096</pages>
-           <pages unit='KiB' size='1048576'>6144</pages>
-           <cpus num='6'>
--            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
--            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
--            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
--            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
--            <cpu id='4' socket_id='0' core_id='4' siblings='4'/>
--            <cpu id='5' socket_id='0' core_id='5' siblings='5'/>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='0' core_id='2' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='0' core_id='3' siblings='3'/>
-+            <cpu id='4' socket_id='0' die_id='0' core_id='4' siblings='4'/>
-+            <cpu id='5' socket_id='0' die_id='0' core_id='5' siblings='5'/>
-           </cpus>
-         </cell>
-         <cell id='1'>
-@@ -31,12 +31,12 @@
-           <pages unit='KiB' size='2048'>6144</pages>
-           <pages unit='KiB' size='1048576'>8192</pages>
-           <cpus num='6'>
--            <cpu id='6' socket_id='1' core_id='0' siblings='6'/>
--            <cpu id='7' socket_id='1' core_id='1' siblings='7'/>
--            <cpu id='8' socket_id='1' core_id='2' siblings='8'/>
--            <cpu id='9' socket_id='1' core_id='3' siblings='9'/>
--            <cpu id='10' socket_id='1' core_id='4' siblings='10'/>
--            <cpu id='11' socket_id='1' core_id='5' siblings='11'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
-+            <cpu id='8' socket_id='1' die_id='0' core_id='2' siblings='8'/>
-+            <cpu id='9' socket_id='1' die_id='0' core_id='3' siblings='9'/>
-+            <cpu id='10' socket_id='1' die_id='0' core_id='4' siblings='10'/>
-+            <cpu id='11' socket_id='1' die_id='0' core_id='5' siblings='11'/>
-           </cpus>
-         </cell>
-       </cells>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-hostdev-Update-mdev-pointer-reference-after-checking-device-type.patch b/SOURCES/libvirt-hostdev-Update-mdev-pointer-reference-after-checking-device-type.patch
deleted file mode 100644
index 96deffe..0000000
--- a/SOURCES/libvirt-hostdev-Update-mdev-pointer-reference-after-checking-device-type.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From bad40f7148a5849e84e9cdc341ff1fa03dc94fc6 Mon Sep 17 00:00:00 2001
-Message-Id: <bad40f7148a5849e84e9cdc341ff1fa03dc94fc6@dist-git>
-From: Thomas Huth <thuth@redhat.com>
-Date: Tue, 11 May 2021 14:10:27 +0200
-Subject: [PATCH] hostdev: Update mdev pointer reference after checking device
- type
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We set the pointer to some garbage packed structure data without
-knowing whether we were actually handling the type of device we
-expected to be handling. On its own, this was harmless, because we'd
-never use the pointer as we'd skip the device if it were not the
-expected type. However, it's better to make the logic even more
-explicit - we first check the device and only when we're sure we have
-the expected type we then update the pointer shortcut.
-
-Signed-off-by: Erik Skultety <eskultet@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 964738cff3d949d90fc5c3317a2618fcd8d217b4)
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1940449
-Signed-off-by: Thomas Huth <thuth@redhat.com>
-Message-Id: <20210511121028.304070-2-thuth@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- src/util/virhostdev.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
-index 9596482146..b7050e99e4 100644
---- a/src/util/virhostdev.c
-+++ b/src/util/virhostdev.c
-@@ -2030,11 +2030,11 @@ virHostdevReAttachMediatedDevices(virHostdevManagerPtr mgr,
-         virDomainHostdevSubsysMediatedDevPtr mdevsrc;
-         virDomainHostdevDefPtr hostdev = hostdevs[i];
- 
--        mdevsrc = &hostdev->source.subsys.u.mdev;
--
-         if (!virHostdevIsMdevDevice(hostdev))
-             continue;
- 
-+        mdevsrc = &hostdev->source.subsys.u.mdev;
-+
-         if (!(mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
-                                           mdevsrc->model)))
-             continue;
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-hostdev-mdev-Lookup-mdevs-by-sysfs-path-rather-than-mdev-struct.patch b/SOURCES/libvirt-hostdev-mdev-Lookup-mdevs-by-sysfs-path-rather-than-mdev-struct.patch
deleted file mode 100644
index 3b68fb0..0000000
--- a/SOURCES/libvirt-hostdev-mdev-Lookup-mdevs-by-sysfs-path-rather-than-mdev-struct.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-From 9e97e35031572e0f6ace32e2fb094f0f358f0391 Mon Sep 17 00:00:00 2001
-Message-Id: <9e97e35031572e0f6ace32e2fb094f0f358f0391@dist-git>
-From: Thomas Huth <thuth@redhat.com>
-Date: Tue, 11 May 2021 14:10:28 +0200
-Subject: [PATCH] hostdev: mdev: Lookup mdevs by sysfs path rather than mdev
- struct
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The lookup didn't do anything apart from comparing the sysfs paths
-anyway since that's what makes each mdev unique.
-The most ridiculous usage of the old logic was in
-virHostdevReAttachMediatedDevices where in order to drop an mdev
-hostdev from the list of active devices we first had to create a new
-mdev and use it in the lookup call. Why couldn't we have used the
-hostdev directly? Because the hostdev and mdev structures are
-incompatible.
-
-The way mdevs are currently removed is via a write to a specific sysfs
-attribute. If you do it while the machine which has the mdev assigned
-is running, the write call may block (with a new enough kernel, with
-older kernels it would return a write error!) until the device
-is no longer in use which is when the QEMU process exits.
-
-The interesting part here comes afterwards when we're cleaning up and
-call virHostdevReAttachMediatedDevices. The domain doesn't exist
-anymore, so the list of active hostdevs needs to be updated and the
-respective hostdevs removed from the list, but remember we had to
-create an mdev object in the memory in order to find it in the list
-first which will fail because the write to sysfs had already removed
-the mdev instance from the host system.
-And so the next time you try to start the same domain you'll get:
-
-"Requested operation is not valid: mediated device <path> is in use by
-driver QEMU, domain <name>"
-
-Fixes: https://gitlab.com/libvirt/libvirt/-/issues/119
-
-Signed-off-by: Erik Skultety <eskultet@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 49cb59778a4e6c2d04bb9383a9d97fbbc83f9fce)
-Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1940449
-Signed-off-by: Thomas Huth <thuth@redhat.com>
-Message-Id: <20210511121028.304070-3-thuth@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- src/util/virhostdev.c | 10 ++++------
- src/util/virmdev.c    | 16 ++++++++--------
- src/util/virmdev.h    |  4 ++--
- 3 files changed, 14 insertions(+), 16 deletions(-)
-
-diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
-index b7050e99e4..392e94307c 100644
---- a/src/util/virhostdev.c
-+++ b/src/util/virhostdev.c
-@@ -2025,7 +2025,7 @@ virHostdevReAttachMediatedDevices(virHostdevManagerPtr mgr,
- 
-     virObjectLock(mgr->activeMediatedHostdevs);
-     for (i = 0; i < nhostdevs; i++) {
--        g_autoptr(virMediatedDevice) mdev = NULL;
-+        g_autofree char *sysfspath = NULL;
-         virMediatedDevicePtr tmp;
-         virDomainHostdevSubsysMediatedDevPtr mdevsrc;
-         virDomainHostdevDefPtr hostdev = hostdevs[i];
-@@ -2034,14 +2034,12 @@ virHostdevReAttachMediatedDevices(virHostdevManagerPtr mgr,
-             continue;
- 
-         mdevsrc = &hostdev->source.subsys.u.mdev;
--
--        if (!(mdev = virMediatedDeviceNew(mdevsrc->uuidstr,
--                                          mdevsrc->model)))
--            continue;
-+        sysfspath = virMediatedDeviceGetSysfsPath(mdevsrc->uuidstr);
- 
-         /* Remove from the list only mdevs assigned to @drv_name/@dom_name */
- 
--        tmp = virMediatedDeviceListFind(mgr->activeMediatedHostdevs, mdev);
-+        tmp = virMediatedDeviceListFind(mgr->activeMediatedHostdevs,
-+                                        sysfspath);
- 
-         /* skip inactive devices */
-         if (!tmp)
-diff --git a/src/util/virmdev.c b/src/util/virmdev.c
-index c2499c0a20..bae4a7d2c1 100644
---- a/src/util/virmdev.c
-+++ b/src/util/virmdev.c
-@@ -312,7 +312,7 @@ int
- virMediatedDeviceListAdd(virMediatedDeviceListPtr list,
-                          virMediatedDevicePtr *dev)
- {
--    if (virMediatedDeviceListFind(list, *dev)) {
-+    if (virMediatedDeviceListFind(list, (*dev)->path)) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("device %s is already in use"), (*dev)->path);
-         return -1;
-@@ -358,7 +358,7 @@ virMediatedDevicePtr
- virMediatedDeviceListSteal(virMediatedDeviceListPtr list,
-                            virMediatedDevicePtr dev)
- {
--    int idx = virMediatedDeviceListFindIndex(list, dev);
-+    int idx = virMediatedDeviceListFindIndex(list, dev->path);
- 
-     return virMediatedDeviceListStealIndex(list, idx);
- }
-@@ -374,13 +374,13 @@ virMediatedDeviceListDel(virMediatedDeviceListPtr list,
- 
- int
- virMediatedDeviceListFindIndex(virMediatedDeviceListPtr list,
--                               virMediatedDevicePtr dev)
-+                               const char *sysfspath)
- {
-     size_t i;
- 
-     for (i = 0; i < list->count; i++) {
--        virMediatedDevicePtr other = list->devs[i];
--        if (STREQ(other->path, dev->path))
-+        virMediatedDevicePtr dev = list->devs[i];
-+        if (STREQ(sysfspath, dev->path))
-             return i;
-     }
-     return -1;
-@@ -389,11 +389,11 @@ virMediatedDeviceListFindIndex(virMediatedDeviceListPtr list,
- 
- virMediatedDevicePtr
- virMediatedDeviceListFind(virMediatedDeviceListPtr list,
--                          virMediatedDevicePtr dev)
-+                          const char *sysfspath)
- {
-     int idx;
- 
--    if ((idx = virMediatedDeviceListFindIndex(list, dev)) >= 0)
-+    if ((idx = virMediatedDeviceListFindIndex(list, sysfspath)) >= 0)
-         return list->devs[idx];
-     else
-         return NULL;
-@@ -407,7 +407,7 @@ virMediatedDeviceIsUsed(virMediatedDevicePtr dev,
-     const char *drvname, *domname;
-     virMediatedDevicePtr tmp = NULL;
- 
--    if ((tmp = virMediatedDeviceListFind(list, dev))) {
-+    if ((tmp = virMediatedDeviceListFind(list, dev->path))) {
-         virMediatedDeviceGetUsedBy(tmp, &drvname, &domname);
-         virReportError(VIR_ERR_OPERATION_INVALID,
-                        _("mediated device %s is in use by "
-diff --git a/src/util/virmdev.h b/src/util/virmdev.h
-index e0905a3f6e..3022ab9948 100644
---- a/src/util/virmdev.h
-+++ b/src/util/virmdev.h
-@@ -120,11 +120,11 @@ virMediatedDeviceListDel(virMediatedDeviceListPtr list,
- 
- virMediatedDevicePtr
- virMediatedDeviceListFind(virMediatedDeviceListPtr list,
--                          virMediatedDevicePtr dev);
-+                          const char *sysfspath);
- 
- int
- virMediatedDeviceListFindIndex(virMediatedDeviceListPtr list,
--                               virMediatedDevicePtr dev);
-+                               const char *sysfspath);
- 
- int
- virMediatedDeviceListMarkDevices(virMediatedDeviceListPtr dst,
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-kbase-Add-document-outlining-internals-of-incremental-backup-in-qemu.patch b/SOURCES/libvirt-kbase-Add-document-outlining-internals-of-incremental-backup-in-qemu.patch
deleted file mode 100644
index 9637db6..0000000
--- a/SOURCES/libvirt-kbase-Add-document-outlining-internals-of-incremental-backup-in-qemu.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-From 02714666a525ea4dd8756f66fae28163fb685d05 Mon Sep 17 00:00:00 2001
-Message-Id: <02714666a525ea4dd8756f66fae28163fb685d05@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:06 +0200
-Subject: [PATCH] kbase: Add document outlining internals of incremental backup
- in qemu
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Outline the basics and how to integrate with externally created
-overlays. Other topics will continue later.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit da5e5a1e154836abe83077cf477c104b8f98b1d2)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-
-Conflicts: docs/kbase.html.in: real time kvm article not backported
-Message-Id: <e0fea1e270856b642c34827eb3af1c0b01afd510.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/kbase.html.in                        |   3 +
- docs/kbase/incrementalbackupinternals.rst | 217 ++++++++++++++++++++++
- 2 files changed, 220 insertions(+)
- create mode 100644 docs/kbase/incrementalbackupinternals.rst
-
-diff --git a/docs/kbase.html.in b/docs/kbase.html.in
-index 7d6caf3cb1..f2975960f6 100644
---- a/docs/kbase.html.in
-+++ b/docs/kbase.html.in
-@@ -32,6 +32,9 @@
- 
-         <dt><a href="kbase/virtiofs.html">Virtio-FS</a></dt>
-         <dd>Share a filesystem between the guest and the host</dd>
-+
-+        <dt><a href="kbase/incrementalbackupinternals.html">Incremental backup internals</a></dt>
-+        <dd>Incremental backup implementation details relevant for users</dd>
-       </dl>
-     </div>
- 
-diff --git a/docs/kbase/incrementalbackupinternals.rst b/docs/kbase/incrementalbackupinternals.rst
-new file mode 100644
-index 0000000000..0c4b4f7486
---- /dev/null
-+++ b/docs/kbase/incrementalbackupinternals.rst
-@@ -0,0 +1,217 @@
-+================================================
-+Internals of incremental backup handling in qemu
-+================================================
-+
-+.. contents::
-+
-+Libvirt's implementation of incremental backups in the ``qemu`` driver uses
-+qemu's ``block-dirty-bitmaps`` under the hood to track the guest visible disk
-+state changes corresponding to the points in time described by a libvirt
-+checkpoint.
-+
-+There are some semantica implications with how libvirt creates and manages the
-+bitmaps which de-facto become API as they are written into the disk images, and
-+this document will try to summarize them.
-+
-+Glossary
-+========
-+
-+See the knowledge base article on
-+`domain state capture <https://libvirt.org/kbase/domainstatecapture.html>`_ for
-+a deeper explanation of some of the concepts.
-+
-+Checkpoint
-+
-+    A libvirt object which represents a named point in time of the life of the
-+    vm where libvirt tracks writes the VM has done, thereby allowing a backup of
-+    only the blocks which changed. Note that state of the VM memory is _not_
-+    captured.
-+
-+    A checkpoint can be created either explicitly via the corresponding API
-+    (although this isn't very useful on its own), or simultaneously with an
-+    incremental or full backup of the VM using the ``virDomainBackupBegin`` API
-+    which allows a next backup to only copy the differences.
-+
-+Backup
-+
-+    A copy of either all blocks of selected disks (full backup) or blocks changed
-+    since a checkpoint (incremental backup) at the time the backup job was
-+    started. (Blocks modified while the backup job is running are not part of the
-+    backup!)
-+
-+Snapshot
-+
-+    Similarly to a checkpoint it's a point in time in the lifecycle of the VM
-+    but the state of the VM including memory is captured at that point allowing
-+    returning to the state later.
-+
-+Blockjob
-+
-+    A long running job which modifies the shape and/or location of the disk
-+    backing chain (images storing the disk contents). Libvirt supports
-+    ``block pull`` where data is moved up the chain towards the active layer,
-+    ``block commit`` where data is moved down the chain towards the base/oldest
-+    image. These blockjobs always remove images from the backing chain. Lastly
-+    ``block copy`` where image is moved to a different location (and possibly
-+    collapsed moving all of the data into the new location into the one image).
-+
-+block-dirty-bitmap (bitmap)
-+
-+    A data structure in qemu tracking which blocks were written by the guest
-+    OS since the bitmap was created.
-+
-+Relationships of bitmaps, checkpoints and VM disks
-+==================================================
-+
-+When a checkpoint is created libvirt creates a block-dirty-bitmap for every
-+configured VM disk named the same way as the chcheckpoint. The bitmap is
-+actively recording which blocks were changed by the guest OS from that point on.
-+Other bitmaps are not impacted by any way as they are self-contained:
-+
-+::
-+
-+ +----------------+       +----------------+
-+ | disk: vda      |       | disk: vdb      |
-+ +--------+-------+       +--------+-------+
-+          |                        |
-+ +--------v-------+       +--------v-------+
-+ | vda-1.qcow2    |       | vdb-1.qcow2    |
-+ |                |       |                |
-+ | bitmaps: chk-a |       | bitmaps: chk-a |
-+ |          chk-b |       |          chk-b |
-+ |                |       |                |
-+ +----------------+       +----------------+
-+
-+Bitmaps are created at the same time to track changes to all disks in sync and
-+are active and persisted in the QCOW2 image. Other formats currently don't
-+support this feature.
-+
-+Modification of bitmaps outside of libvirt is not recommended, but when adhering
-+to the same semantics which the document will describe it should be safe to do
-+so, even if we obviously can't guarantee that.
-+
-+
-+Integration with external snapshots
-+===================================
-+
-+Handling of bitmaps
-+-------------------
-+
-+Creating an external snapshot involves adding a new layer to the backing chain
-+on top of the previous chain. In this step there are no new bitmaps created by
-+default, which would mean that backups become impossible after this step.
-+
-+To prevent this from happening we need to re-create the active bitmaps in the
-+new top/active layer of the backing chain which allows us to continue tracking
-+the changes with same granularity as before and also allows libvirt to stitch
-+together all the corresponding bitmaps to do a backup across snapshots.
-+
-+After taking a snapshot of the ``vda`` disk from the example above placed into
-+``vda-2.qcow2`` the following topology will be created:
-+
-+::
-+
-+   +----------------+
-+   | disk: vda      |
-+   +-------+--------+
-+           |
-+   +-------v--------+    +----------------+
-+   | vda-2.qcow2    |    | vda-1.qcow2    |
-+   |                |    |                |
-+   | bitmaps: chk-a +----> bitmaps: chk-a |
-+   |          chk-b |    |          chk-b |
-+   |                |    |                |
-+   +----------------+    +----------------+
-+
-+Checking bitmap health
-+----------------------
-+
-+QEMU optimizes disk writes by only updating the bitmaps in certain cases. This
-+also can cause problems in cases when e.g. QEMU crashes.
-+
-+For a chain of corresponding bitmaps in a backing chain to be considered valid
-+and eligible for use with ``virDomainBackupBegin`` it must conform to the
-+following rules:
-+
-+1) Top image must contain the bitmap
-+2) If any of the backing images in the chain contain the bitmap too, all
-+   contiguous images must have the bitmap (no gaps)
-+3) all of the above bitmaps must be marked as active
-+   (``auto`` flag in ``qemu-img`` output, ``recording`` in qemu)
-+4) none of the above bitmaps can be inconsistent
-+   (``in-use`` flag in ``qemu-img`` provided that it's not used on image which
-+   is currently in use by a qemu instance, or ``inconsistent`` in qemu)
-+
-+::
-+
-+ # check that image has bitmaps
-+  $ qemu-img info vda-1.qcow2
-+   image: vda-1.qcow2
-+   file format: qcow2
-+   virtual size: 100 MiB (104857600 bytes)
-+   disk size: 220 KiB
-+   cluster_size: 65536
-+   Format specific information:
-+       compat: 1.1
-+       compression type: zlib
-+       lazy refcounts: false
-+       bitmaps:
-+           [0]:
-+               flags:
-+                   [0]: in-use
-+                   [1]: auto
-+               name: chk-a
-+               granularity: 65536
-+           [1]:
-+               flags:
-+                   [0]: auto
-+               name: chk-b
-+               granularity: 65536
-+       refcount bits: 16
-+       corrupt: false
-+
-+(See also the ``qemuBlockBitmapChainIsValid`` helper method in
-+``src/qemu/qemu_block.c``)
-+
-+Creating external snapshots manually
-+--------------------------------------
-+
-+To create the same topology outside of libvirt (e.g when doing snapshots offline)
-+a new ``qemu-img`` which supports the ``bitmap`` subcommand is recommended. The
-+following algorithm then ensures that the new image after snapshot will work
-+with backups (note that ``jq`` is a JSON processor):
-+
-+::
-+
-+  #!/bin/bash
-+
-+  # arguments
-+  SNAP_IMG="vda-2.qcow2"
-+  BACKING_IMG="vda-1.qcow2"
-+
-+  # constants - snapshots and bitmaps work only with qcow2
-+  SNAP_FMT="qcow2"
-+  BACKING_IMG_FMT="qcow2"
-+
-+  # create snapshot overlay
-+  qemu-img create -f "$SNAP_FMT" -F "$BACKING_IMG_FMT" -b "$BACKING_IMG" "$SNAP_IMG"
-+
-+  BACKING_IMG_INFO=$(qemu-img info --output=json -f "$BACKING_IMG_FMT" "$BACKING_IMG")
-+  BACKING_BITMAPS=$(jq '."format-specific".data.bitmaps' <<< "$BACKING_IMG_INFO")
-+
-+  if [ "x$BACKING_BITMAPS" = "xnull" ]; then
-+      exit 0
-+  fi
-+
-+  for BACKING_BITMAP_ in $(jq -c '.[]' <<< "$BACKING_BITMAPS"); do
-+      BITMAP_FLAGS=$(jq -c -r '.flags[]' <<< "$BACKING_BITMAP_")
-+      BITMAP_NAME=$(jq -r '.name' <<< "$BACKING_BITMAP_")
-+
-+      if grep 'in-use' <<< "$BITMAP_FLAGS" ||
-+         grep -v 'auto' <<< "$BITMAP_FLAGS"; then
-+         continue
-+      fi
-+
-+      qemu-img bitmap -f "$SNAP_FMT" "$SNAP_IMG" --add "$BITMAP_NAME"
-+
-+  done
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-kbase-backing_chains-Add-steps-how-to-securely-probe-image-format.patch b/SOURCES/libvirt-kbase-backing_chains-Add-steps-how-to-securely-probe-image-format.patch
deleted file mode 100644
index 942f80c..0000000
--- a/SOURCES/libvirt-kbase-backing_chains-Add-steps-how-to-securely-probe-image-format.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 9146b5849b0dfc2ee59eea09712cc7f5f88c88f2 Mon Sep 17 00:00:00 2001
-Message-Id: <9146b5849b0dfc2ee59eea09712cc7f5f88c88f2@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:45 +0100
-Subject: [PATCH] kbase: backing_chains: Add steps how to securely probe image
- format
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We document steps how to fix images if they are rejected for missing
-the 'backing file format' field. Document also how to securely probe
-the image format if it's unknown.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 82d5b762f11b50abb710c751251f28d4325a4c91)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <039ebfe436c361b067ef73a7c0bb16db1e410044.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/kbase/backing_chains.rst | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
-
-diff --git a/docs/kbase/backing_chains.rst b/docs/kbase/backing_chains.rst
-index 12ed6253ac..af848ccb14 100644
---- a/docs/kbase/backing_chains.rst
-+++ b/docs/kbase/backing_chains.rst
-@@ -176,6 +176,21 @@ properly. ``$BACKING_IMAGE_PATH`` should be specified as a full absolute path.
- If relative referencing of the backing image is desired, the path must be
- relative to the location of image described by ``$IMAGE_PATH``.
- 
-+**Important:** If the ``$BACKING_IMAGE_FORMAT`` is not known it can be queried
-+using ``qemu-img info $BACKING_IMAGE_PATH`` and looking for the ``file format:``
-+field, but for security reasons should be used *only* if at least one of the
-+following criteria is met:
-+
-+- ``file format`` is ``raw``
-+- ``backing file`` is NOT present
-+- ``backing file`` is present AND is correct/trusted
-+
-+Note that the last criteria may require manual inspection and thus should not
-+be scripted unless the trust for the image can be expressed programatically.
-+
-+Also note that the above steps may need to be repeated recursively for any
-+subsequent backing images.
-+
- Missing images reported after after moving disk images into a different path
- ----------------------------------------------------------------------------
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-kbase-backing_chains-Clarify-some-aspects-of-image-probing.patch b/SOURCES/libvirt-kbase-backing_chains-Clarify-some-aspects-of-image-probing.patch
deleted file mode 100644
index 12428cc..0000000
--- a/SOURCES/libvirt-kbase-backing_chains-Clarify-some-aspects-of-image-probing.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 2256db09e8b86b58be3c86b1575d64d7a9f5d05c Mon Sep 17 00:00:00 2001
-Message-Id: <2256db09e8b86b58be3c86b1575d64d7a9f5d05c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:44 +0100
-Subject: [PATCH] kbase: backing_chains: Clarify some aspects of image probing
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit d552b93448e253552c7e53a1240132c9763d2b24)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <b44052c081a18bec62762ab2a7358abd0e914a3a.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/kbase/backing_chains.rst | 16 ++++++++++++++--
- 1 file changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/docs/kbase/backing_chains.rst b/docs/kbase/backing_chains.rst
-index 3b3f0583e5..12ed6253ac 100644
---- a/docs/kbase/backing_chains.rst
-+++ b/docs/kbase/backing_chains.rst
-@@ -46,14 +46,17 @@ system used on the host so that the hypervisor can access the files and possibly
- also directly to configure the hypervisor to use the appropriate images. Thus
- it's important to properly setup the formats and paths of the backing images.
- 
-+Any externally created image should always use the -F switch of ``qemu-img``
-+to specify the format of the backing file to avoid probing.
-+
- Image detection caveats
- -----------------------
- 
- Detection of the backing chain requires libvirt to read and understand the
- ``backing file`` field recorded in the image metadata and also being able to
- recurse and read the backing file. Due to security implications libvirt
--will not attempt to detect the format of the backing image if the image metadata
--doesn't contain it.
-+will refuse to use backing images of any image whose format was not specified
-+explicitly in the XML or the overlay image itself.
- 
- Libvirt also might lack support for a network disk storage technology and thus
- may be unable to visit and detect backing chains on such storage. This may
-@@ -104,6 +107,8 @@ Note that it's also possible to partially specify the chain in the XML but omit
- the terminating element. This will result into probing from the last specified
- ``<backingStore>``
- 
-+Any image specified explicitly will not be probed for backing file or format.
-+
- 
- Manual image creation
- =====================
-@@ -113,6 +118,13 @@ them properly so that they work with libvirt as expected. The created disk
- images must contain the format of the backing image in the metadata. This
- means that the **-F** parameter of ``qemu-img`` must always be used.
- 
-+::
-+
-+  qemu-img -f qcow2 -F qcow2 -b /path/to/backing /path/to/overlay
-+
-+Note that if '/path/to/backing' is relative the path is considered relative to
-+the location of '/path/to/overlay'.
-+
- Troubleshooting
- ===============
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-network-be-more-verbose-about-the-reason-for-a-firewall-reload.patch b/SOURCES/libvirt-network-be-more-verbose-about-the-reason-for-a-firewall-reload.patch
deleted file mode 100644
index 4499c36..0000000
--- a/SOURCES/libvirt-network-be-more-verbose-about-the-reason-for-a-firewall-reload.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 3a0200ee7544307a9708a6e876603425647bad34 Mon Sep 17 00:00:00 2001
-Message-Id: <3a0200ee7544307a9708a6e876603425647bad34@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:48 -0500
-Subject: [PATCH] network: be more verbose about the reason for a firewall
- reload
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit c102bbd3efc358fb44fa2bb37fb0bcbeaaab72a5)
-
-Conflicts: src/network/bridge_driver.c:
-    some minor things due to upstream switch to using glib for DBus
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20210116035151.1066734-6-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/network/bridge_driver.c | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
-index c9c45df758..5995396f78 100644
---- a/src/network/bridge_driver.c
-+++ b/src/network/bridge_driver.c
-@@ -665,6 +665,7 @@ firewalld_dbus_filter_bridge(DBusConnection *connection G_GNUC_UNUSED,
-     if (dbus_message_is_signal(message,
-                                "org.fedoraproject.FirewallD1", "Reloaded")) {
-         reload = true;
-+        VIR_DEBUG("Reload in bridge_driver because of 'Reloaded' signal");
- 
-     } else if (dbus_message_is_signal(message,
-                                       DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
-@@ -681,14 +682,15 @@ firewalld_dbus_filter_bridge(DBusConnection *connection G_GNUC_UNUSED,
-          * if new_owner is empty, firewalld is shutting down. If it is
-          * non-empty, then it is starting
-          */
--        if (new_owner && *new_owner)
-+        if (new_owner && *new_owner) {
-+            VIR_DEBUG("Reload in bridge_driver because of 'NameOwnerChanged' signal, new owner is: '%s'",
-+                      new_owner);
-             reload = true;
-+        }
-     }
- 
--    if (reload) {
--        VIR_DEBUG("Reload in bridge_driver because of firewalld.");
-+    if (reload)
-         networkReloadFirewallRules(driver, false);
--    }
- 
-     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-network-force-re-creation-of-iptables-private-chains-on-firewalld-restart.patch b/SOURCES/libvirt-network-force-re-creation-of-iptables-private-chains-on-firewalld-restart.patch
deleted file mode 100644
index f35830d..0000000
--- a/SOURCES/libvirt-network-force-re-creation-of-iptables-private-chains-on-firewalld-restart.patch
+++ /dev/null
@@ -1,282 +0,0 @@
-From 021167719bebe7fb7a0e366c371b6c7057ebed7e Mon Sep 17 00:00:00 2001
-Message-Id: <021167719bebe7fb7a0e366c371b6c7057ebed7e@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Wed, 14 Apr 2021 23:25:34 -0400
-Subject: [PATCH] network: force re-creation of iptables private chains on
- firewalld restart
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When firewalld is stopped, it removes *all* iptables rules and chains,
-including those added by libvirt. Since restarting firewalld means
-stopping and then starting it, any time it is restarted, libvirt needs
-to recreate all the private iptables chains it uses, along with all
-the rules it adds.
-
-We already have code in place to call networkReloadFirewallRules() any
-time we're notified of a firewalld start, and
-networkReloadFirewallRules() will call
-networkPreReloadFirewallRules(), which calls
-networkSetupPrivateChains(); unfortunately that last call is called
-using virOnce(), meaning that it will only be called the first time
-through networkPreReloadFirewallRules() after libvirtd starts - so of
-course when firewalld is later restarted, the call to
-networkSetupPrivateChains() is skipped.
-
-The neat and tidy way to fix this would be if there was a standard way
-to reset a pthread_once_t object so that the next time virOnce was
-called, it would think the function hadn't been called, and call it
-again. Unfortunately, there isn't any official way of doing that (we
-*could* just fill it with 0 and hope for the best, but that doesn't
-seem very safe.
-
-So instead, this patch just adds a static variable called
-chainInitDone, which is set to true after networkSetupPrivateChains()
-is called for the first time, and then during calls to
-networkPreReloadFirewallRules(), if chainInitDone is set, we call
-networkSetupPrivateChains() directly instead of via virOnce().
-
-It may seem unsafe to directly call a function that is meant to be
-called only once, but I think in this case we're safe - there's
-nothing in the function that is inherently "once only" - it doesn't
-initialize anything that can't safely be re-initialized (as long as
-two threads don't try to do it at the same time), and it only happens
-when responding to a dbus message that firewalld has been started (and
-I don't think it's possible for us to be processing two of those at
-once), and even then only if the initial call to the function has
-already been completed (so we're safe if we receive a firewalld
-restart call at a time when we haven't yet called it, or even if
-another thread is already in the process of executing it. The only
-problematic bit I can think of is if another thread is in the process
-of adding an iptable rule at the time we're executing this function,
-but 1) none of those threads will be trying to add chains, and 2) if
-there was a concurrency problem with other threads adding iptables
-rules while firewalld was being restarted, it would still be a problem
-even without this change.
-
-This is yet another patch that fixes an occurrence of this error:
-
-COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --table filter --insert LIBVIRT_INP --in-interface virbr0 --protocol tcp --destination-port 67 --jump ACCEPT' failed: iptables: No chain/target/match by that name.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit f5418b427e7d2f26803880309478de9103680826)
-
-https://bugzilla.redhat.com/1942805
-(cloned from the RHEL-AV version: https://bugzilla.redhat.com/1813830 )
-
-Conflicts:
-  src/network/bridge_driver.c:
-    In one place a later commit was backported prior to this commit,
-    removing a VIR_DEBUG line and some { }. (see upstream commit
-    c102bbd3efc35, which was backported for
-    https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20210415032534.723202-3-laine@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- src/network/bridge_driver.c          | 16 ++++---
- src/network/bridge_driver_linux.c    | 69 ++++++++++++++++++----------
- src/network/bridge_driver_nop.c      |  3 +-
- src/network/bridge_driver_platform.h |  2 +-
- 4 files changed, 58 insertions(+), 32 deletions(-)
-
-diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
-index 5995396f78..b8118067d1 100644
---- a/src/network/bridge_driver.c
-+++ b/src/network/bridge_driver.c
-@@ -271,7 +271,9 @@ static int
- networkShutdownNetworkExternal(virNetworkObjPtr obj);
- 
- static void
--networkReloadFirewallRules(virNetworkDriverStatePtr driver, bool startup);
-+networkReloadFirewallRules(virNetworkDriverStatePtr driver,
-+                           bool startup,
-+                           bool force);
- 
- static void
- networkRefreshDaemons(virNetworkDriverStatePtr driver);
-@@ -690,7 +692,7 @@ firewalld_dbus_filter_bridge(DBusConnection *connection G_GNUC_UNUSED,
-     }
- 
-     if (reload)
--        networkReloadFirewallRules(driver, false);
-+        networkReloadFirewallRules(driver, false, true);
- 
-     return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
- }
-@@ -791,7 +793,7 @@ networkStateInitialize(bool privileged,
-     virNetworkObjListPrune(network_driver->networks,
-                            VIR_CONNECT_LIST_NETWORKS_INACTIVE |
-                            VIR_CONNECT_LIST_NETWORKS_TRANSIENT);
--    networkReloadFirewallRules(network_driver, true);
-+    networkReloadFirewallRules(network_driver, true, false);
-     networkRefreshDaemons(network_driver);
- 
-     if (virDriverShouldAutostart(network_driver->stateDir, &autostart) < 0)
-@@ -861,7 +863,7 @@ networkStateReload(void)
-                                 network_driver->networkConfigDir,
-                                 network_driver->networkAutostartDir,
-                                 network_driver->xmlopt);
--    networkReloadFirewallRules(network_driver, false);
-+    networkReloadFirewallRules(network_driver, false, false);
-     networkRefreshDaemons(network_driver);
-     virNetworkObjListForEach(network_driver->networks,
-                              networkAutostartConfig,
-@@ -2229,14 +2231,16 @@ networkReloadFirewallRulesHelper(virNetworkObjPtr obj,
- 
- 
- static void
--networkReloadFirewallRules(virNetworkDriverStatePtr driver, bool startup)
-+networkReloadFirewallRules(virNetworkDriverStatePtr driver,
-+                           bool startup,
-+                           bool force)
- {
-     VIR_INFO("Reloading iptables rules");
-     /* Ideally we'd not even register the driver when unprivilegd
-      * but until we untangle the virt driver that's not viable */
-     if (!driver->privileged)
-         return;
--    networkPreReloadFirewallRules(driver, startup);
-+    networkPreReloadFirewallRules(driver, startup, force);
-     virNetworkObjListForEach(driver->networks,
-                              networkReloadFirewallRulesHelper,
-                              NULL);
-diff --git a/src/network/bridge_driver_linux.c b/src/network/bridge_driver_linux.c
-index b6b324d1d5..f707bf8e47 100644
---- a/src/network/bridge_driver_linux.c
-+++ b/src/network/bridge_driver_linux.c
-@@ -36,11 +36,14 @@ VIR_LOG_INIT("network.bridge_driver_linux");
- #define PROC_NET_ROUTE "/proc/net/route"
- 
- static virOnceControl createdOnce;
--static bool createdChains;
-+static bool chainInitDone; /* true iff networkSetupPrivateChains was ever called */
-+static bool createdChains; /* true iff networkSetupPrivateChains created chains during most recent call */
- static virErrorPtr errInitV4;
- static virErrorPtr errInitV6;
- 
--/* Only call via virOnce */
-+/* Usually only called via virOnce, but can also be called directly in
-+ * response to firewalld reload (if chainInitDone == true)
-+ */
- static void networkSetupPrivateChains(void)
- {
-     int rc;
-@@ -82,6 +85,8 @@ static void networkSetupPrivateChains(void)
-             VIR_DEBUG("Global IPv6 chains already exist");
-         }
-     }
-+
-+    chainInitDone = true;
- }
- 
- 
-@@ -111,7 +116,10 @@ networkHasRunningNetworks(virNetworkDriverStatePtr driver)
- }
- 
- 
--void networkPreReloadFirewallRules(virNetworkDriverStatePtr driver, bool startup)
-+void
-+networkPreReloadFirewallRules(virNetworkDriverStatePtr driver,
-+                              bool startup,
-+                              bool force)
- {
-     /*
-      * If there are any running networks, we need to
-@@ -130,29 +138,42 @@ void networkPreReloadFirewallRules(virNetworkDriverStatePtr driver, bool startup
-      * of starting the network though as that makes them
-      * more likely to be seen by a human
-      */
--    if (!networkHasRunningNetworks(driver)) {
--        VIR_DEBUG("Delayed global rule setup as no networks are running");
--        return;
--    }
-+    if (chainInitDone && force) {
-+        /* The Private chains have already been initialized once
-+         * during this run of libvirtd, so 1) we can't do it again via
-+         * virOnce(), and 2) we need to re-add the private chains even
-+         * if there are currently no running networks, because the
-+         * next time a network is started, libvirt will expect that
-+         * the chains have already been added. So we call directly
-+         * instead of via virOnce().
-+         */
-+        networkSetupPrivateChains();
- 
--    ignore_value(virOnce(&createdOnce, networkSetupPrivateChains));
-+    } else {
-+        if (!networkHasRunningNetworks(driver)) {
-+            VIR_DEBUG("Delayed global rule setup as no networks are running");
-+            return;
-+        }
- 
--    /*
--     * If this is initial startup, and we just created the
--     * top level private chains we either
--     *
--     *   - upgraded from old libvirt
--     *   - freshly booted from clean state
--     *
--     * In the first case we must delete the old rules from
--     * the built-in chains, instead of our new private chains.
--     * In the second case it doesn't matter, since no existing
--     * rules will be present. Thus we can safely just tell it
--     * to always delete from the builin chain
--     */
--    if (startup && createdChains) {
--        VIR_DEBUG("Requesting cleanup of legacy firewall rules");
--        iptablesSetDeletePrivate(false);
-+        ignore_value(virOnce(&createdOnce, networkSetupPrivateChains));
-+
-+        /*
-+         * If this is initial startup, and we just created the
-+         * top level private chains we either
-+         *
-+         *   - upgraded from old libvirt
-+         *   - freshly booted from clean state
-+         *
-+         * In the first case we must delete the old rules from
-+         * the built-in chains, instead of our new private chains.
-+         * In the second case it doesn't matter, since no existing
-+         * rules will be present. Thus we can safely just tell it
-+         * to always delete from the builin chain
-+         */
-+        if (startup && createdChains) {
-+            VIR_DEBUG("Requesting cleanup of legacy firewall rules");
-+            iptablesSetDeletePrivate(false);
-+        }
-     }
- }
- 
-diff --git a/src/network/bridge_driver_nop.c b/src/network/bridge_driver_nop.c
-index 08d737511f..db89c10023 100644
---- a/src/network/bridge_driver_nop.c
-+++ b/src/network/bridge_driver_nop.c
-@@ -20,7 +20,8 @@
- #include <config.h>
- 
- void networkPreReloadFirewallRules(virNetworkDriverStatePtr driver G_GNUC_UNUSED,
--                                   bool startup G_GNUC_UNUSED)
-+                                   bool startup G_GNUC_UNUSED,
-+                                   bool force G_GNUC_UNUSED)
- {
- }
- 
-diff --git a/src/network/bridge_driver_platform.h b/src/network/bridge_driver_platform.h
-index 169417a6c0..48ab52c160 100644
---- a/src/network/bridge_driver_platform.h
-+++ b/src/network/bridge_driver_platform.h
-@@ -62,7 +62,7 @@ struct _virNetworkDriverState {
- typedef struct _virNetworkDriverState virNetworkDriverState;
- typedef virNetworkDriverState *virNetworkDriverStatePtr;
- 
--void networkPreReloadFirewallRules(virNetworkDriverStatePtr driver, bool startup);
-+void networkPreReloadFirewallRules(virNetworkDriverStatePtr driver, bool startup, bool force);
- void networkPostReloadFirewallRules(bool startup);
- 
- int networkCheckRouteCollision(virNetworkDefPtr def);
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-network-make-it-safe-to-call-networkSetupPrivateChains-multiple-times.patch b/SOURCES/libvirt-network-make-it-safe-to-call-networkSetupPrivateChains-multiple-times.patch
deleted file mode 100644
index b07b70d..0000000
--- a/SOURCES/libvirt-network-make-it-safe-to-call-networkSetupPrivateChains-multiple-times.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 4792bd80c542f7af373bc939492017bd420a3f3b Mon Sep 17 00:00:00 2001
-Message-Id: <4792bd80c542f7af373bc939492017bd420a3f3b@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Wed, 14 Apr 2021 23:25:33 -0400
-Subject: [PATCH] network: make it safe to call networkSetupPrivateChains()
- multiple times
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-networkSetupPrivateChains() is currently called only once per run of
-libvirtd, so it can assume that errInitV4 and errInitV6 are empty/null
-when it is called. In preparation for potentially calling this
-function multiple times during one run, this patch moves the reset of
-errInitV[46] to the top of the function, to assure no memory is
-leaked.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit de110f110fb917a31b9f33ad8e4b3c1d3284766a)
-
-https://bugzilla.redhat.com/1942805
-
-Message-Id: <20210415032534.723202-2-laine@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- src/network/bridge_driver_linux.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/network/bridge_driver_linux.c b/src/network/bridge_driver_linux.c
-index 9de8e93c60..b6b324d1d5 100644
---- a/src/network/bridge_driver_linux.c
-+++ b/src/network/bridge_driver_linux.c
-@@ -48,6 +48,10 @@ static void networkSetupPrivateChains(void)
-     VIR_DEBUG("Setting up global firewall chains");
- 
-     createdChains = false;
-+    virFreeError(errInitV4);
-+    errInitV4 = NULL;
-+    virFreeError(errInitV6);
-+    errInitV6 = NULL;
- 
-     rc = iptablesSetupPrivateChains(VIR_FIREWALL_LAYER_IPV4);
-     if (rc < 0) {
-@@ -56,8 +60,6 @@ static void networkSetupPrivateChains(void)
-         errInitV4 = virSaveLastError();
-         virResetLastError();
-     } else {
--        virFreeError(errInitV4);
--        errInitV4 = NULL;
-         if (rc) {
-             VIR_DEBUG("Created global IPv4 chains");
-             createdChains = true;
-@@ -73,8 +75,6 @@ static void networkSetupPrivateChains(void)
-         errInitV6 = virSaveLastError();
-         virResetLastError();
-     } else {
--        virFreeError(errInitV6);
--        errInitV6 = NULL;
-         if (rc) {
-             VIR_DEBUG("Created global IPv6 chains");
-             createdChains = true;
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-node_device-Rework-udevKludgeStorageType.patch b/SOURCES/libvirt-node_device-Rework-udevKludgeStorageType.patch
new file mode 100644
index 0000000..0635fd0
--- /dev/null
+++ b/SOURCES/libvirt-node_device-Rework-udevKludgeStorageType.patch
@@ -0,0 +1,84 @@
+From 71a79a215d278d83f3cd3da330e0378209983b6b Mon Sep 17 00:00:00 2001
+Message-Id: <71a79a215d278d83f3cd3da330e0378209983b6b@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 26 Jan 2022 14:00:13 +0100
+Subject: [PATCH] node_device: Rework udevKludgeStorageType()
+
+The udevKludgeStorageType() function looks at devlink name
+(/dev/XXX) and guesses the type of the (storage) device using a
+series of STRPREFIX() calls. Well those can be turn into an array
+and a for() loop, especially if we are about to add a new case
+(in the next commit).
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Peter Krempa <pkrempa@redhat.com>
+(cherry picked from commit ec9e2adb961f2e1a121f47e7985142e827f3347b)
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2056673
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/node_device/node_device_udev.c | 43 ++++++++++++++++--------------
+ 1 file changed, 23 insertions(+), 20 deletions(-)
+
+diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
+index cd1722f934..dd18401e78 100644
+--- a/src/node_device/node_device_udev.c
++++ b/src/node_device/node_device_udev.c
+@@ -890,32 +890,35 @@ udevProcessDASD(struct udev_device *device,
+ static int
+ udevKludgeStorageType(virNodeDeviceDef *def)
+ {
++    size_t i;
++    const struct {
++        const char *prefix;
++        const char *subst;
++    } fixups[] = {
++        /* virtio disk */
++        { "/dev/vd", "disk" },
++
++        /* For Direct Access Storage Devices (DASDs) there are
++         * currently no identifiers in udev besides ID_PATH. Since
++         * ID_TYPE=disk does not exist on DASDs they fall through
++         * the udevProcessStorage detection logic. */
++        { "/dev/dasd", "dasd" },
++    };
++
+     VIR_DEBUG("Could not find definitive storage type for device "
+               "with sysfs path '%s', trying to guess it",
+               def->sysfs_path);
+ 
+-    /* virtio disk */
+-    if (STRPREFIX(def->caps->data.storage.block, "/dev/vd")) {
+-        def->caps->data.storage.drive_type = g_strdup("disk");
+-        VIR_DEBUG("Found storage type '%s' for device "
+-                  "with sysfs path '%s'",
+-                  def->caps->data.storage.drive_type,
+-                  def->sysfs_path);
+-        return 0;
++    for (i = 0; i < G_N_ELEMENTS(fixups); i++) {
++        if (STRPREFIX(def->caps->data.storage.block, fixups[i].prefix)) {
++            def->caps->data.storage.drive_type = g_strdup(fixups[i].subst);
++            VIR_DEBUG("Found storage type '%s' for device with sysfs path '%s'",
++                      def->caps->data.storage.drive_type,
++                      def->sysfs_path);
++            return 0;
++        }
+     }
+ 
+-    /* For Direct Access Storage Devices (DASDs) there are
+-     * currently no identifiers in udev besides ID_PATH. Since
+-     * ID_TYPE=disk does not exist on DASDs they fall through
+-     * the udevProcessStorage detection logic. */
+-    if (STRPREFIX(def->caps->data.storage.block, "/dev/dasd")) {
+-        def->caps->data.storage.drive_type = g_strdup("dasd");
+-        VIR_DEBUG("Found storage type '%s' for device "
+-                  "with sysfs path '%s'",
+-                  def->caps->data.storage.drive_type,
+-                  def->sysfs_path);
+-        return 0;
+-    }
+     VIR_DEBUG("Could not determine storage type "
+               "for device with sysfs path '%s'", def->sysfs_path);
+     return -1;
+-- 
+2.35.1
+
diff --git a/SOURCES/libvirt-node_device-Treat-NVMe-disks-as-regular-disks.patch b/SOURCES/libvirt-node_device-Treat-NVMe-disks-as-regular-disks.patch
new file mode 100644
index 0000000..259e8d2
--- /dev/null
+++ b/SOURCES/libvirt-node_device-Treat-NVMe-disks-as-regular-disks.patch
@@ -0,0 +1,39 @@
+From c04c7a986bd3514730e4169bf1a70bbec1fda006 Mon Sep 17 00:00:00 2001
+Message-Id: <c04c7a986bd3514730e4169bf1a70bbec1fda006@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 26 Jan 2022 13:47:33 +0100
+Subject: [PATCH] node_device: Treat NVMe disks as regular disks
+
+Unfortunately, udev doesn't set ID_TYPE attribute for NVMe disks,
+therefore we have to add another case into udevKludgeStorageType()
+to treat /dev/nvme* devlinks as any other disk.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2045953
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Peter Krempa <pkrempa@redhat.com>
+(cherry picked from commit f103976ff34a52298df1810d82ececa3e7da4291)
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2056673
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/node_device/node_device_udev.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
+index dd18401e78..a9e8bf10da 100644
+--- a/src/node_device/node_device_udev.c
++++ b/src/node_device/node_device_udev.c
+@@ -903,6 +903,11 @@ udevKludgeStorageType(virNodeDeviceDef *def)
+          * ID_TYPE=disk does not exist on DASDs they fall through
+          * the udevProcessStorage detection logic. */
+         { "/dev/dasd", "dasd" },
++
++        /* NVMe disk. While strictly speaking /dev/nvme is a
++         * controller not a disk, this function is called if and
++         * only if @def is of VIR_NODE_DEV_CAP_STORAGE type. */
++        { "/dev/nvme", "disk" },
+     };
+ 
+     VIR_DEBUG("Could not find definitive storage type for device "
+-- 
+2.35.1
+
diff --git a/SOURCES/libvirt-node_device-detect-CSS-devices.patch b/SOURCES/libvirt-node_device-detect-CSS-devices.patch
deleted file mode 100644
index a25595a..0000000
--- a/SOURCES/libvirt-node_device-detect-CSS-devices.patch
+++ /dev/null
@@ -1,261 +0,0 @@
-From 7604b24349c47ff008b1366eb19fc2959614fb71 Mon Sep 17 00:00:00 2001
-Message-Id: <7604b24349c47ff008b1366eb19fc2959614fb71@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Thu, 8 Oct 2020 11:06:57 -0400
-Subject: [PATCH] node_device: detect CSS devices
-
-Make channel subsystem (CSS) devices available in the node_device driver.
-The CCS devices reside in the computer system and provide CCW devices, e.g.:
-
-  +- css_0_0_003a
-      |
-      +- ccw_0_0_1a2b
-          |
-          +- scsi_host0
-              |
-              +- scsi_target0_0_0
-                  |
-                  +- scsi_0_0_0_0
-
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-(cherry picked from commit 05e6cdafa6e083a1d83e1f2e34b6472c60cc67ac)
-https://bugzilla.redhat.com/show_bug.cgi?id=1853289
-https://bugzilla.redhat.com/show_bug.cgi?id=1865932
-Message-Id: <20201008150700.52157-3-bfiuczyn@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- docs/schemas/nodedev.rng                      | 16 ++++++++++++++
- src/conf/node_device_conf.c                   |  5 +++++
- src/conf/node_device_conf.h                   |  1 +
- src/conf/virnodedeviceobj.c                   |  1 +
- src/node_device/node_device_udev.c            | 22 +++++++++++++++++++
- .../ccw_0_0_10000-invalid.xml                 |  4 ++--
- tests/nodedevschemadata/ccw_0_0_ffff.xml      |  4 ++--
- tests/nodedevschemadata/css_0_0_ffff.xml      | 10 +++++++++
- tests/nodedevxml2xmltest.c                    |  1 +
- tools/virsh-nodedev.c                         |  1 +
- 10 files changed, 61 insertions(+), 4 deletions(-)
- create mode 100644 tests/nodedevschemadata/css_0_0_ffff.xml
-
-diff --git a/docs/schemas/nodedev.rng b/docs/schemas/nodedev.rng
-index fe6ffa0b53..6ac5804bfb 100644
---- a/docs/schemas/nodedev.rng
-+++ b/docs/schemas/nodedev.rng
-@@ -85,6 +85,7 @@
-         <ref name="capdrm"/>
-         <ref name="capmdev"/>
-         <ref name="capccwdev"/>
-+        <ref name="capcssdev"/>
-       </choice>
-     </element>
-   </define>
-@@ -651,6 +652,21 @@
-     </element>
-   </define>
- 
-+  <define name='capcssdev'>
-+    <attribute name='type'>
-+      <value>css</value>
-+    </attribute>
-+    <element name='cssid'>
-+      <ref name='ccwCssidRange'/>
-+    </element>
-+    <element name='ssid'>
-+      <ref name='ccwSsidRange'/>
-+    </element>
-+    <element name='devno'>
-+      <ref name='ccwDevnoRange'/>
-+    </element>
-+  </define>
-+
-   <define name='address'>
-     <element name='address'>
-       <attribute name='domain'><ref name='hexuint'/></attribute>
-diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
-index 4cf5b6e3d7..0a34faa29a 100644
---- a/src/conf/node_device_conf.c
-+++ b/src/conf/node_device_conf.c
-@@ -65,6 +65,7 @@ VIR_ENUM_IMPL(virNodeDevCap,
-               "mdev_types",
-               "mdev",
-               "ccw",
-+              "css",
- );
- 
- VIR_ENUM_IMPL(virNodeDevNetCap,
-@@ -588,6 +589,7 @@ virNodeDeviceDefFormat(const virNodeDeviceDef *def)
-                               data->mdev.iommuGroupNumber);
-             break;
-         case VIR_NODE_DEV_CAP_CCW_DEV:
-+        case VIR_NODE_DEV_CAP_CSS_DEV:
-             virBufferAsprintf(&buf, "<cssid>0x%x</cssid>\n",
-                               data->ccw_dev.cssid);
-             virBufferAsprintf(&buf, "<ssid>0x%x</ssid>\n",
-@@ -1893,6 +1895,7 @@ virNodeDevCapsDefParseXML(xmlXPathContextPtr ctxt,
-         ret = virNodeDevCapMdevParseXML(ctxt, def, node, &caps->data.mdev);
-         break;
-     case VIR_NODE_DEV_CAP_CCW_DEV:
-+    case VIR_NODE_DEV_CAP_CSS_DEV:
-         ret = virNodeDevCapCCWParseXML(ctxt, def, node, &caps->data.ccw_dev);
-         break;
-     case VIR_NODE_DEV_CAP_MDEV_TYPES:
-@@ -2211,6 +2214,7 @@ virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps)
-     case VIR_NODE_DEV_CAP_FC_HOST:
-     case VIR_NODE_DEV_CAP_VPORTS:
-     case VIR_NODE_DEV_CAP_CCW_DEV:
-+    case VIR_NODE_DEV_CAP_CSS_DEV:
-     case VIR_NODE_DEV_CAP_LAST:
-         /* This case is here to shutup the compiler */
-         break;
-@@ -2264,6 +2268,7 @@ virNodeDeviceUpdateCaps(virNodeDeviceDefPtr def)
-         case VIR_NODE_DEV_CAP_MDEV_TYPES:
-         case VIR_NODE_DEV_CAP_MDEV:
-         case VIR_NODE_DEV_CAP_CCW_DEV:
-+        case VIR_NODE_DEV_CAP_CSS_DEV:
-         case VIR_NODE_DEV_CAP_LAST:
-             break;
-         }
-diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
-index bf7939fbb3..19ea3fc7c2 100644
---- a/src/conf/node_device_conf.h
-+++ b/src/conf/node_device_conf.h
-@@ -65,6 +65,7 @@ typedef enum {
-     VIR_NODE_DEV_CAP_MDEV_TYPES,        /* Device capable of mediated devices */
-     VIR_NODE_DEV_CAP_MDEV,              /* Mediated device */
-     VIR_NODE_DEV_CAP_CCW_DEV,           /* s390 CCW device */
-+    VIR_NODE_DEV_CAP_CSS_DEV,           /* s390 channel subsystem device */
- 
-     VIR_NODE_DEV_CAP_LAST
- } virNodeDevCapType;
-diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
-index 3a34a324ca..8c8ffd6d24 100644
---- a/src/conf/virnodedeviceobj.c
-+++ b/src/conf/virnodedeviceobj.c
-@@ -676,6 +676,7 @@ virNodeDeviceObjHasCap(const virNodeDeviceObj *obj,
-         case VIR_NODE_DEV_CAP_MDEV_TYPES:
-         case VIR_NODE_DEV_CAP_MDEV:
-         case VIR_NODE_DEV_CAP_CCW_DEV:
-+        case VIR_NODE_DEV_CAP_CSS_DEV:
-         case VIR_NODE_DEV_CAP_LAST:
-             break;
-         }
-diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
-index 9667a042bd..efe3cebd6a 100644
---- a/src/node_device/node_device_udev.c
-+++ b/src/node_device/node_device_udev.c
-@@ -1097,6 +1097,24 @@ udevProcessCCW(struct udev_device *device,
- }
- 
- 
-+static int
-+udevProcessCSS(struct udev_device *device,
-+               virNodeDeviceDefPtr def)
-+{
-+    /* only process IO subchannel and vfio-ccw devices to keep the list sane */
-+    if (STRNEQ(def->driver, "io_subchannel") &&
-+        STRNEQ(def->driver, "vfio_ccw"))
-+        return -1;
-+
-+    if (udevGetCCWAddress(def->sysfs_path, &def->caps->data) < 0)
-+        return -1;
-+
-+    if (udevGenerateDeviceName(device, def, NULL) != 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
- static int
- udevGetDeviceNodes(struct udev_device *device,
-                    virNodeDeviceDefPtr def)
-@@ -1175,6 +1193,8 @@ udevGetDeviceType(struct udev_device *device,
-             *type = VIR_NODE_DEV_CAP_MDEV;
-         else if (STREQ_NULLABLE(subsystem, "ccw"))
-             *type = VIR_NODE_DEV_CAP_CCW_DEV;
-+        else if (STREQ_NULLABLE(subsystem, "css"))
-+            *type = VIR_NODE_DEV_CAP_CSS_DEV;
- 
-         VIR_FREE(subsystem);
-     }
-@@ -1219,6 +1239,8 @@ udevGetDeviceDetails(struct udev_device *device,
-         return udevProcessMediatedDevice(device, def);
-     case VIR_NODE_DEV_CAP_CCW_DEV:
-         return udevProcessCCW(device, def);
-+    case VIR_NODE_DEV_CAP_CSS_DEV:
-+        return udevProcessCSS(device, def);
-     case VIR_NODE_DEV_CAP_MDEV_TYPES:
-     case VIR_NODE_DEV_CAP_SYSTEM:
-     case VIR_NODE_DEV_CAP_FC_HOST:
-diff --git a/tests/nodedevschemadata/ccw_0_0_10000-invalid.xml b/tests/nodedevschemadata/ccw_0_0_10000-invalid.xml
-index d840555c09..f3cf0c1c66 100644
---- a/tests/nodedevschemadata/ccw_0_0_10000-invalid.xml
-+++ b/tests/nodedevschemadata/ccw_0_0_10000-invalid.xml
-@@ -1,7 +1,7 @@
- <device>
-   <name>ccw_0_0_10000</name>
--  <path>/sys/devices/css0/0.0.0000/0.0.10000</path>
--  <parent>computer</parent>
-+  <path>/sys/devices/css0/0.0.0070/0.0.10000</path>
-+  <parent>css_0_0_0070</parent>
-   <capability type='ccw'>
-     <cssid>0x0</cssid>
-     <ssid>0x0</ssid>
-diff --git a/tests/nodedevschemadata/ccw_0_0_ffff.xml b/tests/nodedevschemadata/ccw_0_0_ffff.xml
-index 5ecd0b0aae..3b8ea46e37 100644
---- a/tests/nodedevschemadata/ccw_0_0_ffff.xml
-+++ b/tests/nodedevschemadata/ccw_0_0_ffff.xml
-@@ -1,7 +1,7 @@
- <device>
-   <name>ccw_0_0_ffff</name>
--  <path>/sys/devices/css0/0.0.0000/0.0.ffff</path>
--  <parent>computer</parent>
-+  <path>/sys/devices/css0/0.0.0070/0.0.ffff</path>
-+  <parent>css_0_0_0070</parent>
-   <capability type='ccw'>
-     <cssid>0x0</cssid>
-     <ssid>0x0</ssid>
-diff --git a/tests/nodedevschemadata/css_0_0_ffff.xml b/tests/nodedevschemadata/css_0_0_ffff.xml
-new file mode 100644
-index 0000000000..312e07fe65
---- /dev/null
-+++ b/tests/nodedevschemadata/css_0_0_ffff.xml
-@@ -0,0 +1,10 @@
-+<device>
-+  <name>css_0_0_ffff</name>
-+  <path>/sys/devices/css0/0.0.ffff</path>
-+  <parent>computer</parent>
-+  <capability type='css'>
-+    <cssid>0x0</cssid>
-+    <ssid>0x0</ssid>
-+    <devno>0xffff</devno>
-+  </capability>
-+</device>
-diff --git a/tests/nodedevxml2xmltest.c b/tests/nodedevxml2xmltest.c
-index 6168c29c70..3cb23b1df4 100644
---- a/tests/nodedevxml2xmltest.c
-+++ b/tests/nodedevxml2xmltest.c
-@@ -123,6 +123,7 @@ mymain(void)
-     DO_TEST("pci_0000_02_10_7_mdev_types");
-     DO_TEST("mdev_3627463d_b7f0_4fea_b468_f1da537d301b");
-     DO_TEST("ccw_0_0_ffff");
-+    DO_TEST("css_0_0_ffff");
- 
-     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
-diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
-index cb2fc26d1a..26b3acc608 100644
---- a/tools/virsh-nodedev.c
-+++ b/tools/virsh-nodedev.c
-@@ -461,6 +461,7 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd G_GNUC_UNUSED)
-         case VIR_NODE_DEV_CAP_CCW_DEV:
-             flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_CCW_DEV;
-             break;
-+        case VIR_NODE_DEV_CAP_CSS_DEV:
-         case VIR_NODE_DEV_CAP_LAST:
-             break;
-         }
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-node_device-detect-DASD-devices.patch b/SOURCES/libvirt-node_device-detect-DASD-devices.patch
deleted file mode 100644
index 626d59f..0000000
--- a/SOURCES/libvirt-node_device-detect-DASD-devices.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From c83c1121508cc4283f372789398a909146803b72 Mon Sep 17 00:00:00 2001
-Message-Id: <c83c1121508cc4283f372789398a909146803b72@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Thu, 8 Oct 2020 11:06:59 -0400
-Subject: [PATCH] node_device: detect DASD devices
-
-Make Direct Access Storage Devices (DASDs) available in the node_device driver.
-
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-(cherry picked from commit 33bbf589dd739c48ff20d2120e8c4018d241d32f)
-https://bugzilla.redhat.com/show_bug.cgi?id=1853289
-https://bugzilla.redhat.com/show_bug.cgi?id=1865932
-Message-Id: <20201008150700.52157-5-bfiuczyn@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- src/node_device/node_device_udev.c | 28 ++++++++++++++++++++++++++++
- 1 file changed, 28 insertions(+)
-
-diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
-index efe3cebd6a..b6b28bc35a 100644
---- a/src/node_device/node_device_udev.c
-+++ b/src/node_device/node_device_udev.c
-@@ -870,6 +870,19 @@ udevProcessSD(struct udev_device *device,
- }
- 
- 
-+static int
-+udevProcessDASD(struct udev_device *device,
-+                virNodeDeviceDefPtr def)
-+{
-+    virNodeDevCapStoragePtr storage = &def->caps->data.storage;
-+
-+    if (udevGetStringSysfsAttr(device, "device/uid", &storage->serial) < 0)
-+        return -1;
-+
-+    return udevProcessDisk(device, def);
-+}
-+
-+
- /* This function exists to deal with the case in which a driver does
-  * not provide a device type in the usual place, but udev told us it's
-  * a storage device, and we can make a good guess at what kind of
-@@ -890,6 +903,19 @@ udevKludgeStorageType(virNodeDeviceDefPtr def)
-                   def->sysfs_path);
-         return 0;
-     }
-+
-+    /* For Direct Access Storage Devices (DASDs) there are
-+     * currently no identifiers in udev besides ID_PATH. Since
-+     * ID_TYPE=disk does not exist on DASDs they fall through
-+     * the udevProcessStorage detection logic. */
-+    if (STRPREFIX(def->caps->data.storage.block, "/dev/dasd")) {
-+        def->caps->data.storage.drive_type = g_strdup("dasd");
-+        VIR_DEBUG("Found storage type '%s' for device "
-+                  "with sysfs path '%s'",
-+                  def->caps->data.storage.drive_type,
-+                  def->sysfs_path);
-+        return 0;
-+    }
-     VIR_DEBUG("Could not determine storage type "
-               "for device with sysfs path '%s'", def->sysfs_path);
-     return -1;
-@@ -977,6 +1003,8 @@ udevProcessStorage(struct udev_device *device,
-         ret = udevProcessFloppy(device, def);
-     } else if (STREQ(def->caps->data.storage.drive_type, "sd")) {
-         ret = udevProcessSD(device, def);
-+    } else if (STREQ(def->caps->data.storage.drive_type, "dasd")) {
-+        ret = udevProcessDASD(device, def);
-     } else {
-         VIR_DEBUG("Unsupported storage type '%s'",
-                   def->caps->data.storage.drive_type);
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-node_device-refactor-udevProcessCCW.patch b/SOURCES/libvirt-node_device-refactor-udevProcessCCW.patch
deleted file mode 100644
index 1b6621c..0000000
--- a/SOURCES/libvirt-node_device-refactor-udevProcessCCW.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From a89df2d899e6e93ab7bccdaa1afb130d01d9b286 Mon Sep 17 00:00:00 2001
-Message-Id: <a89df2d899e6e93ab7bccdaa1afb130d01d9b286@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Thu, 8 Oct 2020 11:06:56 -0400
-Subject: [PATCH] node_device: refactor udevProcessCCW
-
-Refactor out CCW address parsing for later reuse.
-
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-(cherry picked from commit 0e7f8bb6c1c3a63cf892f7afcd34fcb979ef0155)
-https://bugzilla.redhat.com/show_bug.cgi?id=1853289
-https://bugzilla.redhat.com/show_bug.cgi?id=1865932
-Message-Id: <20201008150700.52157-2-bfiuczyn@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- src/node_device/node_device_udev.c | 31 ++++++++++++++++++++----------
- 1 file changed, 21 insertions(+), 10 deletions(-)
-
-diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
-index ae3d081e66..9667a042bd 100644
---- a/src/node_device/node_device_udev.c
-+++ b/src/node_device/node_device_udev.c
-@@ -1058,27 +1058,38 @@ udevProcessMediatedDevice(struct udev_device *dev,
- 
- 
- static int
--udevProcessCCW(struct udev_device *device,
--               virNodeDeviceDefPtr def)
-+udevGetCCWAddress(const char *sysfs_path,
-+                  virNodeDevCapDataPtr data)
- {
--    int online;
-     char *p;
--    virNodeDevCapDataPtr data = &def->caps->data;
--
--    /* process only online devices to keep the list sane */
--    if (udevGetIntSysfsAttr(device, "online", &online, 0) < 0 || online != 1)
--        return -1;
- 
--    if ((p = strrchr(def->sysfs_path, '/')) == NULL ||
-+    if ((p = strrchr(sysfs_path, '/')) == NULL ||
-         virStrToLong_ui(p + 1, &p, 16, &data->ccw_dev.cssid) < 0 || p == NULL ||
-         virStrToLong_ui(p + 1, &p, 16, &data->ccw_dev.ssid) < 0 || p == NULL ||
-         virStrToLong_ui(p + 1, &p, 16, &data->ccw_dev.devno) < 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("failed to parse the CCW address from sysfs path: '%s'"),
--                       def->sysfs_path);
-+                       sysfs_path);
-         return -1;
-     }
- 
-+    return 0;
-+}
-+
-+
-+static int
-+udevProcessCCW(struct udev_device *device,
-+               virNodeDeviceDefPtr def)
-+{
-+    int online;
-+
-+    /* process only online devices to keep the list sane */
-+    if (udevGetIntSysfsAttr(device, "online", &online, 0) < 0 || online != 1)
-+        return -1;
-+
-+    if (udevGetCCWAddress(def->sysfs_path, &def->caps->data) < 0)
-+        return -1;
-+
-     if (udevGenerateDeviceName(device, def, NULL) != 0)
-         return -1;
- 
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-nodedev-fix-race-in-API-usage-vs-initial-device-enumeration.patch b/SOURCES/libvirt-nodedev-fix-race-in-API-usage-vs-initial-device-enumeration.patch
deleted file mode 100644
index 1ee5791..0000000
--- a/SOURCES/libvirt-nodedev-fix-race-in-API-usage-vs-initial-device-enumeration.patch
+++ /dev/null
@@ -1,256 +0,0 @@
-From b155913f796b313ce969ae318beb66e3e35d13dc Mon Sep 17 00:00:00 2001
-Message-Id: <b155913f796b313ce969ae318beb66e3e35d13dc@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Thu, 11 Jun 2020 18:21:26 +0100
-Subject: [PATCH] nodedev: fix race in API usage vs initial device enumeration
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-During startup the udev node device driver impl uses a background thread
-to populate the list of devices to avoid blocking the daemon startup
-entirely. There is no synchronization to the public APIs, so it is
-possible for an application to start calling APIs before the device
-initialization is complete.
-
-This was not a problem in the old approach where libvirtd was started
-on boot, as initialization would easily complete before any APIs were
-called.
-
-With the use of socket activation, however, APIs are invoked from the
-very moment the daemon starts. This is easily seen by doing a
-
-  'virsh -c nodedev:///system list'
-
-the first time it runs it will only show one or two devices. The second
-time it runs it will show all devices. The solution is to introduce a
-flag and condition variable for APIs to synchronize against before
-returning any data.
-
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 008abeb03c262149b756ad5a226ff6cbc5e37e2c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1846237
-https://bugzilla.redhat.com/show_bug.cgi?id=1845459
-Message-Id: <20200611172126.269081-2-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/conf/virnodedeviceobj.h          |  2 ++
- src/node_device/node_device_driver.c | 44 ++++++++++++++++++++++++++++
- src/node_device/node_device_hal.c    | 15 ++++++++++
- src/node_device/node_device_udev.c   | 13 ++++++++
- 4 files changed, 74 insertions(+)
-
-diff --git a/src/conf/virnodedeviceobj.h b/src/conf/virnodedeviceobj.h
-index c4d3c55d73..c9df8dedab 100644
---- a/src/conf/virnodedeviceobj.h
-+++ b/src/conf/virnodedeviceobj.h
-@@ -36,6 +36,8 @@ typedef struct _virNodeDeviceDriverState virNodeDeviceDriverState;
- typedef virNodeDeviceDriverState *virNodeDeviceDriverStatePtr;
- struct _virNodeDeviceDriverState {
-     virMutex lock;
-+    virCond initCond;
-+    bool initialized;
- 
-     /* pid file FD, ensures two copies of the driver can't use the same root */
-     int lockFD;
-diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
-index b630be4399..a894f7265f 100644
---- a/src/node_device/node_device_driver.c
-+++ b/src/node_device/node_device_driver.c
-@@ -162,6 +162,22 @@ nodeDeviceUnlock(void)
- }
- 
- 
-+static int
-+nodeDeviceWaitInit(void)
-+{
-+    nodeDeviceLock();
-+    while (!driver->initialized) {
-+        if (virCondWait(&driver->initCond, &driver->lock) < 0) {
-+            virReportSystemError(errno, "%s",
-+                                 _("failed to wait on condition"));
-+            nodeDeviceUnlock();
-+            return -1;
-+        }
-+    }
-+    nodeDeviceUnlock();
-+    return 0;
-+}
-+
- int
- nodeNumOfDevices(virConnectPtr conn,
-                  const char *cap,
-@@ -172,6 +188,9 @@ nodeNumOfDevices(virConnectPtr conn,
- 
-     virCheckFlags(0, -1);
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return -1;
-+
-     return virNodeDeviceObjListNumOfDevices(driver->devs, conn, cap,
-                                             virNodeNumOfDevicesCheckACL);
- }
-@@ -189,6 +208,9 @@ nodeListDevices(virConnectPtr conn,
- 
-     virCheckFlags(0, -1);
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return -1;
-+
-     return virNodeDeviceObjListGetNames(driver->devs, conn,
-                                         virNodeListDevicesCheckACL,
-                                         cap, names, maxnames);
-@@ -205,6 +227,9 @@ nodeConnectListAllNodeDevices(virConnectPtr conn,
-     if (virConnectListAllNodeDevicesEnsureACL(conn) < 0)
-         return -1;
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return -1;
-+
-     return virNodeDeviceObjListExport(conn, driver->devs, devices,
-                                       virConnectListAllNodeDevicesCheckACL,
-                                       flags);
-@@ -234,6 +259,9 @@ nodeDeviceLookupByName(virConnectPtr conn,
-     virNodeDeviceDefPtr def;
-     virNodeDevicePtr device = NULL;
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return NULL;
-+
-     if (!(obj = nodeDeviceObjFindByName(name)))
-         return NULL;
-     def = virNodeDeviceObjGetDef(obj);
-@@ -262,6 +290,9 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn,
- 
-     virCheckFlags(0, NULL);
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return NULL;
-+
-     if (!(obj = virNodeDeviceObjListFindSCSIHostByWWNs(driver->devs,
-                                                        wwnn, wwpn)))
-         return NULL;
-@@ -475,6 +506,10 @@ nodeDeviceCreateXML(virConnectPtr conn,
-     const char *virt_type = NULL;
- 
-     virCheckFlags(0, NULL);
-+
-+    if (nodeDeviceWaitInit() < 0)
-+        return NULL;
-+
-     virt_type  = virConnectGetType(conn);
- 
-     if (!(def = virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, virt_type)))
-@@ -519,6 +554,9 @@ nodeDeviceDestroy(virNodeDevicePtr device)
-     char *wwnn = NULL, *wwpn = NULL;
-     unsigned int parent_host;
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return -1;
-+
-     if (!(obj = nodeDeviceObjFindByName(device->name)))
-         return -1;
-     def = virNodeDeviceObjGetDef(obj);
-@@ -574,6 +612,9 @@ nodeConnectNodeDeviceEventRegisterAny(virConnectPtr conn,
-     if (virConnectNodeDeviceEventRegisterAnyEnsureACL(conn) < 0)
-         return -1;
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return -1;
-+
-     if (virNodeDeviceEventStateRegisterID(conn, driver->nodeDeviceEventState,
-                                           device, eventID, callback,
-                                           opaque, freecb, &callbackID) < 0)
-@@ -590,6 +631,9 @@ nodeConnectNodeDeviceEventDeregisterAny(virConnectPtr conn,
-     if (virConnectNodeDeviceEventDeregisterAnyEnsureACL(conn) < 0)
-         return -1;
- 
-+    if (nodeDeviceWaitInit() < 0)
-+        return -1;
-+
-     if (virObjectEventStateDeregisterID(conn,
-                                         driver->nodeDeviceEventState,
-                                         callbackID, true) < 0)
-diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c
-index 4cef7c2c12..0d48895b66 100644
---- a/src/node_device/node_device_hal.c
-+++ b/src/node_device/node_device_hal.c
-@@ -603,6 +603,15 @@ nodeStateInitialize(bool privileged G_GNUC_UNUSED,
-         VIR_FREE(driver);
-         return VIR_DRV_STATE_INIT_ERROR;
-     }
-+
-+    if (virCondInit(&driver->initCond) < 0) {
-+        virReportSystemError(errno, "%s",
-+                             _("Unable to initialize condition variable"));
-+        virMutexDestroy(&driver->lock);
-+        VIR_FREE(driver);
-+        return VIR_DRV_STATE_INIT_ERROR;
-+    }
-+
-     nodeDeviceLock();
- 
-     if (privileged) {
-@@ -693,6 +702,11 @@ nodeStateInitialize(bool privileged G_GNUC_UNUSED,
-     }
-     VIR_FREE(udi);
- 
-+    nodeDeviceLock();
-+    driver->initialized = true;
-+    nodeDeviceUnlock();
-+    virCondBroadcast(&driver->initCond);
-+
-     return VIR_DRV_STATE_INIT_COMPLETE;
- 
-  failure:
-@@ -725,6 +739,7 @@ nodeStateCleanup(void)
- 
-         VIR_FREE(driver->stateDir);
-         nodeDeviceUnlock();
-+        virCondDestroy(&driver->initCond);
-         virMutexDestroy(&driver->lock);
-         VIR_FREE(driver);
-         return 0;
-diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
-index 4b33dc25d8..ae3d081e66 100644
---- a/src/node_device/node_device_udev.c
-+++ b/src/node_device/node_device_udev.c
-@@ -1476,6 +1476,7 @@ nodeStateCleanup(void)
-         virPidFileRelease(driver->stateDir, "driver", driver->lockFD);
- 
-     VIR_FREE(driver->stateDir);
-+    virCondDestroy(&driver->initCond);
-     virMutexDestroy(&driver->lock);
-     VIR_FREE(driver);
- 
-@@ -1743,6 +1744,11 @@ nodeStateInitializeEnumerate(void *opaque)
-     if (udevEnumerateDevices(udev) != 0)
-         goto error;
- 
-+    nodeDeviceLock();
-+    driver->initialized = true;
-+    nodeDeviceUnlock();
-+    virCondBroadcast(&driver->initCond);
-+
-     return;
- 
-  error:
-@@ -1798,6 +1804,13 @@ nodeStateInitialize(bool privileged,
-         VIR_FREE(driver);
-         return VIR_DRV_STATE_INIT_ERROR;
-     }
-+    if (virCondInit(&driver->initCond) < 0) {
-+        virReportSystemError(errno, "%s",
-+                             _("Unable to initialize condition variable"));
-+        virMutexDestroy(&driver->lock);
-+        VIR_FREE(driver);
-+        return VIR_DRV_STATE_INIT_ERROR;
-+    }
- 
-     driver->privileged = privileged;
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-numa-expose-HMAT-APIs.patch b/SOURCES/libvirt-numa-expose-HMAT-APIs.patch
deleted file mode 100644
index 08b3549..0000000
--- a/SOURCES/libvirt-numa-expose-HMAT-APIs.patch
+++ /dev/null
@@ -1,242 +0,0 @@
-From f2670434261a395acfe97a9bd93bd55c6b3fb1f2 Mon Sep 17 00:00:00 2001
-Message-Id: <f2670434261a395acfe97a9bd93bd55c6b3fb1f2@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:41 +0200
-Subject: [PATCH] numa: expose HMAT APIs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-These APIs will be used by QEMU driver when building the command
-line.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 11d8ca9794e80224d0634d67da86a20380c22ab5)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/conf/numa_conf.c:
-- src/conf/numa_conf.h: Both are context.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <ad394e2359bfbbff4c9d61ac2bf5faca1eba5943.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/numa_conf.c     | 139 +++++++++++++++++++++++++++++++++++++++
- src/conf/numa_conf.h     |  28 ++++++++
- src/libvirt_private.syms |   6 ++
- 3 files changed, 173 insertions(+)
-
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index c90fb01bb6..277a695d84 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -1800,3 +1800,142 @@ virDomainNumaGetMemorySize(virDomainNumaPtr numa)
- 
-     return ret;
- }
-+
-+
-+bool
-+virDomainNumaHasHMAT(const virDomainNuma *numa)
-+{
-+    size_t i;
-+
-+    if (!numa)
-+        return false;
-+
-+    if (numa->ninterconnects)
-+        return true;
-+
-+    for (i = 0; i < numa->nmem_nodes; i++) {
-+        if (numa->mem_nodes[i].ncaches)
-+            return true;
-+    }
-+
-+    return false;
-+}
-+
-+
-+size_t
-+virDomainNumaGetNodeCacheCount(const virDomainNuma *numa,
-+                               size_t node)
-+{
-+    if (!numa || node >= numa->nmem_nodes)
-+        return 0;
-+
-+    return numa->mem_nodes[node].ncaches;
-+}
-+
-+
-+int
-+virDomainNumaGetNodeCache(const virDomainNuma *numa,
-+                          size_t node,
-+                          size_t cache,
-+                          unsigned int *level,
-+                          unsigned int *size,
-+                          unsigned int *line,
-+                          virDomainCacheAssociativity *associativity,
-+                          virDomainCachePolicy *policy)
-+{
-+    const virDomainNumaNode *cell;
-+
-+    if (!numa || node >= numa->nmem_nodes)
-+        return -1;
-+
-+    cell = &numa->mem_nodes[node];
-+
-+    if (cache >= cell->ncaches)
-+        return -1;
-+
-+    *level = cell->caches[cache].level;
-+    *size = cell->caches[cache].size;
-+    *line = cell->caches[cache].line;
-+    *associativity = cell->caches[cache].associativity;
-+    *policy = cell->caches[cache].policy;
-+    return 0;
-+}
-+
-+
-+ssize_t
-+virDomainNumaGetNodeInitiator(const virDomainNuma *numa,
-+                              size_t node)
-+{
-+    size_t i;
-+    unsigned int maxBandwidth = 0;
-+    ssize_t candidateBandwidth = -1;
-+    unsigned int minLatency = UINT_MAX;
-+    ssize_t candidateLatency = -1;
-+
-+    if (!numa || node >= numa->nmem_nodes)
-+        return -1;
-+
-+    for (i = 0; i < numa->ninterconnects; i++) {
-+        const virDomainNumaInterconnect *l = &numa->interconnects[i];
-+
-+        if (l->target != node)
-+            continue;
-+
-+        switch (l->type) {
-+        case VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_LATENCY:
-+            if (l->value < minLatency) {
-+                minLatency = l->value;
-+                candidateLatency = l->initiator;
-+            }
-+            break;
-+
-+        case VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_BANDWIDTH:
-+            if (l->value > maxBandwidth) {
-+                maxBandwidth = l->value;
-+                candidateBandwidth = l->initiator;
-+            }
-+            break;
-+        }
-+    }
-+
-+    if (candidateLatency >= 0)
-+        return candidateLatency;
-+
-+    return candidateBandwidth;
-+}
-+
-+
-+size_t
-+virDomainNumaGetInterconnectsCount(const virDomainNuma *numa)
-+{
-+    if (!numa)
-+        return 0;
-+
-+    return numa->ninterconnects;
-+}
-+
-+
-+int
-+virDomainNumaGetInterconnect(const virDomainNuma *numa,
-+                             size_t i,
-+                             virDomainNumaInterconnectType *type,
-+                             unsigned int *initiator,
-+                             unsigned int *target,
-+                             unsigned int *cache,
-+                             virDomainMemoryLatency *accessType,
-+                             unsigned long *value)
-+{
-+    const virDomainNumaInterconnect *l;
-+
-+    if (!numa || i >= numa->ninterconnects)
-+        return -1;
-+
-+    l = &numa->interconnects[i];
-+    *type = l->type;
-+    *initiator = l->initiator;
-+    *target = l->target;
-+    *cache = l->cache;
-+    *accessType = l->accessType;
-+    *value = l->value;
-+    return 0;
-+}
-diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
-index 2963004c94..63843a1cc6 100644
---- a/src/conf/numa_conf.h
-+++ b/src/conf/numa_conf.h
-@@ -220,3 +220,31 @@ int virDomainNumaDefFormatXML(virBufferPtr buf, virDomainNumaPtr def);
- int virDomainNumaDefValidate(const virDomainNuma *def);
- 
- unsigned int virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa);
-+
-+bool virDomainNumaHasHMAT(const virDomainNuma *numa);
-+
-+size_t virDomainNumaGetNodeCacheCount(const virDomainNuma *numa,
-+                                       size_t node);
-+
-+int virDomainNumaGetNodeCache(const virDomainNuma *numa,
-+                              size_t node,
-+                              size_t cache,
-+                              unsigned int *level,
-+                              unsigned int *size,
-+                              unsigned int *line,
-+                              virDomainCacheAssociativity *associativity,
-+                              virDomainCachePolicy *policy);
-+
-+ssize_t virDomainNumaGetNodeInitiator(const virDomainNuma *numa,
-+                                      size_t node);
-+
-+size_t virDomainNumaGetInterconnectsCount(const virDomainNuma *numa);
-+
-+int virDomainNumaGetInterconnect(const virDomainNuma *numa,
-+                                 size_t i,
-+                                 virDomainNumaInterconnectType *type,
-+                                 unsigned int *initiator,
-+                                 unsigned int *target,
-+                                 unsigned int *cache,
-+                                 virDomainMemoryLatency *accessType,
-+                                 unsigned long *value);
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index de95e3b116..fdd104cd25 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -820,14 +820,20 @@ virDomainNumaCheckABIStability;
- virDomainNumaEquals;
- virDomainNumaFree;
- virDomainNumaGetCPUCountTotal;
-+virDomainNumaGetInterconnect;
-+virDomainNumaGetInterconnectsCount;
- virDomainNumaGetMaxCPUID;
- virDomainNumaGetMemorySize;
-+virDomainNumaGetNodeCache;
-+virDomainNumaGetNodeCacheCount;
- virDomainNumaGetNodeCount;
- virDomainNumaGetNodeCpumask;
- virDomainNumaGetNodeDiscard;
- virDomainNumaGetNodeDistance;
-+virDomainNumaGetNodeInitiator;
- virDomainNumaGetNodeMemoryAccessMode;
- virDomainNumaGetNodeMemorySize;
-+virDomainNumaHasHMAT;
- virDomainNumaNew;
- virDomainNumaNodeDistanceIsUsingDefaults;
- virDomainNumaNodesDistancesAreBeingSet;
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-numa_conf-Drop-CPU-from-name-of-two-functions.patch b/SOURCES/libvirt-numa_conf-Drop-CPU-from-name-of-two-functions.patch
deleted file mode 100644
index 2974deb..0000000
--- a/SOURCES/libvirt-numa_conf-Drop-CPU-from-name-of-two-functions.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From c049804bc3b296a183ce0bd819d5f9b1d1a45ea7 Mon Sep 17 00:00:00 2001
-Message-Id: <c049804bc3b296a183ce0bd819d5f9b1d1a45ea7@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:34 +0200
-Subject: [PATCH] numa_conf: Drop CPU from name of two functions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are two functions virDomainNumaDefCPUFormatXML() and
-virDomainNumaDefCPUParseXML() which format and parse domain's
-<numa/>. There is nothing CPU specific about them. Drop the
-infix.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 68c5b0183cb157c4672a6af3a14375df4434cee5)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/conf/domain_conf.c: Context.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <a06547d5b53c7a8fa2a2801a9cbd7a47834ebaa3.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/cpu_conf.c    | 2 +-
- src/conf/domain_conf.c | 2 +-
- src/conf/numa_conf.c   | 8 ++++----
- src/conf/numa_conf.h   | 4 ++--
- 4 files changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
-index 1a2948ce11..dfd0c1f798 100644
---- a/src/conf/cpu_conf.c
-+++ b/src/conf/cpu_conf.c
-@@ -746,7 +746,7 @@ virCPUDefFormatBufFull(virBufferPtr buf,
-     if (virCPUDefFormatBuf(&childrenBuf, def) < 0)
-         goto cleanup;
- 
--    if (virDomainNumaDefCPUFormatXML(&childrenBuf, numa) < 0)
-+    if (virDomainNumaDefFormatXML(&childrenBuf, numa) < 0)
-         goto cleanup;
- 
-     /* Put it all together */
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 484f3b4352..3229d5ec95 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -20487,7 +20487,7 @@ virDomainDefParseXML(xmlDocPtr xml,
-     if (virCPUDefParseXML(ctxt, "./cpu[1]", VIR_CPU_TYPE_GUEST, &def->cpu) < 0)
-         goto error;
- 
--    if (virDomainNumaDefCPUParseXML(def->numa, ctxt) < 0)
-+    if (virDomainNumaDefParseXML(def->numa, ctxt) < 0)
-         goto error;
- 
-     if (virDomainNumaGetCPUCountTotal(def->numa) > virDomainDefGetVcpusMax(def)) {
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index 6f1257fd8e..38fcf9d9aa 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -842,8 +842,8 @@ virDomainNumaDefNodeDistanceParseXML(virDomainNumaPtr def,
- }
- 
- int
--virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
--                            xmlXPathContextPtr ctxt)
-+virDomainNumaDefParseXML(virDomainNumaPtr def,
-+                         xmlXPathContextPtr ctxt)
- {
-     xmlNodePtr *nodes = NULL;
-     xmlNodePtr oldNode = ctxt->node;
-@@ -971,8 +971,8 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
- 
- 
- int
--virDomainNumaDefCPUFormatXML(virBufferPtr buf,
--                             virDomainNumaPtr def)
-+virDomainNumaDefFormatXML(virBufferPtr buf,
-+                          virDomainNumaPtr def)
- {
-     virDomainMemoryAccess memAccess;
-     virTristateBool discard;
-diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
-index b1b8e3274d..ce865cbfbb 100644
---- a/src/conf/numa_conf.h
-+++ b/src/conf/numa_conf.h
-@@ -182,7 +182,7 @@ bool virDomainNumatuneNodesetIsAvailable(virDomainNumaPtr numatune,
- bool virDomainNumatuneNodeSpecified(virDomainNumaPtr numatune,
-                                     int cellid);
- 
--int virDomainNumaDefCPUParseXML(virDomainNumaPtr def, xmlXPathContextPtr ctxt);
--int virDomainNumaDefCPUFormatXML(virBufferPtr buf, virDomainNumaPtr def);
-+int virDomainNumaDefParseXML(virDomainNumaPtr def, xmlXPathContextPtr ctxt);
-+int virDomainNumaDefFormatXML(virBufferPtr buf, virDomainNumaPtr def);
- 
- unsigned int virDomainNumaGetCPUCountTotal(virDomainNumaPtr numa);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-numa_conf-Make-virDomainNumaSetNodeCpumask-return-void.patch b/SOURCES/libvirt-numa_conf-Make-virDomainNumaSetNodeCpumask-return-void.patch
deleted file mode 100644
index f9c60df..0000000
--- a/SOURCES/libvirt-numa_conf-Make-virDomainNumaSetNodeCpumask-return-void.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From a1af99a1129058f2aa312e3c9d125f5bc7693912 Mon Sep 17 00:00:00 2001
-Message-Id: <a1af99a1129058f2aa312e3c9d125f5bc7693912@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:37 +0200
-Subject: [PATCH] numa_conf: Make virDomainNumaSetNodeCpumask() return void
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There is only one caller of virDomainNumaSetNodeCpumask() which
-checks for the return value but because the function will return
-NULL iff the @cpumask was NULL in the first place. But in that
-place @cpumask can't be NULL because it was just allocated by
-virBitmapParse().
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 1050c6beb1f2238cd847d93eab17d658720b08e1)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <8564849f4fc4aaca69eec3d2b7e59d03234ea39f.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/numa_conf.c | 4 +---
- src/conf/numa_conf.h | 6 +++---
- src/libxl/xen_xl.c   | 4 ++--
- 3 files changed, 6 insertions(+), 8 deletions(-)
-
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index 38fcf9d9aa..c9cc8ac22e 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -1318,14 +1318,12 @@ virDomainNumaGetNodeCpumask(virDomainNumaPtr numa,
- }
- 
- 
--virBitmapPtr
-+void
- virDomainNumaSetNodeCpumask(virDomainNumaPtr numa,
-                             size_t node,
-                             virBitmapPtr cpumask)
- {
-     numa->mem_nodes[node].cpumask = cpumask;
--
--    return numa->mem_nodes[node].cpumask;
- }
- 
- 
-diff --git a/src/conf/numa_conf.h b/src/conf/numa_conf.h
-index ce865cbfbb..6808439a7c 100644
---- a/src/conf/numa_conf.h
-+++ b/src/conf/numa_conf.h
-@@ -156,9 +156,9 @@ size_t virDomainNumaSetNodeDistanceCount(virDomainNumaPtr numa,
-                                          size_t ndistances)
-     ATTRIBUTE_NONNULL(1);
- 
--virBitmapPtr virDomainNumaSetNodeCpumask(virDomainNumaPtr numa,
--                                         size_t node,
--                                         virBitmapPtr cpumask)
-+void  virDomainNumaSetNodeCpumask(virDomainNumaPtr numa,
-+                                  size_t node,
-+                                  virBitmapPtr cpumask)
-     ATTRIBUTE_NONNULL(1);
- 
- /*
-diff --git a/src/libxl/xen_xl.c b/src/libxl/xen_xl.c
-index 91b1825399..edea30a86a 100644
---- a/src/libxl/xen_xl.c
-+++ b/src/libxl/xen_xl.c
-@@ -508,10 +508,10 @@ xenParseXLVnuma(virConfPtr conf,
-                             goto cleanup;
-                         }
- 
--                        if ((virBitmapParse(vtoken, &cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0) ||
--                            (virDomainNumaSetNodeCpumask(numa, vnodeCnt, cpumask) == NULL))
-+                        if (virBitmapParse(vtoken, &cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
-                             goto cleanup;
- 
-+                        virDomainNumaSetNodeCpumask(numa, vnodeCnt, cpumask);
-                         vcpus += virBitmapCountBits(cpumask);
- 
-                     } else if (STRPREFIX(str, "vdistances")) {
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-numa_conf-Properly-check-for-caches-in-virDomainNumaDefValidate.patch b/SOURCES/libvirt-numa_conf-Properly-check-for-caches-in-virDomainNumaDefValidate.patch
deleted file mode 100644
index 525beef..0000000
--- a/SOURCES/libvirt-numa_conf-Properly-check-for-caches-in-virDomainNumaDefValidate.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 8521a431d3da3cc360eb8102eda1c0d649f1ecc3 Mon Sep 17 00:00:00 2001
-Message-Id: <8521a431d3da3cc360eb8102eda1c0d649f1ecc3@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:45 +0200
-Subject: [PATCH] numa_conf: Properly check for caches in
- virDomainNumaDefValidate()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When adding support for HMAT, in f0611fe8830 I've introduced a
-check which aims to validate /domain/cpu/numa/interconnects. As a
-part of that, there is a loop which checks whether all <latency/>
-with @cache attribute refer to an existing cache level. For
-instance:
-
-  <cpu mode='host-model' check='partial'>
-    <numa>
-      <cell id='0' cpus='0-5' memory='512000' unit='KiB' discard='yes'>
-        <cache level='1' associativity='direct' policy='writeback'>
-          <size value='8' unit='KiB'/>
-          <line value='5' unit='B'/>
-        </cache>
-      </cell>
-      <interconnects>
-        <latency initiator='0' target='0' cache='1' type='access' value='5'/>
-        <bandwidth initiator='0' target='0' type='access' value='204800' unit='KiB'/>
-      </interconnects>
-    </numa>
-  </cpu>
-
-This XML defines that accessing L1 cache of node #0 from node #0
-has latency of 5ns.
-
-However, the loop was not written properly. Well, the check in
-it, as it was always checking for the first cache in the target
-node and not the rest. Therefore, the following example errors
-out:
-
-  <cpu mode='host-model' check='partial'>
-    <numa>
-      <cell id='0' cpus='0-5' memory='512000' unit='KiB' discard='yes'>
-        <cache level='3' associativity='direct' policy='writeback'>
-          <size value='10' unit='KiB'/>
-          <line value='8' unit='B'/>
-        </cache>
-        <cache level='1' associativity='direct' policy='writeback'>
-          <size value='8' unit='KiB'/>
-          <line value='5' unit='B'/>
-        </cache>
-      </cell>
-      <interconnects>
-        <latency initiator='0' target='0' cache='1' type='access' value='5'/>
-        <bandwidth initiator='0' target='0' type='access' value='204800' unit='KiB'/>
-      </interconnects>
-    </numa>
-  </cpu>
-
-This errors out even though it is a valid configuration. The L1
-cache under node #0 is still present.
-
-Fixes: f0611fe8830
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Laine Stump <laine@redhat.com>
-(cherry picked from commit e41ac71fca309b50e2c8e6ec142d8fe1280ca2ad)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <4bb47f9e97ca097cee1259449da4739b55753751.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/numa_conf.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index 5a92eb35cc..a20398714e 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -1423,7 +1423,7 @@ virDomainNumaDefValidate(const virDomainNuma *def)
- 
-         if (l->cache > 0) {
-             for (j = 0; j < def->mem_nodes[l->target].ncaches; j++) {
--                const virDomainNumaCache *cache = def->mem_nodes[l->target].caches;
-+                const virDomainNumaCache *cache = &def->mem_nodes[l->target].caches[j];
- 
-                 if (l->cache == cache->level)
-                     break;
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemu-Add-support-for-slices-of-type-storage.patch b/SOURCES/libvirt-qemu-Add-support-for-slices-of-type-storage.patch
deleted file mode 100644
index 76ccfc3..0000000
--- a/SOURCES/libvirt-qemu-Add-support-for-slices-of-type-storage.patch
+++ /dev/null
@@ -1,231 +0,0 @@
-From 9d2cbc9ca4405fcf11e5796414af0038eb7c7f9e Mon Sep 17 00:00:00 2001
-Message-Id: <9d2cbc9ca4405fcf11e5796414af0038eb7c7f9e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:24 +0100
-Subject: [PATCH] qemu: Add support for slices of type 'storage'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Implement support for the slice of type 'storage' which allows to set
-the offset and size which modifies where qemu should look for the start
-of the format container inside the image.
-
-Since slicing is done using the 'raw' driver we need to add another
-layer into the blockdev tree if there's any non-raw image format driver
-used to access the data.
-
-This patch adds the blockdev integration and setup of the image data so
-that we can use the slices for any backing image.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 0e644e6e47a48830dc10b090a999d4ba2e7d5394)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <1f8e63abfd1836f1df91f54cf2c018a7d5047825.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c    | 68 +++++++++++++++++++++++++++++++++++++++-
- src/qemu/qemu_block.h    |  4 +++
- src/qemu/qemu_blockjob.c |  1 +
- src/qemu/qemu_command.c  |  8 +++++
- src/qemu/qemu_domain.c   |  4 +++
- 5 files changed, 84 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 387a2db2e6..5bd5c955a4 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1423,11 +1423,16 @@ qemuBlockStorageSourceGetBlockdevProps(virStorageSourcePtr src,
-                                        virStorageSourcePtr backingStore)
- {
-     g_autoptr(virJSONValue) props = NULL;
-+    const char *storagenode = src->nodestorage;
-+
-+    if (src->sliceStorage &&
-+        src->format != VIR_STORAGE_FILE_RAW)
-+        storagenode = src->sliceStorage->nodename;
- 
-     if (!(props = qemuBlockStorageSourceGetBlockdevFormatProps(src)))
-         return NULL;
- 
--    if (virJSONValueObjectAppendString(props, "file", src->nodestorage) < 0)
-+    if (virJSONValueObjectAppendString(props, "file", storagenode) < 0)
-         return NULL;
- 
-     if (backingStore) {
-@@ -1456,6 +1461,32 @@ qemuBlockStorageSourceGetBlockdevProps(virStorageSourcePtr src,
- }
- 
- 
-+static virJSONValuePtr
-+qemuBlockStorageSourceGetBlockdevStorageSliceProps(virStorageSourcePtr src)
-+{
-+    g_autoptr(virJSONValue) props = NULL;
-+
-+    if (qemuBlockNodeNameValidate(src->sliceStorage->nodename) < 0)
-+        return NULL;
-+
-+    if (virJSONValueObjectCreate(&props,
-+                                 "s:driver", "raw",
-+                                 "s:node-name", src->sliceStorage->nodename,
-+                                 "U:offset", src->sliceStorage->offset,
-+                                 "U:size", src->sliceStorage->size,
-+                                 "s:file", src->nodestorage,
-+                                 "b:auto-read-only", true,
-+                                 "s:discard", "unmap",
-+                                 NULL) < 0)
-+        return NULL;
-+
-+    if (qemuBlockStorageSourceGetBlockdevGetCacheProps(src, props) < 0)
-+        return NULL;
-+
-+    return g_steal_pointer(&props);
-+}
-+
-+
- void
- qemuBlockStorageSourceAttachDataFree(qemuBlockStorageSourceAttachDataPtr data)
- {
-@@ -1463,6 +1494,7 @@ qemuBlockStorageSourceAttachDataFree(qemuBlockStorageSourceAttachDataPtr data)
-         return;
- 
-     virJSONValueFree(data->storageProps);
-+    virJSONValueFree(data->storageSliceProps);
-     virJSONValueFree(data->formatProps);
-     virJSONValueFree(data->prmgrProps);
-     virJSONValueFree(data->authsecretProps);
-@@ -1513,6 +1545,13 @@ qemuBlockStorageSourceAttachPrepareBlockdev(virStorageSourcePtr src,
-     data->storageNodeName = src->nodestorage;
-     data->formatNodeName = src->nodeformat;
- 
-+    if (src->sliceStorage && src->format != VIR_STORAGE_FILE_RAW) {
-+        if (!(data->storageSliceProps = qemuBlockStorageSourceGetBlockdevStorageSliceProps(src)))
-+            return NULL;
-+
-+        data->storageSliceNodeName = src->sliceStorage->nodename;
-+    }
-+
-     return g_steal_pointer(&data);
- }
- 
-@@ -1581,6 +1620,21 @@ qemuBlockStorageSourceAttachApplyFormat(qemuMonitorPtr mon,
- }
- 
- 
-+static int
-+qemuBlockStorageSourceAttachApplyStorageSlice(qemuMonitorPtr mon,
-+                                              qemuBlockStorageSourceAttachDataPtr data)
-+{
-+    if (data->storageSliceProps) {
-+        if (qemuMonitorBlockdevAdd(mon, &data->storageSliceProps) < 0)
-+            return -1;
-+
-+        data->storageSliceAttached = true;
-+    }
-+
-+    return 0;
-+}
-+
-+
- /**
-  * qemuBlockStorageSourceAttachApply:
-  * @mon: monitor object
-@@ -1600,6 +1654,7 @@ qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
- {
-     if (qemuBlockStorageSourceAttachApplyStorageDeps(mon, data) < 0 ||
-         qemuBlockStorageSourceAttachApplyStorage(mon, data) < 0 ||
-+        qemuBlockStorageSourceAttachApplyStorageSlice(mon, data) < 0 ||
-         qemuBlockStorageSourceAttachApplyFormatDeps(mon, data) < 0 ||
-         qemuBlockStorageSourceAttachApplyFormat(mon, data) < 0)
-         return -1;
-@@ -1642,6 +1697,9 @@ qemuBlockStorageSourceAttachRollback(qemuMonitorPtr mon,
-     if (data->formatAttached)
-         ignore_value(qemuMonitorBlockdevDel(mon, data->formatNodeName));
- 
-+    if (data->storageSliceAttached)
-+        ignore_value(qemuMonitorBlockdevDel(mon, data->storageSliceNodeName));
-+
-     if (data->storageAttached)
-         ignore_value(qemuMonitorBlockdevDel(mon, data->storageNodeName));
- 
-@@ -1689,6 +1747,14 @@ qemuBlockStorageSourceDetachPrepare(virStorageSourcePtr src,
-         data->formatAttached = true;
-         data->storageNodeName = src->nodestorage;
-         data->storageAttached = true;
-+
-+        /* 'raw' format doesn't need the extra 'raw' layer when slicing, thus
-+         * the nodename is NULL */
-+        if (src->sliceStorage &&
-+            src->sliceStorage->nodename) {
-+            data->storageSliceNodeName = src->sliceStorage->nodename;
-+            data->storageSliceAttached = true;
-+        }
-     }
- 
-     if (src->pr &&
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index a816190bb7..eab0128d5d 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -82,6 +82,10 @@ struct qemuBlockStorageSourceAttachData {
-     const char *storageNodeName;
-     bool storageAttached;
- 
-+    virJSONValuePtr storageSliceProps;
-+    const char *storageSliceNodeName;
-+    bool storageSliceAttached;
-+
-     virJSONValuePtr formatProps;
-     const char *formatNodeName;
-     bool formatAttached;
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 6b59bbeb2c..71df0d1ab2 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1316,6 +1316,7 @@ qemuBlockJobProcessEventConcludedCreate(virQEMUDriverPtr driver,
-     backend->formatAttached = false;
-     if (job->data.create.storage) {
-         backend->storageAttached = false;
-+        backend->storageSliceAttached = false;
-         VIR_FREE(backend->encryptsecretAlias);
-     }
- 
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 1a5142d472..252809a8d7 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -2427,6 +2427,14 @@ qemuBuildBlockStorageSourceAttachDataCommandline(virCommandPtr cmd,
-         VIR_FREE(tmp);
-     }
- 
-+    if (data->storageSliceProps) {
-+        if (!(tmp = virJSONValueToString(data->storageSliceProps, false)))
-+            return -1;
-+
-+        virCommandAddArgList(cmd, "-blockdev", tmp, NULL);
-+        VIR_FREE(tmp);
-+    }
-+
-     if (data->formatProps) {
-         if (!(tmp = virJSONValueToString(data->formatProps, false)))
-             return -1;
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 948bf3011c..0baa80582c 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -16444,6 +16444,10 @@ qemuDomainPrepareStorageSourceBlockdev(virDomainDiskDefPtr disk,
-     src->nodestorage = g_strdup_printf("libvirt-%u-storage", src->id);
-     src->nodeformat = g_strdup_printf("libvirt-%u-format", src->id);
- 
-+    if (src->sliceStorage &&
-+        src->format != VIR_STORAGE_FILE_RAW)
-+        src->sliceStorage->nodename = g_strdup_printf("libvirt-%u-slice-sto", src->id);
-+
-     if (qemuDomainValidateStorageSource(src, priv->qemuCaps) < 0)
-         return -1;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Add-the-QEMU_CAPS_CPU_KVM_NO_ADJVTIME-capability.patch b/SOURCES/libvirt-qemu-Add-the-QEMU_CAPS_CPU_KVM_NO_ADJVTIME-capability.patch
deleted file mode 100644
index 65106cf..0000000
--- a/SOURCES/libvirt-qemu-Add-the-QEMU_CAPS_CPU_KVM_NO_ADJVTIME-capability.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 694540f2c93ccee78e203c5fe92be5e1a05a2281 Mon Sep 17 00:00:00 2001
-Message-Id: <694540f2c93ccee78e203c5fe92be5e1a05a2281@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 13:12:34 +0100
-Subject: [PATCH] qemu: Add the QEMU_CAPS_CPU_KVM_NO_ADJVTIME capability
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We will use this capability to detect whether the QEMU binary
-supports the kvm-no-adjvtime CPU feature.
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 204e2306e582524b46c4e26e1f0aa354aa50d006)
-
-Conflicts:
-
-  * src/qemu/qemu_capabilities.c
-    src/qemu/qemu_capabilities.h
-
-    + tpm-spapr has not been backported
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214121237.623948-4-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_5.0.0.aarch64.xml | 1 +
- 3 files changed, 4 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 10c17323be..6912a6f72b 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -557,6 +557,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
- 
-               /* 350 */
-               "virtio-net.failover",
-+              "cpu.kvm-no-adjvtime",
-     );
- 
- 
-@@ -1557,6 +1558,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendMemfd[]
- 
- static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMaxCPU[] = {
-     { "unavailable-features", QEMU_CAPS_CPU_UNAVAILABLE_FEATURES },
-+    { "kvm-no-adjvtime", QEMU_CAPS_CPU_KVM_NO_ADJVTIME },
- };
- 
- static virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 6ab0eabd3f..4ccb0c55bc 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -538,6 +538,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
- 
-     /* 350 */
-     QEMU_CAPS_VIRTIO_NET_FAILOVER, /* virtio-net-*.failover */
-+    QEMU_CAPS_CPU_KVM_NO_ADJVTIME, /* cpu.kvm-no-adjvtime */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-index 6b365dd75d..e871ba528e 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-@@ -178,6 +178,7 @@
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-   <flag name='virtio-net.failover'/>
-+  <flag name='cpu.kvm-no-adjvtime'/>
-   <version>4002050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700241</microcodeVersion>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Add-virtio-related-options-to-vsock.patch b/SOURCES/libvirt-qemu-Add-virtio-related-options-to-vsock.patch
deleted file mode 100644
index 4b1eab9..0000000
--- a/SOURCES/libvirt-qemu-Add-virtio-related-options-to-vsock.patch
+++ /dev/null
@@ -1,312 +0,0 @@
-From 362d106d8897a3982f5eaed0c4bc0194d6f9ef28 Mon Sep 17 00:00:00 2001
-Message-Id: <362d106d8897a3982f5eaed0c4bc0194d6f9ef28@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Fri, 26 Feb 2021 06:43:35 -0500
-Subject: [PATCH] qemu: Add virtio related options to vsock
-
-Add virtio related options iommu, ats and packed as driver element attributes
-to vsock devices. Ex:
-
- <vsock model='virtio'>
-   <cid auto='no' address='3'/>
-   <driver iommu='on'/>
- </vsock>
-
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit bd112c9e0f7523b90bf1362cf60deea7db05a32b)
-
-Resolves: https://bugzilla.redhat.com/1931548
-
-Note: since the virtio option packed is not yet available in the code
-version it will also not be available with this backported patch.
-
-Conflicts: docs/formatdomain.rst:
-    converted changes into docs/formatdomain.html.in
-    src/conf/domain_conf.c:
-    resolved conflicts by moving the code into the correct methods
-    src/conf/domain_validate.c:
-    does not exist downstream. moved code to src/conf/domain_conf.c
-    src/qemu/qemu_validate.c:
-    does not exist downstream. can be neglected
-
-Message-Id: <20210226114335.100390-2-bfiuczyn@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- docs/formatdomain.html.in                     |  5 ++-
- docs/schemas/domaincommon.rng                 |  5 +++
- src/conf/domain_conf.c                        | 27 ++++++++++++++
- src/conf/domain_conf.h                        |  1 +
- src/qemu/qemu_command.c                       |  4 ++
- .../vhost-vsock-ccw-iommu.s390x-latest.args   | 37 +++++++++++++++++++
- .../vhost-vsock-ccw-iommu.xml                 | 37 +++++++++++++++++++
- tests/qemuxml2argvtest.c                      |  1 +
- .../vhost-vsock-ccw-iommu.s390x-latest.xml    |  1 +
- tests/qemuxml2xmltest.c                       |  2 +
- 10 files changed, 119 insertions(+), 1 deletion(-)
- create mode 100644 tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.s390x-latest.args
- create mode 100644 tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.xml
- create mode 120000 tests/qemuxml2xmloutdata/vhost-vsock-ccw-iommu.s390x-latest.xml
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index bec753e37f..127dd13cc0 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -9240,7 +9240,10 @@ qemu-kvm -net nic,model=? /dev/null
-     element specifies the CID assigned to the guest. If the attribute
-     <code>auto</code> is set to <code>yes</code>, libvirt
-     will assign a free CID automatically on domain startup.
--    <span class="since">Since 4.4.0</span></p>
-+    <span class="since">Since 4.4.0</span>
-+    The optional <code>driver</code> element allows to specify virtio options, see
-+    <a href="#elementsVirtio">Virtio-specific options</a> for more details.
-+    <span class="since">Since 7.1.0</span></p>
- 
- <pre>
- ...
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 9fda5f17e0..4a42cb9b40 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -4685,6 +4685,11 @@
-         <optional>
-           <ref name="alias"/>
-         </optional>
-+        <optional>
-+          <element name="driver">
-+            <ref name="virtioOptions"/>
-+          </element>
-+        </optional>
-       </interleave>
-     </element>
-   </define>
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index c5a0442c6f..166c3e48d2 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -2392,6 +2392,7 @@ virDomainVsockDefFree(virDomainVsockDefPtr vsock)
- 
-     virObjectUnref(vsock->privateData);
-     virDomainDeviceInfoClear(&vsock->info);
-+    VIR_FREE(vsock->virtio);
-     VIR_FREE(vsock);
- }
- 
-@@ -6504,6 +6505,15 @@ virDomainMemoryDefValidate(const virDomainMemoryDef *mem)
- }
- 
- 
-+static bool
-+virDomainVsockIsVirtioModel(const virDomainVsockDef *vsock)
-+{
-+    return (vsock->model == VIR_DOMAIN_VSOCK_MODEL_VIRTIO ||
-+            vsock->model == VIR_DOMAIN_VSOCK_MODEL_VIRTIO_TRANSITIONAL ||
-+            vsock->model == VIR_DOMAIN_VSOCK_MODEL_VIRTIO_NON_TRANSITIONAL);
-+}
-+
-+
- static int
- virDomainVsockDefValidate(const virDomainVsockDef *vsock)
- {
-@@ -6513,6 +6523,10 @@ virDomainVsockDefValidate(const virDomainVsockDef *vsock)
-         return -1;
-     }
- 
-+    if (!virDomainVsockIsVirtioModel(vsock) &&
-+        virDomainCheckVirtioOptions(vsock->virtio) < 0)
-+        return -1;
-+
-     return 0;
- }
- 
-@@ -16649,6 +16663,11 @@ virDomainVsockDefParseXML(virDomainXMLOptionPtr xmlopt,
-     if (virDomainDeviceInfoParseXML(xmlopt, node, &vsock->info, flags) < 0)
-         return NULL;
- 
-+    if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt),
-+                                       &vsock->virtio) < 0)
-+        return NULL;
-+
-+
-     return g_steal_pointer(&vsock);
- }
- 
-@@ -23350,6 +23369,10 @@ virDomainVsockDefCheckABIStability(virDomainVsockDefPtr src,
-         return false;
-     }
- 
-+    if (src->virtio && dst->virtio &&
-+        !virDomainVirtioOptionsCheckABIStability(src->virtio, dst->virtio))
-+        return false;
-+
-     if (!virDomainDeviceInfoCheckABIStability(&src->info, &dst->info))
-         return false;
- 
-@@ -28364,6 +28387,7 @@ virDomainVsockDefFormat(virBufferPtr buf,
-     g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
-     g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
-     g_auto(virBuffer) cidAttrBuf = VIR_BUFFER_INITIALIZER;
-+    g_auto(virBuffer) drvAttrBuf = VIR_BUFFER_INITIALIZER;
- 
-     if (vsock->model) {
-         virBufferAsprintf(&attrBuf, " model='%s'",
-@@ -28381,6 +28405,9 @@ virDomainVsockDefFormat(virBufferPtr buf,
-     if (virDomainDeviceInfoFormat(&childBuf, &vsock->info, 0) < 0)
-         return -1;
- 
-+    virDomainVirtioOptionsFormat(&drvAttrBuf, vsock->virtio);
-+
-+    virXMLFormatElement(&childBuf, "driver", &drvAttrBuf, NULL);
-     virXMLFormatElement(buf, "vsock", &attrBuf, &childBuf);
- 
-     return 0;
-diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
-index 118077edaa..3aed1fb22a 100644
---- a/src/conf/domain_conf.h
-+++ b/src/conf/domain_conf.h
-@@ -2389,6 +2389,7 @@ struct _virDomainVsockDef {
-     virTristateBool auto_cid;
- 
-     virDomainDeviceInfo info;
-+    virDomainVirtioOptionsPtr virtio;
- };
- 
- struct _virDomainVirtioOptions {
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 67d7334b0f..998c3c90f8 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -9965,6 +9965,10 @@ qemuBuildVsockDevStr(virDomainDefPtr def,
-     virBufferAsprintf(&buf, ",id=%s", vsock->info.alias);
-     virBufferAsprintf(&buf, ",guest-cid=%u", vsock->guest_cid);
-     virBufferAsprintf(&buf, ",vhostfd=%s%u", fdprefix, priv->vhostfd);
-+
-+    if (qemuBuildVirtioOptionsStr(&buf, vsock->virtio, qemuCaps) < 0)
-+        return NULL;
-+
-     if (qemuBuildDeviceAddressStr(&buf, def, &vsock->info, qemuCaps) < 0)
-         return NULL;
- 
-diff --git a/tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.s390x-latest.args b/tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.s390x-latest.args
-new file mode 100644
-index 0000000000..78eede78d3
---- /dev/null
-+++ b/tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.s390x-latest.args
-@@ -0,0 +1,37 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest1 \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-s390x \
-+-name guest=QEMUGuest1,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
-+-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \
-+-cpu qemu \
-+-m 214 \
-+-overcommit mem-lock=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 \
-+-boot strict=on \
-+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0000,drive=drive-virtio-disk0,\
-+id=virtio-disk0,bootindex=1 \
-+-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0001 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-device vhost-vsock-ccw,id=vsock0,guest-cid=4,vhostfd=6789,iommu_platform=on,\
-+devno=fe.0.0002 \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.xml b/tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.xml
-new file mode 100644
-index 0000000000..dbfe082a6f
---- /dev/null
-+++ b/tests/qemuxml2argvdata/vhost-vsock-ccw-iommu.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='s390x' machine='s390-ccw-virtio'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <cpu mode='custom' match='exact' check='none'>
-+    <model fallback='forbid'>qemu</model>
-+  </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-s390x</emulator>
-+    <disk type='block' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source dev='/dev/HostVG/QEMUGuest1'/>
-+      <target dev='hda' bus='virtio'/>
-+      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
-+    </disk>
-+    <controller type='pci' index='0' model='pci-root'/>
-+    <memballoon model='virtio'>
-+      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
-+    </memballoon>
-+    <panic model='s390'/>
-+    <vsock model='virtio'>
-+      <cid auto='no' address='4'/>
-+      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/>
-+      <driver iommu='on'/>
-+    </vsock>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 629f5ac100..a22e3ba157 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -3056,6 +3056,7 @@ mymain(void)
-     DO_TEST_CAPS_LATEST("vhost-vsock-auto");
-     DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw", "s390x");
-     DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-auto", "s390x");
-+    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-iommu", "s390x");
- 
-     DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
- 
-diff --git a/tests/qemuxml2xmloutdata/vhost-vsock-ccw-iommu.s390x-latest.xml b/tests/qemuxml2xmloutdata/vhost-vsock-ccw-iommu.s390x-latest.xml
-new file mode 120000
-index 0000000000..78971a8ef9
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/vhost-vsock-ccw-iommu.s390x-latest.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/vhost-vsock-ccw-iommu.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 60efcac6c8..461b5bc68f 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1433,6 +1433,8 @@ mymain(void)
-             QEMU_CAPS_CCW);
-     DO_TEST("vhost-vsock-ccw-auto", QEMU_CAPS_DEVICE_VHOST_VSOCK,
-             QEMU_CAPS_CCW);
-+    DO_TEST_CAPS_ARCH_LATEST("vhost-vsock-ccw-iommu", "s390x");
-+
- 
-     DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
-     DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-qemu-Build-HMAT-command-line.patch b/SOURCES/libvirt-qemu-Build-HMAT-command-line.patch
deleted file mode 100644
index d65e257..0000000
--- a/SOURCES/libvirt-qemu-Build-HMAT-command-line.patch
+++ /dev/null
@@ -1,388 +0,0 @@
-From fe08906feb3ab006c4013957895cfb4fa69b7396 Mon Sep 17 00:00:00 2001
-Message-Id: <fe08906feb3ab006c4013957895cfb4fa69b7396@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:43 +0200
-Subject: [PATCH] qemu: Build HMAT command line
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1786303
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit aeecbc87b7317e88a8ef8c82b29bcacd1005c8c2)
-
-Apart from conflicts below, I had to remove '-cpu qemu64' from
-tests/qemuxml2argvdata/numatune-hmat.x86_64-latest.args to make
-qemuxml2argvtest happy. This is because
-3b8feb4793cef66f5dbfb9bdabe4d40834f1e90e isn't backported.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/qemu/qemu_command.c: Context
-- src/qemu/qemu_validate.c: The file doesn't exist in downstream.
-I've made the change to validator that lives in qemu_domain.c.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <0e8dfded8022b564ec7d0563cd745a0d3ffc815f.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/numa_conf.c                          |   7 +
- src/qemu/qemu_command.c                       | 171 ++++++++++++++++++
- src/qemu/qemu_domain.c                        |   7 +
- .../numatune-hmat.x86_64-latest.args          |  52 ++++++
- tests/qemuxml2argvtest.c                      |   1 +
- tests/qemuxml2xmltest.c                       |   2 +-
- 6 files changed, 239 insertions(+), 1 deletion(-)
- create mode 100644 tests/qemuxml2argvdata/numatune-hmat.x86_64-latest.args
-
-diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
-index 277a695d84..5a92eb35cc 100644
---- a/src/conf/numa_conf.c
-+++ b/src/conf/numa_conf.c
-@@ -1875,6 +1875,13 @@ virDomainNumaGetNodeInitiator(const virDomainNuma *numa,
-     if (!numa || node >= numa->nmem_nodes)
-         return -1;
- 
-+    /* A NUMA node which has at least one vCPU is initiator to itself by
-+     * definition. */
-+    if (numa->mem_nodes[node].cpumask)
-+        return node;
-+
-+    /* For the rest, "NUMA node that has best performance (the lowest
-+     * latency or largest bandwidth) to this NUMA node." */
-     for (i = 0; i < numa->ninterconnects; i++) {
-         const virDomainNumaInterconnect *l = &numa->interconnects[i];
- 
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index ac63d18a42..959207bfea 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -7172,6 +7172,9 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
-             virBufferAsprintf(&buf, ",pflash1=%s", priv->pflash1->nodeformat);
-     }
- 
-+    if (virDomainNumaHasHMAT(def->numa))
-+        virBufferAddLit(&buf, ",hmat=on");
-+
-     virCommandAddArgBuffer(cmd, &buf);
- 
-     return 0;
-@@ -7355,6 +7358,134 @@ qemuBuildIOThreadCommandLine(virCommandPtr cmd,
- }
- 
- 
-+static int
-+qemuBuilNumaCellCache(virCommandPtr cmd,
-+                      const virDomainDef *def,
-+                      size_t cell)
-+{
-+    size_t ncaches = virDomainNumaGetNodeCacheCount(def->numa, cell);
-+    size_t i;
-+
-+    if (ncaches == 0)
-+        return 0;
-+
-+    for (i = 0; i < ncaches; i++) {
-+        g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-+        unsigned int level;
-+        unsigned int size;
-+        unsigned int line;
-+        virDomainCacheAssociativity associativity;
-+        virDomainCachePolicy policy;
-+
-+        if (virDomainNumaGetNodeCache(def->numa, cell, i,
-+                                      &level, &size, &line,
-+                                      &associativity, &policy) < 0) {
-+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-+                           _("Unable to format NUMA node cache"));
-+            return -1;
-+        }
-+
-+        virBufferAsprintf(&buf,
-+                          "hmat-cache,node-id=%zu,size=%uK,level=%u",
-+                          cell, size, level);
-+
-+        switch (associativity) {
-+        case VIR_DOMAIN_CACHE_ASSOCIATIVITY_NONE:
-+            virBufferAddLit(&buf, ",associativity=none");
-+            break;
-+        case VIR_DOMAIN_CACHE_ASSOCIATIVITY_DIRECT:
-+            virBufferAddLit(&buf, ",associativity=direct");
-+            break;
-+        case VIR_DOMAIN_CACHE_ASSOCIATIVITY_FULL:
-+            virBufferAddLit(&buf, ",associativity=complex");
-+            break;
-+        case VIR_DOMAIN_CACHE_ASSOCIATIVITY_LAST:
-+            break;
-+        }
-+
-+        switch (policy) {
-+        case VIR_DOMAIN_CACHE_POLICY_NONE:
-+            virBufferAddLit(&buf, ",policy=none");
-+            break;
-+        case VIR_DOMAIN_CACHE_POLICY_WRITEBACK:
-+            virBufferAddLit(&buf, ",policy=write-back");
-+            break;
-+        case VIR_DOMAIN_CACHE_POLICY_WRITETHROUGH:
-+            virBufferAddLit(&buf, ",policy=write-through");
-+            break;
-+        case VIR_DOMAIN_CACHE_POLICY_LAST:
-+            break;
-+        }
-+
-+        if (line > 0)
-+            virBufferAsprintf(&buf, ",line=%u", line);
-+
-+        virCommandAddArg(cmd, "-numa");
-+        virCommandAddArgBuffer(cmd, &buf);
-+    }
-+
-+    return 0;
-+}
-+
-+
-+VIR_ENUM_DECL(qemuDomainMemoryHierarchy);
-+VIR_ENUM_IMPL(qemuDomainMemoryHierarchy,
-+              4, /* Maximum level of cache */
-+              "memory", /* Special case, whole memory not specific cache */
-+              "first-level",
-+              "second-level",
-+              "third-level");
-+
-+static int
-+qemuBuildNumaHMATCommandLine(virCommandPtr cmd,
-+                             const virDomainDef *def)
-+{
-+    size_t nlatencies;
-+    size_t i;
-+
-+    if (!def->numa)
-+        return 0;
-+
-+    nlatencies = virDomainNumaGetInterconnectsCount(def->numa);
-+    for (i = 0; i < nlatencies; i++) {
-+        g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-+        virDomainNumaInterconnectType type;
-+        unsigned int initiator;
-+        unsigned int target;
-+        unsigned int cache;
-+        virDomainMemoryLatency accessType;
-+        unsigned long value;
-+        const char *hierarchyStr;
-+        const char *accessStr;
-+
-+        if (virDomainNumaGetInterconnect(def->numa, i,
-+                                         &type, &initiator, &target,
-+                                         &cache, &accessType, &value) < 0)
-+            return -1;
-+
-+        hierarchyStr = qemuDomainMemoryHierarchyTypeToString(cache);
-+        accessStr = virDomainMemoryLatencyTypeToString(accessType);
-+        virBufferAsprintf(&buf,
-+                          "hmat-lb,initiator=%u,target=%u,hierarchy=%s,data-type=%s-",
-+                          initiator, target, hierarchyStr, accessStr);
-+
-+        switch (type) {
-+        case VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_LATENCY:
-+            virBufferAsprintf(&buf, "latency,latency=%lu", value);
-+            break;
-+        case VIR_DOMAIN_NUMA_INTERCONNECT_TYPE_BANDWIDTH:
-+            virBufferAsprintf(&buf, "bandwidth,bandwidth=%luK", value);
-+            break;
-+        }
-+
-+        virCommandAddArg(cmd, "-numa");
-+        virCommandAddArgBuffer(cmd, &buf);
-+    }
-+
-+    return 0;
-+}
-+
-+
- static int
- qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-                          virDomainDefPtr def,
-@@ -7367,13 +7498,20 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-     char *next = NULL;
-     virBufferPtr nodeBackends = NULL;
-     bool needBackend = false;
-+    bool hmat = false;
-     int rc;
-     int ret = -1;
-     size_t ncells = virDomainNumaGetNodeCount(def->numa);
-+    ssize_t masterInitiator = -1;
- 
-     if (!virDomainNumatuneNodesetIsAvailable(def->numa, priv->autoNodeset))
-         goto cleanup;
- 
-+    if (virDomainNumaHasHMAT(def->numa)) {
-+        needBackend = true;
-+        hmat = true;
-+    }
-+
-     if (VIR_ALLOC_N(nodeBackends, ncells) < 0)
-         goto cleanup;
- 
-@@ -7397,8 +7535,22 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-         qemuBuildMemPathStr(cfg, def, cmd, priv) < 0)
-         goto cleanup;
- 
-+    for (i = 0; i < ncells; i++) {
-+        if (virDomainNumaGetNodeCpumask(def->numa, i)) {
-+            masterInitiator = i;
-+            break;
-+        }
-+    }
-+
-+    if (masterInitiator) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("At least one NUMA node has to have CPUs"));
-+        goto cleanup;
-+    }
-+
-     for (i = 0; i < ncells; i++) {
-         virBitmapPtr cpumask = virDomainNumaGetNodeCpumask(def->numa, i);
-+        ssize_t initiator = virDomainNumaGetNodeInitiator(def->numa, i);
- 
-         if (needBackend) {
-             virCommandAddArg(cmd, "-object");
-@@ -7423,6 +7575,13 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-             }
-         }
- 
-+        if (hmat) {
-+            if (initiator < 0)
-+                initiator = masterInitiator;
-+
-+            virBufferAsprintf(&buf, ",initiator=%zd", initiator);
-+        }
-+
-         if (needBackend)
-             virBufferAsprintf(&buf, ",memdev=ram-node%zu", i);
-         else
-@@ -7448,6 +7607,18 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-         }
-     }
- 
-+    if (hmat) {
-+        if (qemuBuildNumaHMATCommandLine(cmd, def) < 0)
-+            goto cleanup;
-+
-+        /* This can't be moved into any of the loops above,
-+         * because hmat-cache can be specified only after hmat-lb. */
-+        for (i = 0; i < ncells; i++) {
-+            if (qemuBuilNumaCellCache(cmd, def, i) < 0)
-+                goto cleanup;
-+        }
-+    }
-+
-     ret = 0;
- 
-  cleanup:
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index be25790f12..e51e176a80 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -5904,6 +5904,13 @@ qemuDomainDefValidate(const virDomainDef *def,
-         }
-     }
- 
-+    if (virDomainNumaHasHMAT(def->numa) &&
-+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_NUMA_HMAT)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("HMAT is not supported with this QEMU"));
-+        return -1;
-+    }
-+
-     if (def->genidRequested &&
-         !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-diff --git a/tests/qemuxml2argvdata/numatune-hmat.x86_64-latest.args b/tests/qemuxml2argvdata/numatune-hmat.x86_64-latest.args
-new file mode 100644
-index 0000000000..413d247a4d
---- /dev/null
-+++ b/tests/qemuxml2argvdata/numatune-hmat.x86_64-latest.args
-@@ -0,0 +1,52 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-name guest=QEMUGuest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-QEMUGuest/master-key.aes \
-+-machine pc,accel=tcg,usb=off,dump-guest-core=off,hmat=on \
-+-m 12288 \
-+-overcommit mem-lock=off \
-+-smp 12,sockets=12,cores=1,threads=1 \
-+-object memory-backend-ram,id=ram-node0,size=2147483648 \
-+-numa node,nodeid=0,cpus=0-3,initiator=0,memdev=ram-node0 \
-+-object memory-backend-ram,id=ram-node1,size=2147483648 \
-+-numa node,nodeid=1,cpus=4-7,initiator=1,memdev=ram-node1 \
-+-object memory-backend-ram,id=ram-node2,size=2147483648 \
-+-numa node,nodeid=2,cpus=8-11,initiator=2,memdev=ram-node2 \
-+-object memory-backend-ram,id=ram-node3,size=2147483648 \
-+-numa node,nodeid=3,initiator=0,memdev=ram-node3 \
-+-object memory-backend-ram,id=ram-node4,size=2147483648 \
-+-numa node,nodeid=4,initiator=0,memdev=ram-node4 \
-+-object memory-backend-ram,id=ram-node5,size=2147483648 \
-+-numa node,nodeid=5,initiator=0,memdev=ram-node5 \
-+-numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,\
-+latency=5 \
-+-numa hmat-lb,initiator=0,target=0,hierarchy=first-level,\
-+data-type=access-latency,latency=10 \
-+-numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,\
-+bandwidth=204800K \
-+-numa hmat-cache,node-id=0,size=10K,level=1,associativity=direct,\
-+policy=write-back,line=8 \
-+-uuid c7a5fdb2-cdaf-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 \
-+-boot strict=on \
-+-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
-+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 49699e495d..629f5ac100 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1813,6 +1813,7 @@ mymain(void)
- 
-     DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
-     DO_TEST("numatune-no-vcpu", NONE);
-+    DO_TEST_CAPS_LATEST("numatune-hmat");
- 
-     DO_TEST("numatune-auto-nodeset-invalid", NONE);
-     DO_TEST("numatune-auto-prefer", QEMU_CAPS_OBJECT_MEMORY_RAM,
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index de1d720e1d..f790bbc6f1 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1106,7 +1106,7 @@ mymain(void)
-     DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
-     DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
-     DO_TEST("numatune-no-vcpu", QEMU_CAPS_NUMA);
--    DO_TEST("numatune-hmat", NONE);
-+    DO_TEST("numatune-hmat", QEMU_CAPS_NUMA_HMAT);
- 
-     DO_TEST("bios-nvram", NONE);
-     DO_TEST("bios-nvram-os-interleave", NONE);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemu-Check-if-AMD-secure-guest-support-is-enabled.patch b/SOURCES/libvirt-qemu-Check-if-AMD-secure-guest-support-is-enabled.patch
deleted file mode 100644
index a394827..0000000
--- a/SOURCES/libvirt-qemu-Check-if-AMD-secure-guest-support-is-enabled.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 71e87f4da22992c5d9f858535a1acaa7201aa7d3 Mon Sep 17 00:00:00 2001
-Message-Id: <71e87f4da22992c5d9f858535a1acaa7201aa7d3@dist-git>
-From: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:19 +0200
-Subject: [PATCH] qemu: Check if AMD secure guest support is enabled
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Implement secure guest check for AMD SEV (Secure Encrypted
-Virtualization) in order to invalidate the qemu capabilities
-cache in case the availability of the feature changed.
-
-For AMD SEV the verification consists of:
- - checking if /sys/module/kvm_amd/parameters/sev contains the
-   value '1': meaning SEV is enabled in the host kernel;
- - checking if /dev/sev exists
-
-Signed-off-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 657365e74f489b70bfbf2eb014db63046c5e3888)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <1c3393cb71b731f5632d150d77f9920b591aa5ee.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_capabilities.c | 25 +++++++++++++++++++++++++
- 1 file changed, 25 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 8a4b43c269..278eaa0009 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -4543,6 +4543,27 @@ virQEMUCapsKVMSupportsSecureGuestS390(void)
- }
- 
- 
-+/*
-+ * Check whether AMD Secure Encrypted Virtualization (x86) is enabled
-+ */
-+static bool
-+virQEMUCapsKVMSupportsSecureGuestAMD(void)
-+{
-+    g_autofree char *modValue = NULL;
-+
-+    if (virFileReadValueString(&modValue, "/sys/module/kvm_amd/parameters/sev") < 0)
-+        return false;
-+
-+    if (modValue[0] != '1')
-+        return false;
-+
-+    if (virFileExists(QEMU_DEV_SEV))
-+        return true;
-+
-+    return false;
-+}
-+
-+
- /*
-  * Check whether the secure guest functionality is enabled.
-  * See the specific architecture function for details on the verifications made.
-@@ -4554,6 +4575,10 @@ virQEMUCapsKVMSupportsSecureGuest(void)
- 
-     if (ARCH_IS_S390(arch))
-         return virQEMUCapsKVMSupportsSecureGuestS390();
-+
-+    if (ARCH_IS_X86(arch))
-+        return virQEMUCapsKVMSupportsSecureGuestAMD();
-+
-     return false;
- }
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-Check-if-s390-secure-guest-support-is-enabled.patch b/SOURCES/libvirt-qemu-Check-if-s390-secure-guest-support-is-enabled.patch
deleted file mode 100644
index eed06bf..0000000
--- a/SOURCES/libvirt-qemu-Check-if-s390-secure-guest-support-is-enabled.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-From 00ca6e3be3959169559c5bc44dd929d0f313b014 Mon Sep 17 00:00:00 2001
-Message-Id: <00ca6e3be3959169559c5bc44dd929d0f313b014@dist-git>
-From: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:18 +0200
-Subject: [PATCH] qemu: Check if s390 secure guest support is enabled
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This patch introduces a common function to verify if the
-availability of the so-called Secure Guest feature on the host
-has changed in order to invalidate the qemu capabilities cache.
-It can be used as an entry point for verification on different
-architectures.
-
-For s390 the verification consists of:
-- checking if /sys/firmware/uv is available: meaning the HW
-facility is available and the host OS supports it;
-- checking if the kernel cmdline contains 'prot_virt=1': meaning
-the host OS wants to use the feature.
-
-Whenever the availability of the feature does not match the secure
-guest flag in the cache then libvirt will re-build it in order to
-pick up the new set of capabilities available.
-
-Signed-off-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Tested-by: Viktor Mihajlovski <mihajlov@linux.ibm.com>
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit b611b620ceaf940017ba4d0b8b0638869c751509)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <3b91df0693526810b255db4ddc9af3484d655cbf.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_capabilities.c | 61 ++++++++++++++++++++++++++++++++++++
- 1 file changed, 61 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 7609f44efb..8a4b43c269 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -23,6 +23,7 @@
- 
- #include "qemu_capabilities.h"
- #include "viralloc.h"
-+#include "virarch.h"
- #include "vircrypto.h"
- #include "virlog.h"
- #include "virerror.h"
-@@ -642,6 +643,7 @@ struct _virQEMUCaps {
- 
-     bool usedQMP;
-     bool kvmSupportsNesting;
-+    bool kvmSupportsSecureGuest;
- 
-     char *binary;
-     time_t ctime;
-@@ -1837,6 +1839,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
-     ret->invalidation = qemuCaps->invalidation;
-     ret->usedQMP = qemuCaps->usedQMP;
-     ret->kvmSupportsNesting = qemuCaps->kvmSupportsNesting;
-+    ret->kvmSupportsSecureGuest = qemuCaps->kvmSupportsSecureGuest;
- 
-     ret->ctime = qemuCaps->ctime;
- 
-@@ -4233,6 +4236,9 @@ virQEMUCapsLoadCache(virArch hostArch,
-     if (virXPathBoolean("boolean(./kvmSupportsNesting)", ctxt) > 0)
-         qemuCaps->kvmSupportsNesting = true;
- 
-+    if (virXPathBoolean("boolean(./kvmSupportsSecureGuest)", ctxt) > 0)
-+        qemuCaps->kvmSupportsSecureGuest = true;
-+
-     ret = 0;
-  cleanup:
-     VIR_FREE(str);
-@@ -4467,6 +4473,9 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps)
-     if (qemuCaps->kvmSupportsNesting)
-         virBufferAddLit(&buf, "<kvmSupportsNesting/>\n");
- 
-+    if (qemuCaps->kvmSupportsSecureGuest)
-+        virBufferAddLit(&buf, "<kvmSupportsSecureGuest/>\n");
-+
-     virBufferAdjustIndent(&buf, -2);
-     virBufferAddLit(&buf, "</qemuCaps>\n");
- 
-@@ -4506,6 +4515,49 @@ virQEMUCapsSaveFile(void *data,
- }
- 
- 
-+/*
-+ * Check whether IBM Secure Execution (S390) is enabled
-+ */
-+static bool
-+virQEMUCapsKVMSupportsSecureGuestS390(void)
-+{
-+
-+    g_autofree char *cmdline = NULL;
-+    static const char *kValues[] = {"y", "Y", "on", "ON", "oN", "On", "1"};
-+
-+    if (!virFileIsDir("/sys/firmware/uv"))
-+        return false;
-+
-+    if (virFileReadValueString(&cmdline, "/proc/cmdline") < 0)
-+        return false;
-+
-+    /* we're prefix matching rather than equality matching here, because kernel
-+     * would treat even something like prot_virt='yFOO' as enabled */
-+    if (virKernelCmdlineMatchParam(cmdline, "prot_virt", kValues,
-+                                   G_N_ELEMENTS(kValues),
-+                                   VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST |
-+                                   VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX))
-+        return true;
-+
-+    return false;
-+}
-+
-+
-+/*
-+ * Check whether the secure guest functionality is enabled.
-+ * See the specific architecture function for details on the verifications made.
-+ */
-+static bool
-+virQEMUCapsKVMSupportsSecureGuest(void)
-+{
-+    virArch arch = virArchFromHost();
-+
-+    if (ARCH_IS_S390(arch))
-+        return virQEMUCapsKVMSupportsSecureGuestS390();
-+    return false;
-+}
-+
-+
- /* Check the kernel module parameters 'nested' file to determine if enabled
-  *
-  *   Intel: 'kvm_intel' uses 'Y'
-@@ -4685,6 +4737,13 @@ virQEMUCapsIsValid(void *data,
-                      qemuCaps->binary, qemuCaps->kvmSupportsNesting);
-             return false;
-         }
-+
-+        if (virQEMUCapsKVMSupportsSecureGuest() != qemuCaps->kvmSupportsSecureGuest) {
-+            VIR_DEBUG("Outdated capabilities for '%s': kvm kernel secure guest "
-+                      "value changed from %d",
-+                      qemuCaps->binary, qemuCaps->kvmSupportsSecureGuest);
-+            return false;
-+        }
-     }
- 
-     return true;
-@@ -5166,6 +5225,8 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
-         qemuCaps->kernelVersion = g_strdup(kernelVersion);
- 
-         qemuCaps->kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
-+
-+        qemuCaps->kvmSupportsSecureGuest = virQEMUCapsKVMSupportsSecureGuest();
-     }
- 
-     return qemuCaps;
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-Create-multipath-targets-for-PRs.patch b/SOURCES/libvirt-qemu-Create-multipath-targets-for-PRs.patch
deleted file mode 100644
index b122893..0000000
--- a/SOURCES/libvirt-qemu-Create-multipath-targets-for-PRs.patch
+++ /dev/null
@@ -1,399 +0,0 @@
-From 73c83c67608896704bfeb55b7f973f3e5ee12c96 Mon Sep 17 00:00:00 2001
-Message-Id: <73c83c67608896704bfeb55b7f973f3e5ee12c96@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 17 Mar 2020 16:08:02 +0100
-Subject: [PATCH] qemu: Create multipath targets for PRs
-
-If a disk has persistent reservations enabled, qemu-pr-helper
-might open not only /dev/mapper/control but also individual
-targets of the multipath device. We are already querying for them
-in CGroups, but now we have to create them in the namespace too.
-This was brought up in [1].
-
-1: https://bugzilla.redhat.com/show_bug.cgi?id=1711045#c61
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Tested-by: Lin Ma <LMa@suse.com>
-Reviewed-by: Jim Fehlig <jfehlig@suse.com>
-(cherry picked from commit a30078cb832646177defd256e77c632905f1e6d0)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1814157
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-
-Conflicts:
-src/qemu/qemu_domain.c: There are two conflicts. The first one is
-in the first hunk because 7e0d11be5b0 is not backported. The
-second conflict is in the third hunk and it is because
-db780004a9d and friends which switches the code over to use
-autofree and drops needless cleanup labels are not backported.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <7a59996bd80955551d37f775e8d682649b1f4a45.1584457667.git.mprivozn@redhat.com>
-Acked-by: Peter Krempa <pkrempa@redhat.com>
----
- src/qemu/qemu_domain.c                        | 64 ++++++++++------
- src/util/virdevmapper.h                       |  4 +-
- src/util/virutil.h                            |  2 +-
- tests/qemuhotplugmock.c                       | 75 +++++++++++++++++++
- tests/qemuhotplugtest.c                       | 13 ++++
- .../qemuhotplug-disk-scsi-multipath.xml       |  8 ++
- ...uhotplug-base-live+disk-scsi-multipath.xml | 62 +++++++++++++++
- 7 files changed, 204 insertions(+), 24 deletions(-)
- create mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-disk-scsi-multipath.xml
- create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-multipath.xml
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index a273aefa6b..36a63449b2 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -62,6 +62,7 @@
- #include "virdomainsnapshotobjlist.h"
- #include "virdomaincheckpointobjlist.h"
- #include "backup_conf.h"
-+#include "virdevmapper.h"
- 
- #ifdef MAJOR_IN_MKDEV
- # include <sys/mkdev.h>
-@@ -14866,6 +14867,9 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED,
-     int ret = -1;
- 
-     for (next = disk->src; virStorageSourceIsBacking(next); next = next->backingStore) {
-+        VIR_AUTOSTRINGLIST targetPaths = NULL;
-+        size_t i;
-+
-         if (next->type == VIR_STORAGE_TYPE_NVME) {
-             g_autofree char *nvmePath = NULL;
- 
-@@ -14884,6 +14888,19 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED,
- 
-             if (qemuDomainCreateDevice(next->path, data, false) < 0)
-                 goto cleanup;
-+
-+            if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
-+                errno != ENOSYS && errno != EBADF) {
-+                virReportSystemError(errno,
-+                                     _("Unable to get devmapper targets for %s"),
-+                                     next->path);
-+                goto cleanup;
-+            }
-+
-+            for (i = 0; targetPaths && targetPaths[i]; i++) {
-+                if (qemuDomainCreateDevice(targetPaths[i], data, false) < 0)
-+                    goto cleanup;
-+            }
-         }
-     }
- 
-@@ -15910,21 +15927,19 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
-                              virStorageSourcePtr src)
- {
-     virStorageSourcePtr next;
--    char **paths = NULL;
-+    VIR_AUTOSTRINGLIST paths = NULL;
-     size_t npaths = 0;
-     bool hasNVMe = false;
--    g_autofree char *dmPath = NULL;
--    g_autofree char *vfioPath = NULL;
--    int ret = -1;
- 
-     for (next = src; virStorageSourceIsBacking(next); next = next->backingStore) {
-+        VIR_AUTOSTRINGLIST targetPaths = NULL;
-         g_autofree char *tmpPath = NULL;
- 
-         if (next->type == VIR_STORAGE_TYPE_NVME) {
-             hasNVMe = true;
- 
-             if (!(tmpPath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
--                goto cleanup;
-+                return -1;
-         } else {
-             if (virStorageSourceIsEmpty(next) ||
-                 !virStorageSourceIsLocalStorage(next)) {
-@@ -15935,30 +15950,35 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
-             tmpPath = g_strdup(next->path);
-         }
- 
--        if (VIR_APPEND_ELEMENT(paths, npaths, tmpPath) < 0)
--            goto cleanup;
-+        if (virStringListAdd(&paths, tmpPath) < 0)
-+            return -1;
-+
-+        if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
-+            errno != ENOSYS && errno != EBADF) {
-+            virReportSystemError(errno,
-+                                 _("Unable to get devmapper targets for %s"),
-+                                 next->path);
-+            return -1;
-+        }
-+
-+        if (virStringListMerge(&paths, &targetPaths) < 0)
-+            return -1;
-     }
- 
-     /* qemu-pr-helper might require access to /dev/mapper/control. */
--    if (src->pr) {
--        dmPath = g_strdup(QEMU_DEVICE_MAPPER_CONTROL_PATH);
--        if (VIR_APPEND_ELEMENT_COPY(paths, npaths, dmPath) < 0)
--            goto cleanup;
--    }
-+    if (src->pr &&
-+        virStringListAdd(&paths, QEMU_DEVICE_MAPPER_CONTROL_PATH) < 0)
-+        return -1;
- 
--    if (hasNVMe) {
--        vfioPath = g_strdup(QEMU_DEV_VFIO);
--        if (VIR_APPEND_ELEMENT(paths, npaths, vfioPath) < 0)
--            goto cleanup;
--    }
-+    if (hasNVMe &&
-+        virStringListAdd(&paths, QEMU_DEV_VFIO) < 0)
-+        return -1;
- 
-+    npaths = virStringListLength((const char **) paths);
-     if (qemuDomainNamespaceMknodPaths(vm, (const char **) paths, npaths) < 0)
--        goto cleanup;
-+        return -1;
- 
--    ret = 0;
-- cleanup:
--    virStringListFreeCount(paths, npaths);
--    return ret;
-+    return 0;
- }
- 
- 
-diff --git a/src/util/virdevmapper.h b/src/util/virdevmapper.h
-index e576d2bf7e..87bbc63cfd 100644
---- a/src/util/virdevmapper.h
-+++ b/src/util/virdevmapper.h
-@@ -20,6 +20,8 @@
- 
- #pragma once
- 
-+#include "internal.h"
-+
- int
- virDevMapperGetTargets(const char *path,
--                       char ***devPaths);
-+                       char ***devPaths) G_GNUC_NO_INLINE;
-diff --git a/src/util/virutil.h b/src/util/virutil.h
-index a2530e21b5..58c45a6447 100644
---- a/src/util/virutil.h
-+++ b/src/util/virutil.h
-@@ -122,7 +122,7 @@ bool virValidateWWN(const char *wwn);
- 
- int virGetDeviceID(const char *path,
-                    int *maj,
--                   int *min);
-+                   int *min) G_GNUC_NO_INLINE;
- int virSetDeviceUnprivSGIO(const char *path,
-                            int unpriv_sgio);
- int virGetDeviceUnprivSGIO(const char *path,
-diff --git a/tests/qemuhotplugmock.c b/tests/qemuhotplugmock.c
-index 43a9d79051..8e5b07788d 100644
---- a/tests/qemuhotplugmock.c
-+++ b/tests/qemuhotplugmock.c
-@@ -19,7 +19,24 @@
- #include <config.h>
- 
- #include "qemu/qemu_hotplug.h"
-+#include "qemu/qemu_process.h"
- #include "conf/domain_conf.h"
-+#include "virdevmapper.h"
-+#include "virutil.h"
-+#include "virmock.h"
-+
-+static int (*real_virGetDeviceID)(const char *path, int *maj, int *min);
-+static bool (*real_virFileExists)(const char *path);
-+
-+static void
-+init_syms(void)
-+{
-+    if (real_virFileExists)
-+        return;
-+
-+    VIR_MOCK_REAL_INIT(virGetDeviceID);
-+    VIR_MOCK_REAL_INIT(virFileExists);
-+}
- 
- unsigned long long
- qemuDomainGetUnplugTimeout(virDomainObjPtr vm G_GNUC_UNUSED)
-@@ -31,3 +48,61 @@ qemuDomainGetUnplugTimeout(virDomainObjPtr vm G_GNUC_UNUSED)
-         return 200;
-     return 100;
- }
-+
-+
-+int
-+virDevMapperGetTargets(const char *path,
-+                       char ***devPaths)
-+{
-+    *devPaths = NULL;
-+
-+    if (STREQ(path, "/dev/mapper/virt")) {
-+        *devPaths = g_new(char *, 4);
-+        (*devPaths)[0] = g_strdup("/dev/block/8:0");  /* /dev/sda */
-+        (*devPaths)[1] = g_strdup("/dev/block/8:16"); /* /dev/sdb */
-+        (*devPaths)[2] = g_strdup("/dev/block/8:32"); /* /dev/sdc */
-+        (*devPaths)[3] = NULL;
-+    }
-+
-+    return 0;
-+}
-+
-+
-+int
-+virGetDeviceID(const char *path, int *maj, int *min)
-+{
-+    init_syms();
-+
-+    if (STREQ(path, "/dev/mapper/virt")) {
-+        *maj = 254;
-+        *min = 0;
-+        return 0;
-+    }
-+
-+    return real_virGetDeviceID(path, maj, min);
-+}
-+
-+
-+bool
-+virFileExists(const char *path)
-+{
-+    init_syms();
-+
-+    if (STREQ(path, "/dev/mapper/virt"))
-+        return true;
-+
-+    return real_virFileExists(path);
-+}
-+
-+
-+int
-+qemuProcessStartManagedPRDaemon(virDomainObjPtr vm G_GNUC_UNUSED)
-+{
-+    return 0;
-+}
-+
-+
-+void
-+qemuProcessKillManagedPRDaemon(virDomainObjPtr vm G_GNUC_UNUSED)
-+{
-+}
-diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
-index a60c8d1c93..2105c70ca8 100644
---- a/tests/qemuhotplugtest.c
-+++ b/tests/qemuhotplugtest.c
-@@ -87,6 +87,8 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
-     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_VNC);
-     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_SPICE);
-     virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_SPICE_FILE_XFER_DISABLE);
-+    virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER);
-+    virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_SCSI_BLOCK);
- 
-     if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0)
-         return -1;
-@@ -743,6 +745,17 @@ mymain(void)
-                    "device_del", QMP_DEVICE_DELETED("scsi3-0-5-6") QMP_OK,
-                    "human-monitor-command", HMP(""));
- 
-+    DO_TEST_ATTACH("base-live", "disk-scsi-multipath", false, true,
-+                   "object-add", QMP_OK,
-+                   "human-monitor-command", HMP("OK\\r\\n"),
-+                   "device_add", QMP_OK);
-+    DO_TEST_DETACH("base-live", "disk-scsi-multipath", true, true,
-+                   "device_del", QMP_OK,
-+                   "human-monitor-command", HMP(""));
-+    DO_TEST_DETACH("base-live", "disk-scsi-multipath", false, false,
-+                   "device_del", QMP_DEVICE_DELETED("scsi0-0-0-0") QMP_OK,
-+                   "human-monitor-command", HMP(""));
-+
-     DO_TEST_ATTACH("base-live", "qemu-agent", false, true,
-                    "chardev-add", QMP_OK,
-                    "device_add", QMP_OK);
-diff --git a/tests/qemuhotplugtestdevices/qemuhotplug-disk-scsi-multipath.xml b/tests/qemuhotplugtestdevices/qemuhotplug-disk-scsi-multipath.xml
-new file mode 100644
-index 0000000000..5a6f955284
---- /dev/null
-+++ b/tests/qemuhotplugtestdevices/qemuhotplug-disk-scsi-multipath.xml
-@@ -0,0 +1,8 @@
-+<disk type='block' device='lun'>
-+    <driver name='qemu' type='raw'/>
-+    <source dev='/dev/mapper/virt'>
-+        <reservations managed='yes'/>
-+    </source>
-+    <target dev='sda' bus='scsi'/>
-+  <address type='drive' controller='0' bus='0' target='0' unit='0'/>
-+</disk>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-multipath.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-multipath.xml
-new file mode 100644
-index 0000000000..40af064d10
---- /dev/null
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+disk-scsi-multipath.xml
-@@ -0,0 +1,62 @@
-+<domain type='kvm' id='7'>
-+  <name>hotplug</name>
-+  <uuid>d091ea82-29e6-2e34-3005-f02617b36e87</uuid>
-+  <memory unit='KiB'>4194304</memory>
-+  <currentMemory unit='KiB'>4194304</currentMemory>
-+  <vcpu placement='static'>4</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+    <pae/>
-+  </features>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>restart</on_crash>
-+  <devices>
-+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
-+    <disk type='block' device='lun'>
-+      <driver name='qemu' type='raw'/>
-+      <source dev='/dev/mapper/virt'>
-+        <reservations managed='yes'>
-+          <source type='unix' path='/tmp/lib/domain-7-hotplug/pr-helper0.sock' mode='client'/>
-+        </reservations>
-+      </source>
-+      <backingStore/>
-+      <target dev='sda' bus='scsi'/>
-+      <alias name='scsi0-0-0-0'/>
-+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
-+    </disk>
-+    <controller type='usb' index='0'>
-+      <alias name='usb'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
-+    </controller>
-+    <controller type='ide' index='0'>
-+      <alias name='ide'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-+    </controller>
-+    <controller type='scsi' index='0' model='virtio-scsi'>
-+      <alias name='scsi0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+    </controller>
-+    <controller type='pci' index='0' model='pci-root'>
-+      <alias name='pci'/>
-+    </controller>
-+    <controller type='virtio-serial' index='0'>
-+      <alias name='virtio-serial0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-+    </controller>
-+    <input type='mouse' bus='ps2'>
-+      <alias name='input0'/>
-+    </input>
-+    <input type='keyboard' bus='ps2'>
-+      <alias name='input1'/>
-+    </input>
-+    <memballoon model='none'/>
-+  </devices>
-+  <seclabel type='none' model='none'/>
-+</domain>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Don-t-crash-when-getting-targets-for-a-multipath.patch b/SOURCES/libvirt-qemu-Don-t-crash-when-getting-targets-for-a-multipath.patch
deleted file mode 100644
index 657264e..0000000
--- a/SOURCES/libvirt-qemu-Don-t-crash-when-getting-targets-for-a-multipath.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From eb4cd7cd29f434bae7279b3166aac9f7eb2c2436 Mon Sep 17 00:00:00 2001
-Message-Id: <eb4cd7cd29f434bae7279b3166aac9f7eb2c2436@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Thu, 19 Mar 2020 19:46:43 +0100
-Subject: [PATCH] qemu: Don't crash when getting targets for a multipath
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In one of my previous commits I've introduced code that creates
-all devices for given (possible) multipath target. But I've made
-a mistake there - the code accesses 'next->path' without checking
-if the disk source is local. Note that the 'next->path' is
-NULL/doesn't make sense for VIR_STORAGE_TYPE_NVME.
-
-Fixes: a30078cb832646177defd256e77c632905f1e6d0
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1814947
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit aeb909bf9b4c3fa48d017475545df94f7c5d3b3a)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <3f21a46399486a42b8dd0fbbac25b75f4f6ac80a.1584643597.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 23 ++++++++++++-----------
- 1 file changed, 12 insertions(+), 11 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 36a63449b2..3d31e176d1 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -15932,7 +15932,6 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
-     bool hasNVMe = false;
- 
-     for (next = src; virStorageSourceIsBacking(next); next = next->backingStore) {
--        VIR_AUTOSTRINGLIST targetPaths = NULL;
-         g_autofree char *tmpPath = NULL;
- 
-         if (next->type == VIR_STORAGE_TYPE_NVME) {
-@@ -15941,6 +15940,8 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
-             if (!(tmpPath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
-                 return -1;
-         } else {
-+            VIR_AUTOSTRINGLIST targetPaths = NULL;
-+
-             if (virStorageSourceIsEmpty(next) ||
-                 !virStorageSourceIsLocalStorage(next)) {
-                 /* Not creating device. Just continue. */
-@@ -15948,20 +15949,20 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
-             }
- 
-             tmpPath = g_strdup(next->path);
--        }
- 
--        if (virStringListAdd(&paths, tmpPath) < 0)
--            return -1;
-+            if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
-+                errno != ENOSYS && errno != EBADF) {
-+                virReportSystemError(errno,
-+                                     _("Unable to get devmapper targets for %s"),
-+                                     next->path);
-+                return -1;
-+            }
- 
--        if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
--            errno != ENOSYS && errno != EBADF) {
--            virReportSystemError(errno,
--                                 _("Unable to get devmapper targets for %s"),
--                                 next->path);
--            return -1;
-+            if (virStringListMerge(&paths, &targetPaths) < 0)
-+                return -1;
-         }
- 
--        if (virStringListMerge(&paths, &targetPaths) < 0)
-+        if (virStringListAdd(&paths, tmpPath) < 0)
-             return -1;
-     }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Don-t-emit-SUSPENDED_POSTCOPY-event-on-destination.patch b/SOURCES/libvirt-qemu-Don-t-emit-SUSPENDED_POSTCOPY-event-on-destination.patch
deleted file mode 100644
index 2ec063b..0000000
--- a/SOURCES/libvirt-qemu-Don-t-emit-SUSPENDED_POSTCOPY-event-on-destination.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From fcad662da8e472fc749a439d5bc2bdd30164d779 Mon Sep 17 00:00:00 2001
-Message-Id: <fcad662da8e472fc749a439d5bc2bdd30164d779@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 16 Jan 2020 19:57:53 +0100
-Subject: [PATCH] qemu: Don't emit SUSPENDED_POSTCOPY event on destination
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When pause-before-switchover QEMU capability is enabled, we get STOP
-event before MIGRATION event with postcopy-active state. To properly
-handle post-copy migration and emit correct events commit
-v4.10.0-rc1-4-geca9d21e6c added a hack to
-qemuProcessHandleMigrationStatus which translates the paused state
-reason to VIR_DOMAIN_PAUSED_POSTCOPY and emits
-VIR_DOMAIN_EVENT_SUSPENDED_POSTCOPY event when migration state changes
-to post-copy.
-
-However, the code was effective on both sides of migration resulting in
-a confusing VIR_DOMAIN_EVENT_SUSPENDED_POSTCOPY event on the destination
-host, where entering post-copy mode is already properly advertised by
-VIR_DOMAIN_EVENT_RESUMED_POSTCOPY event.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791458
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit bd04d63ad97c21b6955710e6473a502f49816a3c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791886
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <9b32d5af0dd1d3bf7108abc426dc4d6ceeaa84f8.1579193220.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_process.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index 4195042194..a7bbab9e56 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -1653,6 +1653,7 @@ qemuProcessHandleMigrationStatus(qemuMonitorPtr mon G_GNUC_UNUSED,
-     virDomainObjBroadcast(vm);
- 
-     if (status == QEMU_MONITOR_MIGRATION_STATUS_POSTCOPY &&
-+        priv->job.asyncJob == QEMU_ASYNC_JOB_MIGRATION_OUT &&
-         virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
-         reason == VIR_DOMAIN_PAUSED_MIGRATION) {
-         VIR_DEBUG("Correcting paused state reason for domain %s to %s",
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Don-t-store-disk-alias-in-qemuAgentDiskInfo.patch b/SOURCES/libvirt-qemu-Don-t-store-disk-alias-in-qemuAgentDiskInfo.patch
deleted file mode 100644
index d5b4bf9..0000000
--- a/SOURCES/libvirt-qemu-Don-t-store-disk-alias-in-qemuAgentDiskInfo.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-From b4840a983e10b8cca99fa50ed3cf99af370a19c9 Mon Sep 17 00:00:00 2001
-Message-Id: <b4840a983e10b8cca99fa50ed3cf99af370a19c9@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Thu, 20 Feb 2020 10:52:25 -0600
-Subject: [PATCH] qemu: Don't store disk alias in qemuAgentDiskInfo
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The qemuAgentDiskInfo structure is filled with information received from
-the agent command response, except for the 'alias' field, which is
-retrieved from the vm definition. Limit this structure only to data that
-was received from the agent message.
-
-This is another intermediate step in moving the responsibility for
-searching the vmdef from qemu_agent.c to qemu_driver.c so that we can
-avoid holding an agent job and a normal job at the same time.
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 306b4cb070b8f57a22a261d1f097283f4ef84e65)
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1759566
-Message-Id: <20200220165227.11491-4-jjongsma@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_agent.c | 64 ++++++++++++++++++++++++-------------------
- 1 file changed, 36 insertions(+), 28 deletions(-)
-
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index 077b5538de..4739faeed8 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -1847,7 +1847,6 @@ qemuAgentSetTime(qemuAgentPtr mon,
- typedef struct _qemuAgentDiskInfo qemuAgentDiskInfo;
- typedef qemuAgentDiskInfo *qemuAgentDiskInfoPtr;
- struct _qemuAgentDiskInfo {
--    char *alias;
-     char *serial;
-     virPCIDeviceAddress pci_controller;
-     char *bus_type;
-@@ -1876,7 +1875,6 @@ qemuAgentDiskInfoFree(qemuAgentDiskInfoPtr info)
-         return;
- 
-     VIR_FREE(info->serial);
--    VIR_FREE(info->alias);
-     VIR_FREE(info->bus_type);
-     VIR_FREE(info->devnode);
-     VIR_FREE(info);
-@@ -1902,7 +1900,8 @@ qemuAgentFSInfoFree(qemuAgentFSInfoPtr info)
- }
- 
- static virDomainFSInfoPtr
--qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent)
-+qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent,
-+                        virDomainDefPtr vmdef)
- {
-     virDomainFSInfoPtr ret = NULL;
-     size_t i;
-@@ -1920,8 +1919,19 @@ qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent)
- 
-     ret->ndevAlias = agent->ndisks;
- 
--    for (i = 0; i < ret->ndevAlias; i++)
--        ret->devAlias[i] = g_strdup(agent->disks[i]->alias);
-+    for (i = 0; i < ret->ndevAlias; i++) {
-+        qemuAgentDiskInfoPtr agentdisk = agent->disks[i];
-+        virDomainDiskDefPtr diskDef;
-+
-+        if (!(diskDef = virDomainDiskByAddress(vmdef,
-+                                               &agentdisk->pci_controller,
-+                                               agentdisk->bus,
-+                                               agentdisk->target,
-+                                               agentdisk->unit)))
-+            continue;
-+
-+        ret->devAlias[i] = g_strdup(diskDef->dst);
-+    }
- 
-     return ret;
- 
-@@ -1932,8 +1942,7 @@ qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent)
- 
- static int
- qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
--                            qemuAgentFSInfoPtr fsinfo,
--                            virDomainDefPtr vmdef)
-+                            qemuAgentFSInfoPtr fsinfo)
- {
-     size_t ndisks;
-     size_t i;
-@@ -1956,7 +1965,6 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-         virJSONValuePtr jsondisk = virJSONValueArrayGet(jsondisks, i);
-         virJSONValuePtr pci;
-         qemuAgentDiskInfoPtr disk;
--        virDomainDiskDefPtr diskDef;
-         const char *val;
- 
-         if (!jsondisk) {
-@@ -2007,14 +2015,6 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-         GET_DISK_ADDR(pci, &disk->pci_controller.function, "function");
- 
- #undef GET_DISK_ADDR
--        if (!(diskDef = virDomainDiskByAddress(vmdef,
--                                               &disk->pci_controller,
--                                               disk->bus,
--                                               disk->target,
--                                               disk->unit)))
--            continue;
--
--        disk->alias = g_strdup(diskDef->dst);
-     }
- 
-     return 0;
-@@ -2026,8 +2026,7 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-  */
- static int
- qemuAgentGetFSInfoInternal(qemuAgentPtr mon,
--                           qemuAgentFSInfoPtr **info,
--                           virDomainDefPtr vmdef)
-+                           qemuAgentFSInfoPtr **info)
- {
-     size_t i;
-     int ret = -1;
-@@ -2143,7 +2142,7 @@ qemuAgentGetFSInfoInternal(qemuAgentPtr mon,
-             goto cleanup;
-         }
- 
--        if (qemuAgentGetFSInfoFillDisks(disk, info_ret[i], vmdef) < 0)
-+        if (qemuAgentGetFSInfoFillDisks(disk, info_ret[i]) < 0)
-             goto cleanup;
-     }
- 
-@@ -2173,14 +2172,14 @@ qemuAgentGetFSInfo(qemuAgentPtr mon,
-     size_t i;
-     int nfs;
- 
--    nfs = qemuAgentGetFSInfoInternal(mon, &agentinfo, vmdef);
-+    nfs = qemuAgentGetFSInfoInternal(mon, &agentinfo);
-     if (nfs < 0)
-         return ret;
-     if (VIR_ALLOC_N(info_ret, nfs) < 0)
-         goto cleanup;
- 
-     for (i = 0; i < nfs; i++) {
--        if (!(info_ret[i] = qemuAgentFSInfoToPublic(agentinfo[i])))
-+        if (!(info_ret[i] = qemuAgentFSInfoToPublic(agentinfo[i], vmdef)))
-             goto cleanup;
-     }
- 
-@@ -2215,7 +2214,7 @@ qemuAgentGetFSInfoParams(qemuAgentPtr mon,
-     size_t i, j;
-     int nfs;
- 
--    if ((nfs = qemuAgentGetFSInfoInternal(mon, &fsinfo, vmdef)) < 0)
-+    if ((nfs = qemuAgentGetFSInfoInternal(mon, &fsinfo)) < 0)
-         return nfs;
- 
-     if (virTypedParamsAddUInt(params, nparams, maxparams,
-@@ -2262,13 +2261,22 @@ qemuAgentGetFSInfoParams(qemuAgentPtr mon,
-                                   param_name, fsinfo[i]->ndisks) < 0)
-             goto cleanup;
-         for (j = 0; j < fsinfo[i]->ndisks; j++) {
-+            virDomainDiskDefPtr diskdef = NULL;
-             qemuAgentDiskInfoPtr d = fsinfo[i]->disks[j];
--            g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                       "fs.%zu.disk.%zu.alias", i, j);
--            if (d->alias &&
--                virTypedParamsAddString(params, nparams, maxparams,
--                                        param_name, d->alias) < 0)
--                goto cleanup;
-+            /* match the disk to the target in the vm definition */
-+            diskdef = virDomainDiskByAddress(vmdef,
-+                                             &d->pci_controller,
-+                                             d->bus,
-+                                             d->target,
-+                                             d->unit);
-+            if (diskdef) {
-+                g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                           "fs.%zu.disk.%zu.alias", i, j);
-+                if (diskdef->dst &&
-+                    virTypedParamsAddString(params, nparams, maxparams,
-+                                            param_name, diskdef->dst) < 0)
-+                    goto cleanup;
-+            }
- 
-             g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-                        "fs.%zu.disk.%zu.serial", i, j);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Don-t-take-double-pointer-in-qemuDomainSecretInfoFree.patch b/SOURCES/libvirt-qemu-Don-t-take-double-pointer-in-qemuDomainSecretInfoFree.patch
deleted file mode 100644
index c319883..0000000
--- a/SOURCES/libvirt-qemu-Don-t-take-double-pointer-in-qemuDomainSecretInfoFree.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From bcc3726dae87335a533565c6d679434fa69fe75e Mon Sep 17 00:00:00 2001
-Message-Id: <bcc3726dae87335a533565c6d679434fa69fe75e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:41 +0100
-Subject: [PATCH] qemu: Don't take double pointer in qemuDomainSecretInfoFree
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Using a double pointer prevents the function from being used as the
-automatic cleanup function for the given type.
-
-Remove the double pointer use by replacing the calls with
-g_clear_pointer which ensures that the pointer is cleared.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 38bc76bcc1e1bccb7f3265e15b60b0f6f8fe6dfa)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <56ebeda94754aab81a682202f26c1dc158ac063a.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c           | 30 +++++++++++++-----------------
- src/qemu/qemu_domain.h           |  2 +-
- src/qemu/qemu_migration_params.c |  2 +-
- 3 files changed, 15 insertions(+), 19 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 14bab896bc..b77488026a 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1106,14 +1106,10 @@ qemuDomainSecretInfoClear(qemuDomainSecretInfoPtr secinfo,
- 
- 
- void
--qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr *secinfo)
-+qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr secinfo)
- {
--    if (!*secinfo)
--        return;
--
--    qemuDomainSecretInfoClear(*secinfo, false);
--
--    VIR_FREE(*secinfo);
-+    qemuDomainSecretInfoClear(secinfo, false);
-+    g_free(secinfo);
- }
- 
- 
-@@ -1203,8 +1199,8 @@ qemuDomainStorageSourcePrivateDispose(void *obj)
- {
-     qemuDomainStorageSourcePrivatePtr priv = obj;
- 
--    qemuDomainSecretInfoFree(&priv->secinfo);
--    qemuDomainSecretInfoFree(&priv->encinfo);
-+    g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
-+    g_clear_pointer(&priv->encinfo, qemuDomainSecretInfoFree);
- }
- 
- 
-@@ -1283,7 +1279,7 @@ qemuDomainChrSourcePrivateDispose(void *obj)
- {
-     qemuDomainChrSourcePrivatePtr priv = obj;
- 
--    qemuDomainSecretInfoFree(&priv->secinfo);
-+    g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
- }
- 
- 
-@@ -1362,7 +1358,7 @@ qemuDomainGraphicsPrivateDispose(void *obj)
-     qemuDomainGraphicsPrivatePtr priv = obj;
- 
-     VIR_FREE(priv->tlsAlias);
--    qemuDomainSecretInfoFree(&priv->secinfo);
-+    g_clear_pointer(&priv->secinfo, qemuDomainSecretInfoFree);
- }
- 
- 
-@@ -1642,7 +1638,7 @@ qemuDomainSecretInfoNewPlain(virSecretUsageType usageType,
-         return NULL;
- 
-     if (qemuDomainSecretPlainSetup(secinfo, usageType, username, lookupDef) < 0) {
--        qemuDomainSecretInfoFree(&secinfo);
-+        g_clear_pointer(&secinfo, qemuDomainSecretInfoFree);
-         return NULL;
-     }
- 
-@@ -1685,7 +1681,7 @@ qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv,
- 
-     if (qemuDomainSecretAESSetup(priv, secinfo, srcAlias, usageType, username,
-                                  lookupDef, isLuks) < 0) {
--        qemuDomainSecretInfoFree(&secinfo);
-+        g_clear_pointer(&secinfo, qemuDomainSecretInfoFree);
-         return NULL;
-     }
- 
-@@ -1847,7 +1843,7 @@ qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr hostdev)
-         if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
-             srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(iscsisrc->src);
-             if (srcPriv && srcPriv->secinfo)
--                qemuDomainSecretInfoFree(&srcPriv->secinfo);
-+                g_clear_pointer(&srcPriv->secinfo, qemuDomainSecretInfoFree);
-         }
-     }
- }
-@@ -1891,7 +1887,7 @@ qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev)
-     if (!chrSourcePriv || !chrSourcePriv->secinfo)
-         return;
- 
--    qemuDomainSecretInfoFree(&chrSourcePriv->secinfo);
-+    g_clear_pointer(&chrSourcePriv->secinfo, qemuDomainSecretInfoFree);
- }
- 
- 
-@@ -1947,7 +1943,7 @@ qemuDomainSecretGraphicsDestroy(virDomainGraphicsDefPtr graphics)
-         return;
- 
-     VIR_FREE(gfxPriv->tlsAlias);
--    qemuDomainSecretInfoFree(&gfxPriv->secinfo);
-+    g_clear_pointer(&gfxPriv->secinfo, qemuDomainSecretInfoFree);
- }
- 
- 
-@@ -2307,7 +2303,7 @@ qemuDomainObjPrivateFree(void *data)
-     }
-     VIR_FREE(priv->cleanupCallbacks);
- 
--    qemuDomainSecretInfoFree(&priv->migSecinfo);
-+    g_clear_pointer(&priv->migSecinfo, qemuDomainSecretInfoFree);
-     qemuDomainMasterKeyFree(priv);
- 
-     virHashFree(priv->blockjobs);
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index 9d143b575d..89a967efd7 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -1032,7 +1032,7 @@ void qemuDomainMasterKeyRemove(qemuDomainObjPrivatePtr priv);
- 
- bool qemuDomainSupportsEncryptedSecret(qemuDomainObjPrivatePtr priv);
- 
--void qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr *secinfo)
-+void qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr secinfo)
-     ATTRIBUTE_NONNULL(1);
- 
- void qemuDomainSecretInfoDestroy(qemuDomainSecretInfoPtr secinfo);
-diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
-index 45acf8cda2..f61796713f 100644
---- a/src/qemu/qemu_migration_params.c
-+++ b/src/qemu/qemu_migration_params.c
-@@ -1090,7 +1090,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver,
-     secAlias = qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE, false);
- 
-     qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias);
--    qemuDomainSecretInfoFree(&QEMU_DOMAIN_PRIVATE(vm)->migSecinfo);
-+    g_clear_pointer(&QEMU_DOMAIN_PRIVATE(vm)->migSecinfo, qemuDomainSecretInfoFree);
- 
-     VIR_FREE(tlsAlias);
-     VIR_FREE(secAlias);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Fix-domfsinfo-for-non-PCI-device-information-from-guest-agent.patch b/SOURCES/libvirt-qemu-Fix-domfsinfo-for-non-PCI-device-information-from-guest-agent.patch
deleted file mode 100644
index d1f5cda..0000000
--- a/SOURCES/libvirt-qemu-Fix-domfsinfo-for-non-PCI-device-information-from-guest-agent.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From c1605fba8512fc77f3e2e2bdbbca56e14a086893 Mon Sep 17 00:00:00 2001
-Message-Id: <c1605fba8512fc77f3e2e2bdbbca56e14a086893@dist-git>
-From: Thomas Huth <thuth@redhat.com>
-Date: Fri, 2 Oct 2020 12:32:11 +0200
-Subject: [PATCH] qemu: Fix domfsinfo for non-PCI device information from guest
- agent
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-qemuAgentFSInfoToPublic() currently only sets the devAlias for PCI devices.
-However, the QEMU guest agent could also provide the device name in the
-"dev" field of the response for other devices instead (well, at least after
-fixing another problem in the current QEMU guest agent...). So if creating
-the devAlias from the PCI information failed, let's fall back to the name
-provided by the guest agent. This helps to fix the empty "Target" fields
-that occur when running "virsh domfsinfo" on s390x where CCW devices are
-used for the guest instead of PCI devices.
-
-Also add a proper debug message here in case we completely failed to set the
-device alias, since this problem here was very hard to debug: The only two
-error messages that I've seen were "Unable to get filesystem information"
-and "Unable to encode message payload" - which only indicates that something
-went wrong in the RPC call. No debug message indicated the real problem, so
-I had to learn the hard way why the RPC call failed (it apparently does not
-like devAlias left to be NULL) and where the real problem comes from.
-
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Signed-off-by: Thomas Huth <thuth@redhat.com>
-(cherry picked from commit f8333b3b0a7fdbc1f18ed501c043ac7618b86a16)
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1858771
-Message-Id: <20201002103211.250169-2-thuth@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_driver.c | 19 +++++++++++--------
- 1 file changed, 11 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 0f06974a1b..80a4a43e2e 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -21996,14 +21996,17 @@ qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent,
-         qemuAgentDiskInfoPtr agentdisk = agent->disks[i];
-         virDomainDiskDefPtr diskDef;
- 
--        if (!(diskDef = virDomainDiskByAddress(vmdef,
--                                               &agentdisk->pci_controller,
--                                               agentdisk->bus,
--                                               agentdisk->target,
--                                               agentdisk->unit)))
--            continue;
--
--        ret->devAlias[i] = g_strdup(diskDef->dst);
-+        diskDef = virDomainDiskByAddress(vmdef,
-+                                         &agentdisk->pci_controller,
-+                                         agentdisk->bus,
-+                                         agentdisk->target,
-+                                         agentdisk->unit);
-+        if (diskDef != NULL)
-+            ret->devAlias[i] = g_strdup(diskDef->dst);
-+        else if (agentdisk->devnode != NULL)
-+            ret->devAlias[i] = g_strdup(agentdisk->devnode);
-+        else
-+            VIR_DEBUG("Missing devnode name for '%s'.", ret->mountpoint);
-     }
- 
-     return ret;
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-qemu-Fix-value-of-device-argument-for-block-commit.patch b/SOURCES/libvirt-qemu-Fix-value-of-device-argument-for-block-commit.patch
deleted file mode 100644
index b06fd40..0000000
--- a/SOURCES/libvirt-qemu-Fix-value-of-device-argument-for-block-commit.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 287db7fde2511199afa62af511acff4b00607c11 Mon Sep 17 00:00:00 2001
-Message-Id: <287db7fde2511199afa62af511acff4b00607c11@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:39 +0100
-Subject: [PATCH] qemu: Fix value of 'device' argument for block-commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When using blockdev configurations the 'device' argument of
-'blockdev-commit' must correspond to the topmost node in the block node
-graph. Libvirt didn't do this properly in case when 'copy_on_read'
-option was enabled on the disk.
-
-Use qemuDomainDiskGetTopNodename to fix it when calling block-commit.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 69908db0f62444e51bb8aae157b5ae48f45e2fe4)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1792195
-Message-Id: <0e7223fc993570a108cd849e9d65c476b2294d99.1580824112.git.pkrempa@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 6a209ccb75..e651c9e819 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18815,7 +18815,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
-         jobname = job->name;
-         nodetop = topSource->nodeformat;
-         nodebase = baseSource->nodeformat;
--        device = disk->src->nodeformat;
-+        device = qemuDomainDiskGetTopNodename(disk);
-         if (!backingPath && top_parent &&
-             !(backingPath = qemuBlockGetBackingStoreString(baseSource)))
-             goto endjob;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Fix-value-of-device-argument-for-blockdev-mirror.patch b/SOURCES/libvirt-qemu-Fix-value-of-device-argument-for-blockdev-mirror.patch
deleted file mode 100644
index adc881f..0000000
--- a/SOURCES/libvirt-qemu-Fix-value-of-device-argument-for-blockdev-mirror.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 3959e3ef365e95ee4f5e68eb1ab189d6e8cb189d Mon Sep 17 00:00:00 2001
-Message-Id: <3959e3ef365e95ee4f5e68eb1ab189d6e8cb189d@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:38 +0100
-Subject: [PATCH] qemu: Fix value of 'device' argument for blockdev-mirror
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When using blockdev configurations the 'device' argument of
-'blockdev-mirror' must correspond to the topmost node in the block node
-graph. Libvirt didn't do this properly in case when 'copy_on_read'
-option was enabled on the disk.
-
-Use qemuDomainDiskGetTopNodename to fix it for the blockdev-mirror calls
-in qemuDomainBlockCopy and the non-shared-storage migration.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit e3137539a9c4af25ab085506d5467ec0847b0ecc)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1792195
-Message-Id: <1b3e7edbec684588424e78ed5009bfcb0ce7e183.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c    | 2 +-
- src/qemu/qemu_migration.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 83f24d7231..6a209ccb75 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18388,7 +18388,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
- 
-     if (blockdev) {
-         ret = qemuMonitorBlockdevMirror(priv->mon, job->name, true,
--                                        disk->src->nodeformat,
-+                                        qemuDomainDiskGetTopNodename(disk),
-                                         mirror->nodeformat, bandwidth,
-                                         granularity, buf_size, mirror_shallow);
-     } else {
-diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
-index b56ccbdc3c..03f058051d 100644
---- a/src/qemu/qemu_migration.c
-+++ b/src/qemu/qemu_migration.c
-@@ -931,7 +931,7 @@ qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver,
- 
-     if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-         jobname = diskAlias;
--        sourcename = disk->src->nodeformat;
-+        sourcename = qemuDomainDiskGetTopNodename(disk);
-         persistjob = true;
-     } else {
-         jobname = NULL;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Format-the-armvtimer-timer-on-the-command-line.patch b/SOURCES/libvirt-qemu-Format-the-armvtimer-timer-on-the-command-line.patch
deleted file mode 100644
index f0618b8..0000000
--- a/SOURCES/libvirt-qemu-Format-the-armvtimer-timer-on-the-command-line.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From b9acfbcad6181babba50384741e0c30d6d0cc534 Mon Sep 17 00:00:00 2001
-Message-Id: <b9acfbcad6181babba50384741e0c30d6d0cc534@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 13:12:37 +0100
-Subject: [PATCH] qemu: Format the armvtimer timer on the command line
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Its behavior is controlled by a KVM-specific CPU feature.
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 7c4bc108a9bd7bda1543131d232e2ccee92a9e43)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214121237.623948-7-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_command.c | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index e1e19e0fcc..1a5142d472 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -6633,6 +6633,19 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
-                 virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
-             break;
-         case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-+            switch (timer->tickpolicy) {
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
-+                virBufferAddLit(&buf, ",kvm-no-adjvtime=off");
-+                break;
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
-+                virBufferAddLit(&buf, ",kvm-no-adjvtime=on");
-+                break;
-+            case -1:
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
-+                break;
-+            }
-+            break;
-         case VIR_DOMAIN_TIMER_NAME_PLATFORM:
-         case VIR_DOMAIN_TIMER_NAME_PIT:
-         case VIR_DOMAIN_TIMER_NAME_RTC:
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Handle-hotplug-and-commandline-for-secret-objects-for-http-cookies.patch b/SOURCES/libvirt-qemu-Handle-hotplug-and-commandline-for-secret-objects-for-http-cookies.patch
deleted file mode 100644
index 7a3ea28..0000000
--- a/SOURCES/libvirt-qemu-Handle-hotplug-and-commandline-for-secret-objects-for-http-cookies.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From 45181b943720b46caf3263c2edbc5c0427870369 Mon Sep 17 00:00:00 2001
-Message-Id: <45181b943720b46caf3263c2edbc5c0427870369@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:04 +0100
-Subject: [PATCH] qemu: Handle hotplug and commandline for secret objects for
- http cookies
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Implement both commandline support and hotplug by adding the http cookie
-handling to 'qemuBlockStorageSourceAttachData' handling functions for
-it.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b512935b17d991dcdd1a14e39e5f13ca828bd416)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <40869b86260516bd56253a39e5dfb54519e5313e.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c   | 13 +++++++++++++
- src/qemu/qemu_block.h   |  3 +++
- src/qemu/qemu_command.c |  5 +++++
- 3 files changed, 21 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index e60975a142..f07420b6e2 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1499,11 +1499,13 @@ qemuBlockStorageSourceAttachDataFree(qemuBlockStorageSourceAttachDataPtr data)
-     virJSONValueFree(data->formatProps);
-     virJSONValueFree(data->prmgrProps);
-     virJSONValueFree(data->authsecretProps);
-+    virJSONValueFree(data->httpcookiesecretProps);
-     virJSONValueFree(data->encryptsecretProps);
-     virJSONValueFree(data->tlsProps);
-     VIR_FREE(data->tlsAlias);
-     VIR_FREE(data->authsecretAlias);
-     VIR_FREE(data->encryptsecretAlias);
-+    VIR_FREE(data->httpcookiesecretAlias);
-     VIR_FREE(data->driveCmd);
-     VIR_FREE(data->driveAlias);
-     VIR_FREE(data);
-@@ -1570,6 +1572,11 @@ qemuBlockStorageSourceAttachApplyStorageDeps(qemuMonitorPtr mon,
-                              &data->authsecretAlias) < 0)
-         return -1;
- 
-+    if (data->httpcookiesecretProps &&
-+        qemuMonitorAddObject(mon, &data->httpcookiesecretProps,
-+                             &data->httpcookiesecretAlias) < 0)
-+        return -1;
-+
-     if (data->tlsProps &&
-         qemuMonitorAddObject(mon, &data->tlsProps, &data->tlsAlias) < 0)
-         return -1;
-@@ -1713,6 +1720,9 @@ qemuBlockStorageSourceAttachRollback(qemuMonitorPtr mon,
-     if (data->encryptsecretAlias)
-         ignore_value(qemuMonitorDelObject(mon, data->encryptsecretAlias));
- 
-+    if (data->httpcookiesecretAlias)
-+        ignore_value(qemuMonitorDelObject(mon, data->httpcookiesecretAlias));
-+
-     if (data->tlsAlias)
-         ignore_value(qemuMonitorDelObject(mon, data->tlsAlias));
- 
-@@ -1768,6 +1778,9 @@ qemuBlockStorageSourceDetachPrepare(virStorageSourcePtr src,
- 
-         if (srcpriv->encinfo && srcpriv->encinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_AES)
-             data->encryptsecretAlias = g_strdup(srcpriv->encinfo->s.aes.alias);
-+
-+        if (srcpriv->httpcookie)
-+            data->httpcookiesecretAlias = g_strdup(srcpriv->httpcookie->s.aes.alias);
-     }
- 
-     return g_steal_pointer(&data);
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index eab0128d5d..197f5dae97 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -100,6 +100,9 @@ struct qemuBlockStorageSourceAttachData {
-     virJSONValuePtr encryptsecretProps;
-     char *encryptsecretAlias;
- 
-+    virJSONValuePtr httpcookiesecretProps;
-+    char *httpcookiesecretAlias;
-+
-     virJSONValuePtr tlsProps;
-     char *tlsAlias;
- };
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index fc5366d88d..de97504ce1 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -2413,6 +2413,7 @@ qemuBuildBlockStorageSourceAttachDataCommandline(virCommandPtr cmd,
-     if (qemuBuildObjectCommandline(cmd, data->prmgrProps) < 0 ||
-         qemuBuildObjectCommandline(cmd, data->authsecretProps) < 0 ||
-         qemuBuildObjectCommandline(cmd, data->encryptsecretProps) < 0 ||
-+        qemuBuildObjectCommandline(cmd, data->httpcookiesecretProps) < 0 ||
-         qemuBuildObjectCommandline(cmd, data->tlsProps) < 0)
-         return -1;
- 
-@@ -10349,6 +10350,10 @@ qemuBuildStorageSourceAttachPrepareCommon(virStorageSourcePtr src,
-         if (srcpriv->encinfo &&
-             qemuBuildSecretInfoProps(srcpriv->encinfo, &data->encryptsecretProps) < 0)
-             return -1;
-+
-+        if (srcpriv->httpcookie &&
-+            qemuBuildSecretInfoProps(srcpriv->httpcookie, &data->httpcookiesecretProps) < 0)
-+            return -1;
-     }
- 
-     if (src->haveTLS == VIR_TRISTATE_BOOL_YES &&
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_NUMA_HMAT-capability.patch b/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_NUMA_HMAT-capability.patch
deleted file mode 100644
index 1354f7c..0000000
--- a/SOURCES/libvirt-qemu-Introduce-QEMU_CAPS_NUMA_HMAT-capability.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From f1de31795f1010016beab3b669db821799e5a6d3 Mon Sep 17 00:00:00 2001
-Message-Id: <f1de31795f1010016beab3b669db821799e5a6d3@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:42 +0200
-Subject: [PATCH] qemu: Introduce QEMU_CAPS_NUMA_HMAT capability
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This capability tracks whether QEMU is capable of defining HMAT
-ACPI table for the guest.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit c2f15f1b1869c1732e529967d1851582409290fb)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Conflicts:
-- src/qemu/qemu_capabilities.c: The set of capabilities diverged.
-- src/qemu/qemu_capabilities.h: Ditto.
-- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml: Ditto.
-- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml: Ditto.
-- tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml: Doesn't exist
-  downstream.
-- tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml: Ditto.
-- tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml: Ditto.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <bf15c10c27c81f8f2d5a23568e4aebd216756642.1602087923.git.mprivozn@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_5.0.0.aarch64.xml | 1 +
- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml  | 1 +
- 4 files changed, 5 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 278eaa0009..ce52c51199 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -568,6 +568,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "storage.werror",
-               "pcie-root-port.hotplug",
-               "i8042",
-+              "numa.hmat",
-     );
- 
- 
-@@ -1451,6 +1452,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
-     { "human-monitor-command/$savevm-monitor-nodes", QEMU_CAPS_SAVEVM_MONITOR_NODES },
-     { "blockdev-add/arg-type/+nvme", QEMU_CAPS_DRIVE_NVME },
-     { "blockdev-snapshot/$allow-write-only-overlay", QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY },
-+    { "set-numa-node/arg-type/+hmat-lb", QEMU_CAPS_NUMA_HMAT },
- };
- 
- typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps;
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 15ebcb5077..98cac5b9dc 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -548,6 +548,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_STORAGE_WERROR, /* virtio-blk,scsi-hd.werror */
-     QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG, /* pcie-root-port.hotplug */
-     QEMU_CAPS_DEVICE_I8042, /* PS/2 controller */
-+    QEMU_CAPS_NUMA_HMAT, /* -numa hmat */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-index 140a466910..92da5cbd94 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-@@ -181,6 +181,7 @@
-   <flag name='cpu.kvm-no-adjvtime'/>
-   <flag name='vhost-user-fs'/>
-   <flag name='storage.werror'/>
-+  <flag name='numa.hmat'/>
-   <version>4002050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700241</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-index 733e6b1eb4..0b841a49ac 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-@@ -226,6 +226,7 @@
-   <flag name='storage.werror'/>
-   <flag name='pcie-root-port.hotplug'/>
-   <flag name='i8042'/>
-+  <flag name='numa.hmat'/>
-   <version>4002091</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100241</microcodeVersion>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemu-Introduce-another-helper-for-creating-alias-for-a-secret-object.patch b/SOURCES/libvirt-qemu-Introduce-another-helper-for-creating-alias-for-a-secret-object.patch
deleted file mode 100644
index 2effaf8..0000000
--- a/SOURCES/libvirt-qemu-Introduce-another-helper-for-creating-alias-for-a-secret-object.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 2ca069dae766b266e12f1feb9f9ca9d3f2deb7bb Mon Sep 17 00:00:00 2001
-Message-Id: <2ca069dae766b266e12f1feb9f9ca9d3f2deb7bb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:49 +0100
-Subject: [PATCH] qemu: Introduce another helper for creating alias for a
- 'secret' object
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-qemuAliasForSecret is meant as a replacement qemuDomainGetSecretAESAlias
-with saner API. The sub-type we are creating the alias for is passed in
-as a string rather than the unflexible 'isLuks' boolean.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit bb2a81df21710ed8258854e0dc2b3c2e923831f2)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <fe8144c851d9e849617ae66b99a8605e75697809.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_alias.c | 17 +++++++++++++++++
- src/qemu/qemu_alias.h |  3 +++
- 2 files changed, 20 insertions(+)
-
-diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
-index 93bdcb7548..50ad054c6c 100644
---- a/src/qemu/qemu_alias.c
-+++ b/src/qemu/qemu_alias.c
-@@ -792,6 +792,23 @@ qemuDomainGetSecretAESAlias(const char *srcalias,
- }
- 
- 
-+/* qemuAliasForSecret:
-+ * @parentalias: alias of the parent object
-+ * @obj: optional sub-object of the parent device the secret is for
-+ *
-+ * Generate alias for a secret object used by @parentalias device or one of
-+ * the dependencies of the device described by @obj.
-+ */
-+char *
-+qemuAliasForSecret(const char *parentalias,
-+                   const char *obj)
-+{
-+    if (obj)
-+        return g_strdup_printf("%s-%s-secret0", parentalias, obj);
-+    else
-+        return g_strdup_printf("%s-secret0", parentalias);
-+}
-+
- /* qemuAliasTLSObjFromSrcAlias
-  * @srcAlias: Pointer to a source alias string
-  *
-diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h
-index ae2fce16bc..645956d024 100644
---- a/src/qemu/qemu_alias.h
-+++ b/src/qemu/qemu_alias.h
-@@ -86,6 +86,9 @@ char *qemuDomainGetMasterKeyAlias(void);
- char *qemuDomainGetSecretAESAlias(const char *srcalias,
-                                   bool isLuks);
- 
-+char *qemuAliasForSecret(const char *parentalias,
-+                         const char *obj);
-+
- char *qemuAliasTLSObjFromSrcAlias(const char *srcAlias)
-     ATTRIBUTE_NONNULL(1);
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Pass-through-arguments-of-ssh-block-driver-used-by-libguestfs.patch b/SOURCES/libvirt-qemu-Pass-through-arguments-of-ssh-block-driver-used-by-libguestfs.patch
deleted file mode 100644
index 0734fd0..0000000
--- a/SOURCES/libvirt-qemu-Pass-through-arguments-of-ssh-block-driver-used-by-libguestfs.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-From 2c711c10712280bd4dae442bc68c8e38df3ab171 Mon Sep 17 00:00:00 2001
-Message-Id: <2c711c10712280bd4dae442bc68c8e38df3ab171@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:13 +0100
-Subject: [PATCH] qemu: Pass through arguments of 'ssh' block driver used by
- libguestfs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We currently don't model the 'ssh' protocol properties properly and
-since it seems impossible for now (agent path passed via environment
-variable). To allow libguestfs to work as it used in pre-blockdev era we
-must carry the properties over to the command line. For this instance we
-just store it internally and format it back.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit d6db013c6e507fe45ebc07fa109e608cf7451b22)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <521e8b33432bfa847007866c631d6d6454f08ea3.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                              | 10 ++++++++++
- src/util/virstoragefile.c                          | 13 +++++++++++++
- src/util/virstoragefile.h                          |  5 +++++
- tests/qemublocktest.c                              |  1 +
- .../jsontojson/ssh-passthrough-libguestfs-in.json  |  1 +
- .../jsontojson/ssh-passthrough-libguestfs-out.json | 14 ++++++++++++++
- 6 files changed, 44 insertions(+)
- create mode 100644 tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-in.json
- create mode 100644 tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-out.json
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index b077e2e02f..141059ae81 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -911,6 +911,7 @@ qemuBlockStorageSourceGetSshProps(virStorageSourcePtr src)
-     g_autoptr(virJSONValue) serverprops = NULL;
-     virJSONValuePtr ret = NULL;
-     const char *username = NULL;
-+    g_autoptr(virJSONValue) host_key_check = NULL;
- 
-     if (src->nhosts != 1) {
-         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-@@ -924,11 +925,20 @@ qemuBlockStorageSourceGetSshProps(virStorageSourcePtr src)
- 
-     if (src->auth)
-         username = src->auth->username;
-+    else if (src->ssh_user)
-+        username = src->ssh_user;
-+
-+    if (src->ssh_host_key_check_disabled &&
-+        virJSONValueObjectCreate(&host_key_check,
-+                                 "s:mode", "none",
-+                                 NULL) < 0)
-+        return NULL;
- 
-     if (virJSONValueObjectCreate(&ret,
-                                  "s:path", src->path,
-                                  "a:server", &serverprops,
-                                  "S:user", username,
-+                                 "A:host-key-check", &host_key_check,
-                                  NULL) < 0)
-         return NULL;
- 
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 9eca186e99..ce126f5cba 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2464,6 +2464,10 @@ virStorageSourceCopy(const virStorageSource *src,
-             return NULL;
-     }
- 
-+    /* ssh config passthrough for libguestfs */
-+    def->ssh_host_key_check_disabled = src->ssh_host_key_check_disabled;
-+    def->ssh_user = g_strdup(src->ssh_user);
-+
-     return g_steal_pointer(&def);
- }
- 
-@@ -2705,6 +2709,8 @@ virStorageSourceClear(virStorageSourcePtr def)
-     VIR_FREE(def->tlsAlias);
-     VIR_FREE(def->tlsCertdir);
- 
-+    VIR_FREE(def->ssh_user);
-+
-     virStorageSourceInitiatorClear(&def->initiator);
- 
-     /* clear everything except the class header as the object APIs
-@@ -3635,6 +3641,8 @@ virStorageSourceParseBackingJSONSSH(virStorageSourcePtr src,
-     const char *path = virJSONValueObjectGetString(json, "path");
-     const char *host = virJSONValueObjectGetString(json, "host");
-     const char *port = virJSONValueObjectGetString(json, "port");
-+    const char *user = virJSONValueObjectGetString(json, "user");
-+    const char *host_key_check = virJSONValueObjectGetString(json, "host_key_check");
-     virJSONValuePtr server = virJSONValueObjectGetObject(json, "server");
- 
-     if (!(host || server) || !path) {
-@@ -3665,6 +3673,11 @@ virStorageSourceParseBackingJSONSSH(virStorageSourcePtr src,
-             return -1;
-     }
- 
-+    /* these two are parsed just to be passed back as we don't model them yet */
-+    src->ssh_user = g_strdup(user);
-+    if (STREQ_NULLABLE(host_key_check, "no"))
-+        src->ssh_host_key_check_disabled = true;
-+
-     return 0;
- }
- 
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 1abdaf89ce..c1430cadd1 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -385,6 +385,11 @@ struct _virStorageSource {
-                        as a source for floppy drive */
- 
-     bool hostcdrom; /* backing device is a cdrom */
-+
-+    /* passthrough variables for the ssh driver which we don't handle properly */
-+    /* these must not be used apart from formatting the output JSON in the qemu driver */
-+    char *ssh_user;
-+    bool ssh_host_key_check_disabled;
- };
- 
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageSource, virObjectUnref);
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index d8bd811b4d..f48875e16d 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1132,6 +1132,7 @@ mymain(void)
-     jsontojsondata.schemaroot = qmp_schemaroot_x86_64_blockdev_add;
- 
-     TEST_JSON_TO_JSON("curl-libguestfs");
-+    TEST_JSON_TO_JSON("ssh-passthrough-libguestfs");
- 
- #define TEST_IMAGE_CREATE(testname, testbacking) \
-     do { \
-diff --git a/tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-in.json b/tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-in.json
-new file mode 100644
-index 0000000000..da8fedef07
---- /dev/null
-+++ b/tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-in.json
-@@ -0,0 +1 @@
-+json:{"file.driver":"ssh","file.user":"testuser","file.host":"random.host","file.port":1234,"file.path":"somewhere/something","file.host_key_check":"no"}
-diff --git a/tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-out.json b/tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-out.json
-new file mode 100644
-index 0000000000..1f6032deb4
---- /dev/null
-+++ b/tests/qemublocktestdata/jsontojson/ssh-passthrough-libguestfs-out.json
-@@ -0,0 +1,14 @@
-+{
-+  "driver": "ssh",
-+  "path": "somewhere/something",
-+  "server": {
-+    "host": "random.host",
-+    "port": "22"
-+  },
-+  "user": "testuser",
-+  "host-key-check": {
-+    "mode": "none"
-+  },
-+  "auto-read-only": true,
-+  "discard": "unmap"
-+}
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Refuse-to-use-ps2-on-machines-that-do-not-have-this-bus.patch b/SOURCES/libvirt-qemu-Refuse-to-use-ps2-on-machines-that-do-not-have-this-bus.patch
deleted file mode 100644
index 13e5204..0000000
--- a/SOURCES/libvirt-qemu-Refuse-to-use-ps2-on-machines-that-do-not-have-this-bus.patch
+++ /dev/null
@@ -1,605 +0,0 @@
-From 171433e306e309374750477328de96f66410d13d Mon Sep 17 00:00:00 2001
-Message-Id: <171433e306e309374750477328de96f66410d13d@dist-git>
-From: Thomas Huth <thuth@redhat.com>
-Date: Mon, 8 Jun 2020 13:44:21 +0200
-Subject: [PATCH] qemu: Refuse to use "ps2" on machines that do not have this
- bus
-
-The "ps2" bus is only available on certain machines like x86. On
-machines like s390x, we should refuse to add a device to this bus
-instead of silently ignoring it.
-
-Looking at the QEMU sources, PS/2 is only available if the QEMU binary
-has the "i8042" device, so let's check for that and only allow "ps2"
-devices if this QEMU device is available, or if we're on x86 anyway
-(so we don't have to fake the QEMU_CAPS_DEVICE_I8042 capability in
-all the tests that use <input ... bus='ps2'/> in their xml data).
-
-Reported-by: Sebastian Mitterle <smitterl@redhat.com>
-Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1763191
-Signed-off-by: Thomas Huth <thuth@redhat.com>
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit e7a65484ba7aa51c99ab3405117667a39b37e386)
-
-Conflicts:
-src/qemu/qemu_capabilities.c: Context, because other caps were
-                              backported meanwhile
-src/qemu/qemu_capabilities.h: ditto
-tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml: ditto
-tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml: ditto
-tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml: ditto
-tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml: ditto
-tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml: ditto
-tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml: ditto
-tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml: ditto
-tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml: ditto
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1845055
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <89c778ca322240423dd81945daa165f5d6c803a9.1591616651.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_capabilities.c                           |  2 ++
- src/qemu/qemu_capabilities.h                           |  1 +
- src/qemu/qemu_domain.c                                 | 10 +++++++++-
- tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml      |  1 +
- tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml      |  1 +
- tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml      |  1 +
- tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml        |  1 +
- tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml        |  1 +
- tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml        |  1 +
- tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml        |  1 +
- tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml        |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml        |  1 +
- tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml       |  1 +
- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml       |  1 +
- .../qemuhotplug-base-ccw-live+ccw-virtio.xml           |  6 ------
- ...cw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml |  6 ------
- ...ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml |  6 ------
- .../qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml    |  6 ------
- ...-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml |  6 ------
- ...plug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml |  6 ------
- .../qemuhotplug-base-ccw-live-with-ccw-virtio.xml      |  6 ------
- .../qemuhotplug-base-ccw-live.xml                      |  6 ------
- 38 files changed, 39 insertions(+), 49 deletions(-)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 5b16796c6b..7609f44efb 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -566,6 +566,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api",
-               "storage.werror",
-               "pcie-root-port.hotplug",
-+              "i8042",
-     );
- 
- 
-@@ -1281,6 +1282,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
-     { "ramfb", QEMU_CAPS_DEVICE_RAMFB },
-     { "max-arm-cpu", QEMU_CAPS_ARM_MAX_CPU },
-     { "vhost-user-fs-device", QEMU_CAPS_DEVICE_VHOST_USER_FS },
-+    { "i8042", QEMU_CAPS_DEVICE_I8042 },
- };
- 
- static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = {
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index aad02fcda5..15ebcb5077 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -547,6 +547,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API, /* downstream support for blockdev reopen in rhel-av-8.2.0 */
-     QEMU_CAPS_STORAGE_WERROR, /* virtio-blk,scsi-hd.werror */
-     QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG, /* pcie-root-port.hotplug */
-+    QEMU_CAPS_DEVICE_I8042, /* PS/2 controller */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index cdf7b3e692..a92183334f 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -8340,13 +8340,21 @@ qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics,
- 
- static int
- qemuDomainDeviceDefValidateInput(const virDomainInputDef *input,
--                                 const virDomainDef *def G_GNUC_UNUSED,
-+                                 const virDomainDef *def,
-                                  virQEMUCapsPtr qemuCaps)
- {
-     const char *baseName;
-     int cap;
-     int ccwCap;
- 
-+    if (input->bus == VIR_DOMAIN_INPUT_BUS_PS2 && !ARCH_IS_X86(def->os.arch) &&
-+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_I8042)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                       _("%s is not supported by this QEMU binary"),
-+                       virDomainInputBusTypeToString(input->bus));
-+        return -1;
-+    }
-+
-     if (input->bus != VIR_DOMAIN_INPUT_BUS_VIRTIO)
-         return 0;
- 
-diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
-index f2257d6bd2..b57cb2ab59 100644
---- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
-@@ -84,6 +84,7 @@
-   <flag name='isa-serial'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>1005003</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100245</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
-index 3a70ec8146..5d0a14a5db 100644
---- a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
-@@ -89,6 +89,7 @@
-   <flag name='isa-serial'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>1006000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100243</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
-index cbb29ef2de..c196fe5e45 100644
---- a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
-@@ -91,6 +91,7 @@
-   <flag name='isa-serial'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>1007000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100244</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
-index a6d0981224..1edcaa4657 100644
---- a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
-@@ -107,6 +107,7 @@
-   <flag name='isa-serial'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>2001001</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
-index 5a57cb7760..b95a9d42ad 100644
---- a/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
-@@ -139,6 +139,7 @@
-   <flag name='vhost-vsock'/>
-   <flag name='egl-headless'/>
-   <flag name='iothread.poll-max-ns'/>
-+  <flag name='i8042'/>
-   <version>2010000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900287</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
-index 53872abf2f..7ebe97b6ab 100644
---- a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
-@@ -182,6 +182,7 @@
-   <flag name='egl-headless'/>
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='x86-max-cpu'/>
-+  <flag name='i8042'/>
-   <version>2010000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100287</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
-index f70335db8f..b8eb3abd40 100644
---- a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
-@@ -188,6 +188,7 @@
-   <flag name='egl-headless'/>
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='x86-max-cpu'/>
-+  <flag name='i8042'/>
-   <version>2011000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100288</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
-index 74c80d2fe9..38a3103c4a 100644
---- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
-@@ -153,6 +153,7 @@
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='memory-backend-file.align'/>
-   <flag name='drive-nvme'/>
-+  <flag name='i8042'/>
-   <version>2011090</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900289</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
-index b51cee9f28..0c30cc75da 100644
---- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
-@@ -197,6 +197,7 @@
-   <flag name='memory-backend-file.align'/>
-   <flag name='x86-max-cpu'/>
-   <flag name='drive-nvme'/>
-+  <flag name='i8042'/>
-   <version>2011090</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100289</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
-index 86d85faa73..9b486effe1 100644
---- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
-@@ -133,6 +133,7 @@
-   <flag name='sdl-gl'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>2004000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
-index b217238307..147b179fdb 100644
---- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
-@@ -139,6 +139,7 @@
-   <flag name='sdl-gl'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>2005000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100243</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml
-index 862464c2f0..deb5c28790 100644
---- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml
-@@ -118,6 +118,7 @@
-   <flag name='nbd-tls'/>
-   <flag name='sdl-gl'/>
-   <flag name='hda-output'/>
-+  <flag name='i8042'/>
-   <version>2006000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900244</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
-index 6b96e37a16..fc508aba8a 100644
---- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
-@@ -151,6 +151,7 @@
-   <flag name='sdl-gl'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>2006000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100244</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
-index bc1359b0dd..ed199057dc 100644
---- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
-@@ -156,6 +156,7 @@
-   <flag name='sdl-gl'/>
-   <flag name='hda-output'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>2007000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100245</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
-index c7f3be3a1b..489b67f99a 100644
---- a/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
-@@ -159,6 +159,7 @@
-   <flag name='hda-output'/>
-   <flag name='vhost-vsock'/>
-   <flag name='mch'/>
-+  <flag name='i8042'/>
-   <version>2008000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100246</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml
-index a00d4b3d4c..3bc6ec8dab 100644
---- a/tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml
-@@ -131,6 +131,7 @@
-   <flag name='blockdev-del'/>
-   <flag name='vhost-vsock'/>
-   <flag name='iothread.poll-max-ns'/>
-+  <flag name='i8042'/>
-   <version>2009000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900247</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
-index 3d96f5f5b3..83fc6cde97 100644
---- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
-@@ -176,6 +176,7 @@
-   <flag name='mch'/>
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='x86-max-cpu'/>
-+  <flag name='i8042'/>
-   <version>2009000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100247</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
-index 3b5a021dcf..9a0b9c05c2 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
-@@ -155,6 +155,7 @@
-   <flag name='bochs-display'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='i8042'/>
-   <version>2012050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900239</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-index 575b1c2a43..aa134f7da1 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-@@ -203,6 +203,7 @@
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>3000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100239</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-index 591f054193..06bcba57bc 100644
---- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-@@ -160,6 +160,7 @@
-   <flag name='bochs-display'/>
-   <flag name='drive-nvme'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>3000091</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-index 6e434579ff..aa0219816d 100644
---- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-@@ -206,6 +206,7 @@
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>3000092</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-index aa22eccc6f..9f7d322d07 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-@@ -174,6 +174,7 @@
-   <flag name='machine.pseries.cap-ccf-assist'/>
-   <flag name='drive-nvme'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-index 3c1baf9560..f54f15b23e 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-@@ -211,6 +211,7 @@
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-index d5f2673fb6..961a13818b 100644
---- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-@@ -217,6 +217,7 @@
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>4001000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100241</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-index f5121fca94..0dc7503a07 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-@@ -178,6 +178,7 @@
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-index f6df71ff3e..452753b103 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-@@ -222,6 +222,7 @@
-   <flag name='virtio-net.failover'/>
-   <flag name='vhost-user-fs'/>
-   <flag name='storage.werror'/>
-+  <flag name='i8042'/>
-   <version>4002000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-index d0b5f18c02..733e6b1eb4 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-@@ -225,6 +225,7 @@
-   <flag name='blockdev-snapshot.allow-write-only-overlay'/>
-   <flag name='storage.werror'/>
-   <flag name='pcie-root-port.hotplug'/>
-+  <flag name='i8042'/>
-   <version>4002091</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100241</microcodeVersion>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml
-index f501cde333..59c969e0f2 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml
-@@ -44,12 +44,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml
-index 301658178f..d10b29be7e 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml
-@@ -54,12 +54,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'>
-       <alias name='balloon0'/>
-     </memballoon>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml
-index 223e929ad5..6eadbdcd18 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml
-@@ -54,12 +54,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml
-index c745d48558..68561b50a3 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml
-@@ -44,12 +44,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml
-index 3189294b65..0900f3c8e3 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml
-@@ -53,12 +53,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml
-index 3189294b65..0900f3c8e3 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml
-@@ -53,12 +53,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml
-index edf57fcd3f..31979c40f0 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml
-@@ -43,12 +43,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
-diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml
-index b97bba78c6..844b951940 100644
---- a/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml
-+++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml
-@@ -34,12 +34,6 @@
-       <alias name='virtio-serial0'/>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-     </controller>
--    <input type='mouse' bus='ps2'>
--      <alias name='input0'/>
--    </input>
--    <input type='keyboard' bus='ps2'>
--      <alias name='input1'/>
--    </input>
-     <memballoon model='none'/>
-     <panic model='s390'/>
-   </devices>
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-Rewrite-bitmap-handling-for-block-commit.patch b/SOURCES/libvirt-qemu-Rewrite-bitmap-handling-for-block-commit.patch
deleted file mode 100644
index c8e7974..0000000
--- a/SOURCES/libvirt-qemu-Rewrite-bitmap-handling-for-block-commit.patch
+++ /dev/null
@@ -1,518 +0,0 @@
-From ae0be0a7cbfb291c640b25d31013f938745e8c08 Mon Sep 17 00:00:00 2001
-Message-Id: <ae0be0a7cbfb291c640b25d31013f938745e8c08@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:00 +0200
-Subject: [PATCH] qemu: Rewrite bitmap handling for block commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reuse qemuBlockGetBitmapMergeActions which allows removing the ad-hoc
-implementation of bitmap merging for block commit. The new approach is
-way simpler and more robust and also allows us to get rid of the
-disabling of bitmaps done prior to the start as we actually do want to
-update the bitmaps in the base.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 20a7abc2d2d8a378103abf105fa0c617218ec023)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <2b1054dbe576d3984c960a42d175edbafa92565a.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                         | 203 +-----------------
- src/qemu/qemu_block.h                         |  11 +-
- src/qemu/qemu_blockjob.c                      |  25 ++-
- src/qemu/qemu_driver.c                        |  56 +----
- tests/qemublocktest.c                         |  18 +-
- .../qemublocktestdata/bitmapblockcommit/empty |   1 -
- 6 files changed, 42 insertions(+), 272 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index b2296c2b4c..ff9e000461 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3194,117 +3194,7 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
- /**
-  * @topsrc: virStorageSource representing 'top' of the job
-  * @basesrc: virStorageSource representing 'base' of the job
-- * @blockNamedNodeData: hash table containing data about bitmaps
-- * @actions: filled with arguments for a 'transaction' command
-- * @disabledBitmapsBase: filled with a list of bitmap names which must be disabled
-- *
-- * Prepares data for correctly handling bitmaps during the start of a commit
-- * job. The bitmaps in the 'base' image must be disabled, so that the writes
-- * done by the blockjob don't dirty the enabled bitmaps.
-- *
-- * @actions and @disabledBitmapsBase are untouched if no bitmaps need
-- * to be disabled.
-- */
--int
--qemuBlockBitmapsHandleCommitStart(virStorageSourcePtr topsrc,
--                                  virStorageSourcePtr basesrc,
--                                  virHashTablePtr blockNamedNodeData,
--                                  virJSONValuePtr *actions,
--                                  char ***disabledBitmapsBase)
--{
--    g_autoptr(virJSONValue) act = virJSONValueNewArray();
--    VIR_AUTOSTRINGLIST bitmaplist = NULL;
--    size_t curbitmapstr = 0;
--    qemuBlockNamedNodeDataPtr entry;
--    bool disable_bitmaps = false;
--    size_t i;
--
--    if (!(entry = virHashLookup(blockNamedNodeData, basesrc->nodeformat)))
--        return 0;
--
--    bitmaplist = g_new0(char *, entry->nbitmaps + 1);
--
--    for (i = 0; i < entry->nbitmaps; i++) {
--        qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
--
--        if (!bitmap->recording || bitmap->inconsistent ||
--            !qemuBlockBitmapChainIsValid(topsrc, bitmap->name, blockNamedNodeData))
--            continue;
--
--        disable_bitmaps = true;
--
--        if (qemuMonitorTransactionBitmapDisable(act, basesrc->nodeformat,
--                                                bitmap->name) < 0)
--            return -1;
--
--        bitmaplist[curbitmapstr++] = g_strdup(bitmap->name);
--    }
--
--    if (disable_bitmaps) {
--        *actions = g_steal_pointer(&act);
--        *disabledBitmapsBase = g_steal_pointer(&bitmaplist);
--    }
--
--    return 0;
--}
--
--
--struct qemuBlockBitmapsHandleCommitData {
--    bool skip;
--    bool create;
--    bool enable;
--    const char *basenode;
--    virJSONValuePtr merge;
--    unsigned long long granularity;
--    bool persistent;
--};
--
--
--static void
--qemuBlockBitmapsHandleCommitDataFree(void *opaque)
--{
--    struct qemuBlockBitmapsHandleCommitData *data = opaque;
--
--    virJSONValueFree(data->merge);
--    g_free(data);
--}
--
--
--static int
--qemuBlockBitmapsHandleCommitFinishIterate(void *payload,
--                                          const void *entryname,
--                                          void *opaque)
--{
--    struct qemuBlockBitmapsHandleCommitData *data = payload;
--    const char *bitmapname = entryname;
--    virJSONValuePtr actions = opaque;
--
--    if (data->skip)
--        return 0;
--
--    if (data->create) {
--        if (qemuMonitorTransactionBitmapAdd(actions, data->basenode, bitmapname,
--                                            data->persistent, !data->enable,
--                                            data->granularity) < 0)
--            return -1;
--    } else {
--        if (data->enable &&
--            qemuMonitorTransactionBitmapEnable(actions, data->basenode, bitmapname) < 0)
--            return -1;
--    }
--
--    if (data->merge &&
--        qemuMonitorTransactionBitmapMerge(actions, data->basenode, bitmapname,
--                                          &data->merge) < 0)
--        return -1;
--
--    return 0;
--}
--
--
--/**
-- * @topsrc: virStorageSource representing 'top' of the job
-- * @basesrc: virStorageSource representing 'base' of the job
-+ * @active: commit job is an active layer block-commit
-  * @blockNamedNodeData: hash table containing data about bitmaps
-  * @actions: filled with arguments for a 'transaction' command
-  * @disabledBitmapsBase: bitmap names which were disabled
-@@ -3317,95 +3207,20 @@ qemuBlockBitmapsHandleCommitFinishIterate(void *payload,
- int
- qemuBlockBitmapsHandleCommitFinish(virStorageSourcePtr topsrc,
-                                    virStorageSourcePtr basesrc,
-+                                   bool active,
-                                    virHashTablePtr blockNamedNodeData,
--                                   virJSONValuePtr *actions,
--                                   char **disabledBitmapsBase)
-+                                   virJSONValuePtr *actions)
- {
--    g_autoptr(virJSONValue) act = virJSONValueNewArray();
--    virStorageSourcePtr n;
--    qemuBlockNamedNodeDataPtr entry;
--    g_autoptr(virHashTable) commitdata = NULL;
--    struct qemuBlockBitmapsHandleCommitData *bitmapdata;
--    size_t i;
--
--    commitdata = virHashNew(qemuBlockBitmapsHandleCommitDataFree);
--
--    for (n = topsrc; n != basesrc; n = n->backingStore) {
--        if (!(entry = virHashLookup(blockNamedNodeData, n->nodeformat)))
--            continue;
--
--        for (i = 0; i < entry->nbitmaps; i++) {
--            qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
--
--            if (!(bitmapdata = virHashLookup(commitdata, bitmap->name))) {
--                bitmapdata = g_new0(struct qemuBlockBitmapsHandleCommitData, 1);
-+    virStorageSourcePtr writebitmapsrc = NULL;
- 
--                /* we must mirror the state of the topmost bitmap and merge
--                 * everything else */
--                bitmapdata->create = true;
--                bitmapdata->enable = bitmap->recording;
--                bitmapdata->basenode = basesrc->nodeformat;
--                bitmapdata->merge = virJSONValueNewArray();
--                bitmapdata->granularity = bitmap->granularity;
--                bitmapdata->persistent = bitmap->persistent;
-+    if (active)
-+        writebitmapsrc = basesrc;
- 
--                if (virHashAddEntry(commitdata, bitmap->name, bitmapdata) < 0) {
--                    qemuBlockBitmapsHandleCommitDataFree(bitmapdata);
--                    return -1;
--                }
--            }
--
--            if (bitmap->inconsistent ||
--                !qemuBlockBitmapChainIsValid(topsrc, bitmap->name, blockNamedNodeData))
--                bitmapdata->skip = true;
--
--            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(bitmapdata->merge,
--                                                                 n->nodeformat,
--                                                                 bitmap->name) < 0)
--                return -1;
--        }
--    }
--
--    if ((entry = virHashLookup(blockNamedNodeData, basesrc->nodeformat))) {
--        /* note that all bitmaps in 'base' were disabled when commit was started */
--        for (i = 0; i < entry->nbitmaps; i++) {
--            qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
--
--            if ((bitmapdata = virHashLookup(commitdata, bitmap->name))) {
--                bitmapdata->create = false;
--            } else {
--                if (disabledBitmapsBase) {
--                    char **disabledbitmaps;
--
--                    for (disabledbitmaps = disabledBitmapsBase; *disabledbitmaps; disabledbitmaps++) {
--                        if (STREQ(*disabledbitmaps, bitmap->name)) {
--                            bitmapdata = g_new0(struct qemuBlockBitmapsHandleCommitData, 1);
--
--                            bitmapdata->create = false;
--                            bitmapdata->enable = true;
--                            bitmapdata->basenode = basesrc->nodeformat;
--                            bitmapdata->granularity = bitmap->granularity;
--                            bitmapdata->persistent = bitmap->persistent;
--
--                            if (virHashAddEntry(commitdata, bitmap->name, bitmapdata) < 0) {
--                                qemuBlockBitmapsHandleCommitDataFree(bitmapdata);
--                                return -1;
--                            }
--
--                            break;
--                        }
--                    }
--                }
--            }
--        }
--    }
--
--    if (virHashForEach(commitdata, qemuBlockBitmapsHandleCommitFinishIterate, act) < 0)
-+    if (qemuBlockGetBitmapMergeActions(topsrc, basesrc, basesrc, NULL, NULL,
-+                                       writebitmapsrc, actions,
-+                                       blockNamedNodeData) < 0)
-         return -1;
- 
--    if (virJSONValueArraySize(act) > 0)
--        *actions = g_steal_pointer(&act);
--
-     return 0;
- }
- 
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 2500390734..19d2fc32e0 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -243,19 +243,12 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
-                                 bool shallow,
-                                 virJSONValuePtr *actions);
- 
--int
--qemuBlockBitmapsHandleCommitStart(virStorageSourcePtr topsrc,
--                                  virStorageSourcePtr basesrc,
--                                  virHashTablePtr blockNamedNodeData,
--                                  virJSONValuePtr *actions,
--                                  char ***disabledBitmapsBase);
--
- int
- qemuBlockBitmapsHandleCommitFinish(virStorageSourcePtr topsrc,
-                                    virStorageSourcePtr basesrc,
-+                                   bool active,
-                                    virHashTablePtr blockNamedNodeData,
--                                   virJSONValuePtr *actions,
--                                   char **disabledBitmapsBase);
-+                                   virJSONValuePtr *actions);
- 
- int
- qemuBlockReopenReadWrite(virDomainObjPtr vm,
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index c80c71295b..c63a691a0e 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1063,6 +1063,7 @@ qemuBlockJobProcessEventCompletedCommitBitmaps(virDomainObjPtr vm,
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(virHashTable) blockNamedNodeData = NULL;
-     g_autoptr(virJSONValue) actions = NULL;
-+    bool active = job->type == QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT;
- 
-     if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-         return 0;
-@@ -1072,16 +1073,18 @@ qemuBlockJobProcessEventCompletedCommitBitmaps(virDomainObjPtr vm,
- 
-     if (qemuBlockBitmapsHandleCommitFinish(job->data.commit.top,
-                                            job->data.commit.base,
-+                                           active,
-                                            blockNamedNodeData,
--                                           &actions,
--                                           job->data.commit.disabledBitmapsBase) < 0)
-+                                           &actions) < 0)
-         return 0;
- 
-     if (!actions)
-         return 0;
- 
--    if (qemuBlockReopenReadWrite(vm, job->data.commit.base, asyncJob) < 0)
--        return -1;
-+    if (!active) {
-+        if (qemuBlockReopenReadWrite(vm, job->data.commit.base, asyncJob) < 0)
-+            return -1;
-+    }
- 
-     if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-         return -1;
-@@ -1091,8 +1094,10 @@ qemuBlockJobProcessEventCompletedCommitBitmaps(virDomainObjPtr vm,
-     if (qemuDomainObjExitMonitor(priv->driver, vm) < 0)
-         return -1;
- 
--    if (qemuBlockReopenReadOnly(vm, job->data.commit.base, asyncJob) < 0)
--        return -1;
-+    if (!active) {
-+        if (qemuBlockReopenReadOnly(vm, job->data.commit.base, asyncJob) < 0)
-+            return -1;
-+    }
- 
-     return 0;
- }
-@@ -1262,6 +1267,9 @@ qemuBlockJobProcessEventCompletedActiveCommit(virQEMUDriverPtr driver,
-     job->disk->src = job->data.commit.base;
-     job->disk->src->readonly = job->data.commit.top->readonly;
- 
-+    if (qemuBlockJobProcessEventCompletedCommitBitmaps(vm, job, asyncJob) < 0)
-+        return;
-+
-     qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, job->data.commit.top);
- 
-     if (job->data.commit.deleteCommittedImages)
-@@ -1333,6 +1341,7 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
-                                            virDomainObjPtr vm,
-                                            qemuBlockJobDataPtr job)
- {
-+    g_autoptr(virJSONValue) actions = virJSONValueNewArray();
-     virDomainDiskDefPtr disk = job->disk;
- 
-     VIR_DEBUG("active commit job '%s' on VM '%s' failed", job->name, vm->def->name);
-@@ -1340,6 +1349,10 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
-     if (!disk)
-         return;
- 
-+    ignore_value(qemuMonitorTransactionBitmapRemove(actions, disk->mirror->nodeformat,
-+                                                    "libvirt-tmp-activewrite"));
-+
-+
-     /* Ideally, we would make the backing chain read only again (yes, SELinux
-      * can do that using different labels). But that is not implemented yet and
-      * not leaking security driver metadata is more important. */
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 9f7d96c0b6..983d4a04a8 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17594,9 +17594,9 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
- 
-     case QEMU_BLOCKJOB_TYPE_COPY:
-         if (blockdev && !job->jobflagsmissing) {
--            g_autoptr(virHashTable) blockNamedNodeData = NULL;
-             bool shallow = job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-             bool reuse = job->jobflags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT;
-+            g_autoptr(virHashTable) blockNamedNodeData = NULL;
- 
-             if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-                 return -1;
-@@ -17634,16 +17634,15 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-          * the bitmaps if it wasn't present thus must skip this */
-         if (blockdev &&
-             virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
--            g_autoptr(virHashTable) blockNamedNodeData = NULL;
- 
--            if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
--                return -1;
-+            actions = virJSONValueNewArray();
- 
--            if (qemuBlockBitmapsHandleCommitFinish(job->data.commit.top,
--                                                   job->data.commit.base,
--                                                   blockNamedNodeData,
--                                                   &actions,
--                                                   job->data.commit.disabledBitmapsBase) < 0)
-+            if (qemuMonitorTransactionBitmapAdd(actions,
-+                                                job->data.commit.base->nodeformat,
-+                                                "libvirt-tmp-activewrite",
-+                                                false,
-+                                                false,
-+                                                0) < 0)
-                 return -1;
-         }
- 
-@@ -18758,7 +18757,6 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     const char *nodebase = NULL;
-     bool persistjob = false;
-     bool blockdev = false;
--    g_autoptr(virJSONValue) bitmapDisableActions = NULL;
-     VIR_AUTOSTRINGLIST bitmapDisableList = NULL;
- 
-     virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW |
-@@ -18920,27 +18918,6 @@ qemuDomainBlockCommit(virDomainPtr dom,
-             goto endjob;
-     }
- 
--    if (blockdev &&
--        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
--        g_autoptr(virHashTable) blockNamedNodeData = NULL;
--        if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
--            goto endjob;
--
--        if (qemuBlockBitmapsHandleCommitStart(topSource, baseSource,
--                                              blockNamedNodeData,
--                                              &bitmapDisableActions,
--                                              &bitmapDisableList) < 0)
--            goto endjob;
--
--        /* if we don't have terminator on 'base' we can't reopen it */
--        if (bitmapDisableActions && !baseSource->backingStore) {
--            virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
--                           _("can't handle bitmaps on unterminated backing image '%s'"),
--                           base);
--            goto endjob;
--        }
--    }
--
-     if (!(job = qemuBlockJobDiskNewCommit(vm, disk, top_parent, topSource,
-                                           baseSource, &bitmapDisableList,
-                                           flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE,
-@@ -18965,23 +18942,6 @@ qemuDomainBlockCommit(virDomainPtr dom,
-             !(backingPath = qemuBlockGetBackingStoreString(baseSource, false)))
-             goto endjob;
- 
--        if (bitmapDisableActions) {
--            int rc;
--
--            if (qemuBlockReopenReadWrite(vm, baseSource, QEMU_ASYNC_JOB_NONE) < 0)
--                goto endjob;
--
--            qemuDomainObjEnterMonitor(driver, vm);
--            rc = qemuMonitorTransaction(priv->mon, &bitmapDisableActions);
--            if (qemuDomainObjExitMonitor(driver, vm) < 0)
--                goto endjob;
--
--            if (qemuBlockReopenReadOnly(vm, baseSource, QEMU_ASYNC_JOB_NONE) < 0)
--                goto endjob;
--
--            if (rc < 0)
--                goto endjob;
--        }
-     } else {
-         device = job->name;
-     }
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 8ce878f15b..f0e80a0738 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -928,12 +928,11 @@ testQemuBlockBitmapBlockcommit(const void *opaque)
- 
-     g_autofree char *actual = NULL;
-     g_autofree char *expectpath = NULL;
--    g_autoptr(virJSONValue) actionsDisable = NULL;
-     g_autoptr(virJSONValue) actionsMerge = NULL;
-     g_autoptr(virJSONValue) nodedatajson = NULL;
-     g_autoptr(virHashTable) nodedata = NULL;
-     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
--    VIR_AUTOSTRINGLIST bitmapsDisable = NULL;
-+    bool active = data->top == data->chain;
- 
-     expectpath = g_strdup_printf("%s/%s%s", abs_srcdir,
-                                  blockcommitPrefix, data->name);
-@@ -947,20 +946,10 @@ testQemuBlockBitmapBlockcommit(const void *opaque)
-         return -1;
-     }
- 
--    if (qemuBlockBitmapsHandleCommitStart(data->top, data->base, nodedata,
--                                          &actionsDisable, &bitmapsDisable) < 0)
--        return -1;
--
--    virBufferAddLit(&buf, "pre job bitmap disable:\n");
--
--    if (actionsDisable &&
--        virJSONValueToBuffer(actionsDisable, &buf, true) < 0)
--        return -1;
--
-     virBufferAddLit(&buf, "merge bitmpas:\n");
- 
--    if (qemuBlockBitmapsHandleCommitFinish(data->top, data->base, nodedata,
--                                           &actionsMerge, bitmapsDisable) < 0)
-+    if (qemuBlockBitmapsHandleCommitFinish(data->top, data->base, active, nodedata,
-+                                           &actionsMerge) < 0)
-         return -1;
- 
-     if (actionsMerge &&
-@@ -1356,6 +1345,7 @@ mymain(void)
- #define TEST_BITMAP_BLOCKCOMMIT(testname, topimg, baseimg, ndf) \
-     do {\
-         blockbitmapblockcommitdata.name = testname; \
-+        blockbitmapblockcommitdata.chain = bitmapSourceChain; \
-         blockbitmapblockcommitdata.top = testQemuBitmapGetFakeChainEntry(bitmapSourceChain, topimg); \
-         blockbitmapblockcommitdata.base = testQemuBitmapGetFakeChainEntry(bitmapSourceChain, baseimg); \
-         blockbitmapblockcommitdata.nodedatafile = ndf; \
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/empty b/tests/qemublocktestdata/bitmapblockcommit/empty
-index bfc58f994e..9260011852 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/empty
-+++ b/tests/qemublocktestdata/bitmapblockcommit/empty
-@@ -1,2 +1 @@
--pre job bitmap disable:
- merge bitmpas:
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-Rewrite-bitmap-handling-for-block-copy.patch b/SOURCES/libvirt-qemu-Rewrite-bitmap-handling-for-block-copy.patch
deleted file mode 100644
index 8ad75d7..0000000
--- a/SOURCES/libvirt-qemu-Rewrite-bitmap-handling-for-block-copy.patch
+++ /dev/null
@@ -1,281 +0,0 @@
-From 8d813e074a1bbe7636c487487e661a5e1a713fd1 Mon Sep 17 00:00:00 2001
-Message-Id: <8d813e074a1bbe7636c487487e661a5e1a713fd1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:04 +0200
-Subject: [PATCH] qemu: Rewrite bitmap handling for block copy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reuse qemuBlockGetBitmapMergeActions which allows the removal of the
-ad-hoc implementation of bitmap merging for block copy.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 7bfff40fdfe5410c446c1cd8ec413e00530faf7d)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <6a254120769a0071ef6867e4c15aca7d3760cf3c.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c    | 113 ++-------------------------------------
- src/qemu/qemu_blockjob.c |  40 ++++++++++++++
- src/qemu/qemu_driver.c   |  13 ++---
- tests/qemublocktest.c    |   6 ++-
- 4 files changed, 57 insertions(+), 115 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index ff9e000461..18c3861a2e 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3053,38 +3053,6 @@ qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
- }
- 
- 
--struct qemuBlockBitmapsHandleBlockcopyConcatData {
--    virHashTablePtr bitmaps_merge;
--    virJSONValuePtr actions;
--    const char *mirrornodeformat;
--    bool has_bitmaps;
--};
--
--
--static int
--qemuBlockBitmapsHandleBlockcopyConcatActions(void *payload,
--                                             const void *name,
--                                             void *opaque)
--{
--    struct qemuBlockBitmapsHandleBlockcopyConcatData *data = opaque;
--    virJSONValuePtr createactions = payload;
--    const char *bitmapname = name;
--    g_autoptr(virJSONValue) mergebitmaps = virHashSteal(data->bitmaps_merge, bitmapname);
--
--    data->has_bitmaps = true;
--
--    virJSONValueArrayConcat(data->actions, createactions);
--
--    if (qemuMonitorTransactionBitmapMerge(data->actions,
--                                          data->mirrornodeformat,
--                                          bitmapname,
--                                          &mergebitmaps) < 0)
--        return -1;
--
--    return 0;
--}
--
--
- /**
-  * qemuBlockBitmapsHandleBlockcopy:
-  * @src: disk source
-@@ -3107,86 +3075,15 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
-                                 bool shallow,
-                                 virJSONValuePtr *actions)
- {
--    g_autoptr(virHashTable) bitmaps = virHashNew(virJSONValueHashFree);
--    g_autoptr(virHashTable) bitmaps_merge = virHashNew(virJSONValueHashFree);
--    g_autoptr(virHashTable) bitmaps_skip = virHashNew(NULL);
--    g_autoptr(virJSONValue) tmpactions = virJSONValueNewArray();
--    qemuBlockNamedNodeDataPtr entry;
--    virStorageSourcePtr n;
--    size_t i;
--    struct qemuBlockBitmapsHandleBlockcopyConcatData data = { .bitmaps_merge = bitmaps_merge,
--                                                              .actions = tmpactions,
--                                                              .mirrornodeformat = mirror->nodeformat,
--                                                              .has_bitmaps = false, };
--
--    for (n = src; n; n = n->backingStore) {
--        if (!(entry = virHashLookup(blockNamedNodeData, n->nodeformat)))
--            continue;
--
--        for (i = 0; i < entry->nbitmaps; i++) {
--            qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
--            virJSONValuePtr bitmap_merge;
--
--            if (virHashHasEntry(bitmaps_skip, bitmap->name))
--                continue;
--
--            if (!(bitmap_merge = virHashLookup(bitmaps_merge, bitmap->name))) {
--                g_autoptr(virJSONValue) tmp = NULL;
--                bool disabled = !bitmap->recording;
--
--                /* disable any non top-layer bitmaps */
--                if (n != src)
--                    disabled = true;
--
--                if (!bitmap->persistent ||
--                    !(qemuBlockBitmapChainIsValid(n, bitmap->name,
--                                                  blockNamedNodeData))) {
--                    ignore_value(virHashAddEntry(bitmaps_skip, bitmap->name, NULL));
--                    continue;
--                }
--
--                /* prepare the data for adding the bitmap to the mirror */
--                tmp = virJSONValueNewArray();
--
--                if (qemuMonitorTransactionBitmapAdd(tmp,
--                                                    mirror->nodeformat,
--                                                    bitmap->name,
--                                                    true,
--                                                    disabled,
--                                                    bitmap->granularity) < 0)
--                    return -1;
-+    virStorageSourcePtr base = NULL;
- 
--                if (virHashAddEntry(bitmaps, bitmap->name, tmp) < 0)
--                    return -1;
--
--                tmp = NULL;
--
--                /* prepare array for merging all the bitmaps from the original chain */
--                tmp = virJSONValueNewArray();
--
--                if (virHashAddEntry(bitmaps_merge, bitmap->name, tmp) < 0)
--                    return -1;
--
--                bitmap_merge = g_steal_pointer(&tmp);
--            }
-+    if (shallow)
-+        base = src->backingStore;
- 
--            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(bitmap_merge,
--                                                                 n->nodeformat,
--                                                                 bitmap->name) < 0)
--                return -1;
--        }
--
--        if (shallow)
--            break;
--    }
--
--    if (virHashForEach(bitmaps, qemuBlockBitmapsHandleBlockcopyConcatActions,
--                       &data) < 0)
-+    if (qemuBlockGetBitmapMergeActions(src, base, mirror, NULL, NULL, mirror, actions,
-+                                       blockNamedNodeData) < 0)
-         return -1;
- 
--    if (data.has_bitmaps)
--        *actions = g_steal_pointer(&tmpactions);
--
-     return 0;
- }
- 
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index d106165175..6e33f8666c 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1281,6 +1281,43 @@ qemuBlockJobProcessEventCompletedActiveCommit(virQEMUDriverPtr driver,
- }
- 
- 
-+static int
-+qemuBlockJobProcessEventCompletedCopyBitmaps(virDomainObjPtr vm,
-+                                             qemuBlockJobDataPtr job,
-+                                             qemuDomainAsyncJob asyncJob)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    g_autoptr(virHashTable) blockNamedNodeData = NULL;
-+    g_autoptr(virJSONValue) actions = NULL;
-+    bool shallow = job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-+
-+    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-+        return 0;
-+
-+    if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, asyncJob)))
-+        return -1;
-+
-+    if (qemuBlockBitmapsHandleBlockcopy(job->disk->src,
-+                                        job->disk->mirror,
-+                                        blockNamedNodeData,
-+                                        shallow,
-+                                        &actions) < 0)
-+        return 0;
-+
-+    if (!actions)
-+        return 0;
-+
-+    if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-+        return -1;
-+
-+    qemuMonitorTransaction(priv->mon, &actions);
-+
-+    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
- static void
- qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver,
-                                            virDomainObjPtr vm,
-@@ -1295,6 +1332,8 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver,
-         !job->disk->mirror)
-         return;
- 
-+    qemuBlockJobProcessEventCompletedCopyBitmaps(vm, job, asyncJob);
-+
-     /* for shallow copy without reusing external image the user can either not
-      * specify the backing chain in which case libvirt will open and use the
-      * chain the user provided or not specify a chain in which case we'll
-@@ -1328,6 +1367,7 @@ qemuBlockJobProcessEventConcludedCopyAbort(virQEMUDriverPtr driver,
-         !job->disk->mirror)
-         return;
- 
-+    /* activeWrite bitmap is removed automatically here */
-     qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, job->disk->mirror);
-     virObjectUnref(job->disk->mirror);
-     job->disk->mirror = NULL;
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index ed5498d2bc..9e3a455814 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17596,14 +17596,15 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         if (blockdev && !job->jobflagsmissing) {
-             bool shallow = job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-             bool reuse = job->jobflags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT;
--            g_autoptr(virHashTable) blockNamedNodeData = NULL;
- 
--            if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
--                return -1;
-+            actions = virJSONValueNewArray();
- 
--            if (qemuBlockBitmapsHandleBlockcopy(disk->src, disk->mirror,
--                                                blockNamedNodeData,
--                                                shallow, &actions) < 0)
-+            if (qemuMonitorTransactionBitmapAdd(actions,
-+                                                disk->mirror->nodeformat,
-+                                                "libvirt-tmp-activewrite",
-+                                                false,
-+                                                false,
-+                                                0) < 0)
-                 return -1;
- 
-             /* Open and install the backing chain of 'mirror' late if we can use
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index e1468f13fa..193b4aaed0 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -881,6 +881,7 @@ testQemuBlockBitmapBlockcopy(const void *opaque)
-     g_autoptr(virJSONValue) nodedatajson = NULL;
-     g_autoptr(virHashTable) nodedata = NULL;
-     g_autoptr(virStorageSource) fakemirror = virStorageSourceNew();
-+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
- 
-     if (!fakemirror)
-         return -1;
-@@ -903,10 +904,13 @@ testQemuBlockBitmapBlockcopy(const void *opaque)
-                                         data->shallow, &actions) < 0)
-         return -1;
- 
-+
-     if (actions &&
--        !(actual = virJSONValueToString(actions, true)))
-+        virJSONValueToBuffer(actions, &buf, true) < 0)
-         return -1;
- 
-+    actual = virBufferContentAndReset(&buf);
-+
-     return virTestCompareToFile(actual, expectpath);
- }
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-Split-out-initialization-of-secrets-for-iscsi-hostdevs.patch b/SOURCES/libvirt-qemu-Split-out-initialization-of-secrets-for-iscsi-hostdevs.patch
deleted file mode 100644
index dd245ad..0000000
--- a/SOURCES/libvirt-qemu-Split-out-initialization-of-secrets-for-iscsi-hostdevs.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 1c5d21527ce3cb5182434d206d589a85b1901b42 Mon Sep 17 00:00:00 2001
-Message-Id: <1c5d21527ce3cb5182434d206d589a85b1901b42@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:52 +0100
-Subject: [PATCH] qemu: Split out initialization of secrets for 'iscsi'
- hostdevs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Currently we don't have infrastructure to remember the secret aliases
-for hostdevs. Since an upcoming patch is going to change aliases for
-the disks, initialize the iscsi hostdevs separately so that we can keep
-the alias. At the same time let's use qemuAliasForSecret instead of
-qemuDomainGetSecretAESAlias when unplugging the iscsi hostdev.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 740dd1a4e5ce81e5b0be855dd413dd7eec81ccd3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <f4157def83aa59b7432c6e0714d621ff5b2bed4a.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c  | 25 +++++++++++++++++++++++--
- src/qemu/qemu_hotplug.c |  2 +-
- 2 files changed, 24 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 897e21726a..0047a1d316 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1848,8 +1848,29 @@ qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv,
- 
-         if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI &&
-             src->auth) {
--            if (qemuDomainSecretStorageSourcePrepare(priv, src,
--                                                     hostdev->info->alias, NULL) < 0)
-+            bool iscsiHasPS = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_ISCSI_PASSWORD_SECRET);
-+            virSecretUsageType usageType = VIR_SECRET_USAGE_TYPE_ISCSI;
-+            qemuDomainStorageSourcePrivatePtr srcPriv;
-+
-+            if (!(src->privateData = qemuDomainStorageSourcePrivateNew()))
-+                return -1;
-+
-+            srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
-+
-+            if (!qemuDomainSupportsEncryptedSecret(priv) || !iscsiHasPS) {
-+                srcPriv->secinfo = qemuDomainSecretInfoNewPlain(usageType,
-+                                                                src->auth->username,
-+                                                                &src->auth->seclookupdef);
-+            } else {
-+                srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv,
-+                                                                      hostdev->info->alias,
-+                                                                      usageType,
-+                                                                      src->auth->username,
-+                                                                      &src->auth->seclookupdef,
-+                                                                      false);
-+            }
-+
-+            if (!srcPriv->secinfo)
-                 return -1;
-         }
-     }
-diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
-index 12bc1f9dd5..a473bab3e1 100644
---- a/src/qemu/qemu_hotplug.c
-+++ b/src/qemu/qemu_hotplug.c
-@@ -4438,7 +4438,7 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
-         if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI &&
-             virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_ISCSI_PASSWORD_SECRET) &&
-             qemuDomainStorageSourceHasAuth(iscsisrc->src)) {
--            if (!(objAlias = qemuDomainGetSecretAESAlias(hostdev->info->alias, false)))
-+            if (!(objAlias = qemuAliasForSecret(hostdev->info->alias, NULL)))
-                 return -1;
-         }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Stop-domain-on-failed-restore.patch b/SOURCES/libvirt-qemu-Stop-domain-on-failed-restore.patch
deleted file mode 100644
index fd54a23..0000000
--- a/SOURCES/libvirt-qemu-Stop-domain-on-failed-restore.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 84c5cad5921e96c6106cfd217de2064b64e1464f Mon Sep 17 00:00:00 2001
-Message-Id: <84c5cad5921e96c6106cfd217de2064b64e1464f@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Thu, 16 Jan 2020 10:03:54 +0100
-Subject: [PATCH] qemu: Stop domain on failed restore
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When resuming a domain from a save file, we read the domain XML
-from the file, add it onto our internal list of domains, start
-the qemu process, let it load the incoming migration stream and
-resume its vCPUs afterwards. If anything goes wrong, the domain
-object is removed from the list of domains and error is returned
-to the caller. However, the qemu process might be left behind -
-if resuming vCPUs fails (e.g. because qemu is unable to acquire
-write lock on a disk) then due to a bug the qemu process is not
-killed but the domain object is removed from the list.
-
-Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1718707
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 4c581527d431939a63be70c201b4ddab703cddbe)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <4048f92488a8b8c31c7a17a14b579840a9492328.1579165329.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 23 ++++++++++++-----------
- 1 file changed, 12 insertions(+), 11 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index ce9b1772c1..217d873671 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -6800,7 +6800,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     int ret = -1;
--    bool restored = false;
-+    bool started = false;
-     virObjectEventPtr event;
-     VIR_AUTOCLOSE intermediatefd = -1;
-     g_autoptr(virCommand) cmd = NULL;
-@@ -6808,6 +6808,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     virQEMUSaveHeaderPtr header = &data->header;
-     g_autoptr(qemuDomainSaveCookie) cookie = NULL;
-+    int rc = 0;
- 
-     if (virSaveCookieParseString(data->cookie, (virObjectPtr *)&cookie,
-                                  virDomainXMLOptionGetSaveCookie(driver->xmlopt)) < 0)
-@@ -6848,12 +6849,12 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-                          VIR_NETDEV_VPORT_PROFILE_OP_RESTORE,
-                          VIR_QEMU_PROCESS_START_PAUSED |
-                          VIR_QEMU_PROCESS_START_GEN_VMID) == 0)
--        restored = true;
-+        started = true;
- 
-     if (intermediatefd != -1) {
-         virErrorPtr orig_err = NULL;
- 
--        if (!restored) {
-+        if (!started) {
-             /* if there was an error setting up qemu, the intermediate
-              * process will wait forever to write to stdout, so we
-              * must manually kill it and ignore any error related to
-@@ -6864,21 +6865,17 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-             VIR_FORCE_CLOSE(*fd);
-         }
- 
--        if (virCommandWait(cmd, NULL) < 0) {
--            qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, asyncJob, 0);
--            restored = false;
--        }
-+        rc = virCommandWait(cmd, NULL);
-         VIR_DEBUG("Decompression binary stderr: %s", NULLSTR(errbuf));
--
-         virErrorRestore(&orig_err);
-     }
-     if (VIR_CLOSE(*fd) < 0) {
-         virReportSystemError(errno, _("cannot close file: %s"), path);
--        restored = false;
-+        rc = -1;
-     }
- 
--    virDomainAuditStart(vm, "restored", restored);
--    if (!restored)
-+    virDomainAuditStart(vm, "restored", started);
-+    if (!started || rc < 0)
-         goto cleanup;
- 
-     /* qemuProcessStart doesn't unset the qemu error reporting infrastructure
-@@ -6918,6 +6915,10 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-     ret = 0;
- 
-  cleanup:
-+    if (ret < 0 && started) {
-+        qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED,
-+                        asyncJob, VIR_QEMU_PROCESS_STOP_MIGRATED);
-+    }
-     if (qemuSecurityRestoreSavedStateLabel(driver, vm, path) < 0)
-         VIR_WARN("failed to restore save state label on %s", path);
-     return ret;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Tell-secdrivers-which-images-are-top-parent.patch b/SOURCES/libvirt-qemu-Tell-secdrivers-which-images-are-top-parent.patch
deleted file mode 100644
index 4e7ec99..0000000
--- a/SOURCES/libvirt-qemu-Tell-secdrivers-which-images-are-top-parent.patch
+++ /dev/null
@@ -1,312 +0,0 @@
-From d9369eae049c780ebd130a13eedfaaf3586242eb Mon Sep 17 00:00:00 2001
-Message-Id: <d9369eae049c780ebd130a13eedfaaf3586242eb@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 9 Mar 2020 14:58:57 +0100
-Subject: [PATCH] qemu: Tell secdrivers which images are top parent
-
-When preparing images for block jobs we modify their seclabels so
-that QEMU can open them. However, as mentioned in the previous
-commit, secdrivers base some it their decisions whether the image
-they are working on is top of of the backing chain. Fortunately,
-in places where we call secdrivers we know this and the
-information can be passed to secdrivers.
-
-The problem is the following: after the first blockcommit from
-the base to one of the parents the XATTRs on the base image are
-not cleared and therefore the second attempt to do another
-blockcommit fails. This is caused by blockcommit code calling
-qemuSecuritySetImageLabel() over the base image, possibly
-multiple times (to ensure RW/RO access). A naive fix would be to
-call the restore function. But this is not possible, because that
-would deny QEMU the access to the base image.  Fortunately, we
-can use the fact that seclabels are remembered only for the top
-of the backing chain and not for the rest of the backing chain.
-And thanks to the previous commit we can tell secdrivers which
-images are top of the backing chain.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1803551
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 13eb6c14682004d0dc692554475125db0f161da7)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <a8d9171d9f88b325480c17969e074d62d3eeba3b.1583760062.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_backup.c     |  4 ++--
- src/qemu/qemu_blockjob.c   |  6 ++++--
- src/qemu/qemu_checkpoint.c |  6 ++++--
- src/qemu/qemu_domain.c     | 24 ++++++++++++++++++++----
- src/qemu/qemu_domain.h     |  3 ++-
- src/qemu/qemu_driver.c     | 23 +++++++++++++++++------
- src/qemu/qemu_process.c    |  2 +-
- src/qemu/qemu_security.c   |  6 +++++-
- src/qemu/qemu_security.h   |  3 ++-
- 9 files changed, 57 insertions(+), 20 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 2cc6ff7a42..8b66ee8d1f 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -469,8 +469,8 @@ qemuBackupDiskPrepareOneStorage(virDomainObjPtr vm,
-         dd->created = true;
-     }
- 
--    if (qemuDomainStorageSourceAccessAllow(priv->driver, vm, dd->store, false,
--                                           true) < 0)
-+    if (qemuDomainStorageSourceAccessAllow(priv->driver, vm, dd->store,
-+                                           false, true, true) < 0)
-         return -1;
- 
-     dd->labelled = true;
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 71df0d1ab2..e894e1634d 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1105,9 +1105,11 @@ qemuBlockJobProcessEventCompletedCommit(virQEMUDriverPtr driver,
-         return;
- 
-     /* revert access to images */
--    qemuDomainStorageSourceAccessAllow(driver, vm, job->data.commit.base, true, false);
-+    qemuDomainStorageSourceAccessAllow(driver, vm, job->data.commit.base,
-+                                       true, false, false);
-     if (job->data.commit.topparent != job->disk->src)
--        qemuDomainStorageSourceAccessAllow(driver, vm, job->data.commit.topparent, true, false);
-+        qemuDomainStorageSourceAccessAllow(driver, vm, job->data.commit.topparent,
-+                                           true, false, true);
- 
-     baseparent->backingStore = NULL;
-     job->data.commit.topparent->backingStore = job->data.commit.base;
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index c06bfe6a21..fe54af74ec 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -298,7 +298,8 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     for (next = reopenimages; next; next = next->next) {
-         virStorageSourcePtr src = next->data;
- 
--        if (qemuDomainStorageSourceAccessAllow(driver, vm, src, false, false) < 0)
-+        if (qemuDomainStorageSourceAccessAllow(driver, vm, src,
-+                                               false, false, false) < 0)
-             goto relabel;
- 
-         relabelimages = g_slist_prepend(relabelimages, src);
-@@ -313,7 +314,8 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     for (next = relabelimages; next; next = next->next) {
-         virStorageSourcePtr src = next->data;
- 
--        ignore_value(qemuDomainStorageSourceAccessAllow(driver, vm, src, true, false));
-+        ignore_value(qemuDomainStorageSourceAccessAllow(driver, vm, src,
-+                                                        true, false, false));
-     }
- 
-     return rc;
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 3cbe7ef6e1..14bab896bc 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -11770,6 +11770,8 @@ typedef enum {
-     QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_SKIP_REVOKE = 1 << 4,
-     /* VM already has access to the source and we are just modifying it */
-     QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_MODIFY_ACCESS = 1 << 5,
-+    /* whether the image is the top image of the backing chain (e.g. disk source) */
-+    QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN_TOP = 1 << 6,
- } qemuDomainStorageSourceAccessFlags;
- 
- 
-@@ -11847,6 +11849,7 @@ qemuDomainStorageSourceAccessModify(virQEMUDriverPtr driver,
-     bool force_ro = flags & QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_FORCE_READ_ONLY;
-     bool force_rw = flags & QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_FORCE_READ_WRITE;
-     bool revoke = flags & QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_REVOKE;
-+    bool chain_top = flags & QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN_TOP;
-     int rc;
-     bool was_readonly = src->readonly;
-     bool revoke_cgroup = false;
-@@ -11893,7 +11896,7 @@ qemuDomainStorageSourceAccessModify(virQEMUDriverPtr driver,
-         revoke_namespace = true;
-     }
- 
--    if (qemuSecuritySetImageLabel(driver, vm, src, chain) < 0)
-+    if (qemuSecuritySetImageLabel(driver, vm, src, chain, chain_top) < 0)
-         goto revoke;
- 
-     revoke_label = true;
-@@ -11956,7 +11959,8 @@ qemuDomainStorageSourceChainAccessAllow(virQEMUDriverPtr driver,
-                                         virDomainObjPtr vm,
-                                         virStorageSourcePtr src)
- {
--    qemuDomainStorageSourceAccessFlags flags = QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN;
-+    qemuDomainStorageSourceAccessFlags flags = QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN |
-+                                               QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN_TOP;
- 
-     return qemuDomainStorageSourceAccessModify(driver, vm, src, flags);
- }
-@@ -11968,7 +11972,8 @@ qemuDomainStorageSourceChainAccessRevoke(virQEMUDriverPtr driver,
-                                          virStorageSourcePtr src)
- {
-     qemuDomainStorageSourceAccessFlags flags = QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_REVOKE |
--                                               QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN;
-+                                               QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN |
-+                                               QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN_TOP;
- 
-     return qemuDomainStorageSourceAccessModify(driver, vm, src, flags);
- }
-@@ -11998,6 +12003,7 @@ qemuDomainStorageSourceAccessRevoke(virQEMUDriverPtr driver,
-  * @elem: source structure to set access for
-  * @readonly: setup read-only access if true
-  * @newSource: @elem describes a storage source which @vm can't access yet
-+ * @chainTop: @elem is top parent of backing chain
-  *
-  * Allow a VM access to a single element of a disk backing chain; this helper
-  * ensures that the lock manager, cgroup device controller, and security manager
-@@ -12005,13 +12011,20 @@ qemuDomainStorageSourceAccessRevoke(virQEMUDriverPtr driver,
-  *
-  * When modifying permissions of @elem which @vm can already access (is in the
-  * backing chain) @newSource needs to be set to false.
-+ *
-+ * The @chainTop flag must be set if the @elem image is the topmost image of a
-+ * given backing chain or meant to become the topmost image (for e.g.
-+ * snapshots, or blockcopy or even in the end for active layer block commit,
-+ * where we discard the top of the backing chain so one of the intermediates
-+ * (the base) becomes the top of the chain).
-  */
- int
- qemuDomainStorageSourceAccessAllow(virQEMUDriverPtr driver,
-                                    virDomainObjPtr vm,
-                                    virStorageSourcePtr elem,
-                                    bool readonly,
--                                   bool newSource)
-+                                   bool newSource,
-+                                   bool chainTop)
- {
-     qemuDomainStorageSourceAccessFlags flags = QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_SKIP_REVOKE;
- 
-@@ -12023,6 +12036,9 @@ qemuDomainStorageSourceAccessAllow(virQEMUDriverPtr driver,
-     if (!newSource)
-         flags |= QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_MODIFY_ACCESS;
- 
-+    if (chainTop)
-+        flags |= QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_CHAIN_TOP;
-+
-     return qemuDomainStorageSourceAccessModify(driver, vm, elem, flags);
- }
- 
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index 83150e4e6d..9d143b575d 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -895,7 +895,8 @@ int qemuDomainStorageSourceAccessAllow(virQEMUDriverPtr driver,
-                                        virDomainObjPtr vm,
-                                        virStorageSourcePtr elem,
-                                        bool readonly,
--                                       bool newSource);
-+                                       bool newSource,
-+                                       bool chainTop);
- 
- int qemuDomainPrepareStorageSourceBlockdev(virDomainDiskDefPtr disk,
-                                            virStorageSourcePtr src,
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index d346446444..26f100177b 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -15467,7 +15467,8 @@ qemuDomainSnapshotDiskPrepareOne(virQEMUDriverPtr driver,
-     }
- 
-     /* set correct security, cgroup and locking options on the new image */
--    if (qemuDomainStorageSourceAccessAllow(driver, vm, dd->src, false, true) < 0)
-+    if (qemuDomainStorageSourceAccessAllow(driver, vm, dd->src,
-+                                           false, true, true) < 0)
-         return -1;
- 
-     dd->prepared = true;
-@@ -18815,11 +18816,19 @@ qemuDomainBlockCommit(virDomainPtr dom,
-      * operation succeeds, but doing that requires tracking the
-      * operation in XML across libvirtd restarts.  */
-     clean_access = true;
--    if (qemuDomainStorageSourceAccessAllow(driver, vm, baseSource, false, false) < 0 ||
--        (top_parent && top_parent != disk->src &&
--         qemuDomainStorageSourceAccessAllow(driver, vm, top_parent, false, false) < 0))
-+    if (qemuDomainStorageSourceAccessAllow(driver, vm, baseSource,
-+                                           false, false, false) < 0)
-         goto endjob;
- 
-+    if (top_parent && top_parent != disk->src) {
-+        /* While top_parent is topmost image, we don't need to remember its
-+         * owner as it will be overwritten upon finishing the commit. Hence,
-+         * pass chainTop = false. */
-+        if (qemuDomainStorageSourceAccessAllow(driver, vm, top_parent,
-+                                               false, false, false) < 0)
-+            goto endjob;
-+    }
-+
-     if (!(job = qemuBlockJobDiskNewCommit(vm, disk, top_parent, topSource,
-                                           baseSource,
-                                           flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE,
-@@ -18877,9 +18886,11 @@ qemuDomainBlockCommit(virDomainPtr dom,
-         virErrorPtr orig_err;
-         virErrorPreserveLast(&orig_err);
-         /* Revert access to read-only, if possible.  */
--        qemuDomainStorageSourceAccessAllow(driver, vm, baseSource, true, false);
-+        qemuDomainStorageSourceAccessAllow(driver, vm, baseSource,
-+                                           true, false, false);
-         if (top_parent && top_parent != disk->src)
--            qemuDomainStorageSourceAccessAllow(driver, vm, top_parent, true, false);
-+            qemuDomainStorageSourceAccessAllow(driver, vm, top_parent,
-+                                               true, false, false);
- 
-         virErrorRestore(&orig_err);
-     }
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index 0476f18517..dffff04554 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -7823,7 +7823,7 @@ qemuProcessRefreshLegacyBlockjob(void *payload,
-                 (qemuDomainNamespaceSetupDisk(vm, disk->mirror) < 0 ||
-                  qemuSetupImageChainCgroup(vm, disk->mirror) < 0 ||
-                  qemuSecuritySetImageLabel(priv->driver, vm, disk->mirror,
--                                           true) < 0))
-+                                           true, true) < 0))
-                 goto cleanup;
-         }
-     }
-diff --git a/src/qemu/qemu_security.c b/src/qemu/qemu_security.c
-index 2aa2b5b9c6..484fc34552 100644
---- a/src/qemu/qemu_security.c
-+++ b/src/qemu/qemu_security.c
-@@ -98,7 +98,8 @@ int
- qemuSecuritySetImageLabel(virQEMUDriverPtr driver,
-                           virDomainObjPtr vm,
-                           virStorageSourcePtr src,
--                          bool backingChain)
-+                          bool backingChain,
-+                          bool chainTop)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     pid_t pid = -1;
-@@ -108,6 +109,9 @@ qemuSecuritySetImageLabel(virQEMUDriverPtr driver,
-     if (backingChain)
-         labelFlags |= VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN;
- 
-+    if (chainTop)
-+        labelFlags |= VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP;
-+
-     if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT))
-         pid = vm->pid;
- 
-diff --git a/src/qemu/qemu_security.h b/src/qemu/qemu_security.h
-index a8c648ece1..c8516005ac 100644
---- a/src/qemu/qemu_security.h
-+++ b/src/qemu/qemu_security.h
-@@ -36,7 +36,8 @@ void qemuSecurityRestoreAllLabel(virQEMUDriverPtr driver,
- int qemuSecuritySetImageLabel(virQEMUDriverPtr driver,
-                               virDomainObjPtr vm,
-                               virStorageSourcePtr src,
--                              bool backingChain);
-+                              bool backingChain,
-+                              bool chainTop);
- 
- int qemuSecurityRestoreImageLabel(virQEMUDriverPtr driver,
-                                   virDomainObjPtr vm,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-Use-g_autoptr-for-qemuDomainSaveCookie.patch b/SOURCES/libvirt-qemu-Use-g_autoptr-for-qemuDomainSaveCookie.patch
deleted file mode 100644
index b4ca4f7..0000000
--- a/SOURCES/libvirt-qemu-Use-g_autoptr-for-qemuDomainSaveCookie.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From c5cdebd40024c33675f93b47732869c658204056 Mon Sep 17 00:00:00 2001
-Message-Id: <c5cdebd40024c33675f93b47732869c658204056@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Thu, 16 Jan 2020 10:03:53 +0100
-Subject: [PATCH] qemu: Use g_autoptr() for qemuDomainSaveCookie
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1718707
-
-(cherry picked from commit 3203ad6cfd617fb11d4bb47e514c370b6624641b)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <5e58b5853f9bd1a2b5109145afdad190071f5c44.1579165329.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 28 ++++++++++------------------
- src/qemu/qemu_domain.h |  1 +
- src/qemu/qemu_driver.c |  6 ++----
- 3 files changed, 13 insertions(+), 22 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 0edf316fff..91a9f0481b 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -16001,27 +16001,23 @@ qemuDomainSaveCookiePtr
- qemuDomainSaveCookieNew(virDomainObjPtr vm)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
--    qemuDomainSaveCookiePtr cookie = NULL;
-+    g_autoptr(qemuDomainSaveCookie) cookie = NULL;
- 
-     if (qemuDomainInitialize() < 0)
--        goto error;
-+        return NULL;
- 
-     if (!(cookie = virObjectNew(qemuDomainSaveCookieClass)))
--        goto error;
-+        return NULL;
- 
-     if (priv->origCPU && !(cookie->cpu = virCPUDefCopy(vm->def->cpu)))
--        goto error;
-+        return NULL;
- 
-     cookie->slirpHelper = qemuDomainGetSlirpHelperOk(vm);
- 
-     VIR_DEBUG("Save cookie %p, cpu=%p, slirpHelper=%d",
-               cookie, cookie->cpu, cookie->slirpHelper);
- 
--    return cookie;
--
-- error:
--    virObjectUnref(cookie);
--    return NULL;
-+    return g_steal_pointer(&cookie);
- }
- 
- 
-@@ -16029,26 +16025,22 @@ static int
- qemuDomainSaveCookieParse(xmlXPathContextPtr ctxt G_GNUC_UNUSED,
-                           virObjectPtr *obj)
- {
--    qemuDomainSaveCookiePtr cookie = NULL;
-+    g_autoptr(qemuDomainSaveCookie) cookie = NULL;
- 
-     if (qemuDomainInitialize() < 0)
--        goto error;
-+        return -1;
- 
-     if (!(cookie = virObjectNew(qemuDomainSaveCookieClass)))
--        goto error;
-+        return -1;
- 
-     if (virCPUDefParseXML(ctxt, "./cpu[1]", VIR_CPU_TYPE_GUEST,
-                           &cookie->cpu) < 0)
--        goto error;
-+        return -1;
- 
-     cookie->slirpHelper = virXPathBoolean("boolean(./slirpHelper)", ctxt) > 0;
- 
--    *obj = (virObjectPtr) cookie;
-+    *obj = (virObjectPtr) g_steal_pointer(&cookie);
-     return 0;
--
-- error:
--    virObjectUnref(cookie);
--    return -1;
- }
- 
- 
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index c6afc484f6..60b80297fa 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -610,6 +610,7 @@ struct _qemuDomainSaveCookie {
-     bool slirpHelper;
- };
- 
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuDomainSaveCookie, virObjectUnref);
- 
- typedef struct _qemuDomainXmlNsDef qemuDomainXmlNsDef;
- typedef qemuDomainXmlNsDef *qemuDomainXmlNsDefPtr;
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index e1c0550b9a..ce9b1772c1 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -3293,7 +3293,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver,
-     virObjectEventPtr event = NULL;
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     virQEMUSaveDataPtr data = NULL;
--    qemuDomainSaveCookiePtr cookie = NULL;
-+    g_autoptr(qemuDomainSaveCookie) cookie = NULL;
- 
-     if (!qemuMigrationSrcIsAllowed(driver, vm, false, 0))
-         goto cleanup;
-@@ -3399,7 +3399,6 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver,
-         qemuDomainRemoveInactiveJob(driver, vm);
- 
-  cleanup:
--    virObjectUnref(cookie);
-     virQEMUSaveDataFree(data);
-     virObjectEventStateQueue(driver->domainEventState, event);
-     return ret;
-@@ -6808,7 +6807,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-     g_autofree char *errbuf = NULL;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     virQEMUSaveHeaderPtr header = &data->header;
--    qemuDomainSaveCookiePtr cookie = NULL;
-+    g_autoptr(qemuDomainSaveCookie) cookie = NULL;
- 
-     if (virSaveCookieParseString(data->cookie, (virObjectPtr *)&cookie,
-                                  virDomainXMLOptionGetSaveCookie(driver->xmlopt)) < 0)
-@@ -6919,7 +6918,6 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-     ret = 0;
- 
-  cleanup:
--    virObjectUnref(cookie);
-     if (qemuSecurityRestoreSavedStateLabel(driver, vm, path) < 0)
-         VIR_WARN("failed to restore save state label on %s", path);
-     return ret;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Use-switch-statement-in-qemuBuildCpuCommandLine.patch b/SOURCES/libvirt-qemu-Use-switch-statement-in-qemuBuildCpuCommandLine.patch
deleted file mode 100644
index 450a974..0000000
--- a/SOURCES/libvirt-qemu-Use-switch-statement-in-qemuBuildCpuCommandLine.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 67198a38ee3bce9ff19a8c80a593724d684d966e Mon Sep 17 00:00:00 2001
-Message-Id: <67198a38ee3bce9ff19a8c80a593724d684d966e@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 13:12:33 +0100
-Subject: [PATCH] qemu: Use switch statement in qemuBuildCpuCommandLine()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Make sure we are taking all possible virDomainTimerNameType values
-into account. This will make upcoming changes easier.
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit f8e923c1ba70d7be53ea18d9b4de040763347f9e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214121237.623948-3-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_command.c | 34 ++++++++++++++++++++++++----------
- 1 file changed, 24 insertions(+), 10 deletions(-)
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index d144855b0d..0ad09baa1d 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -6616,16 +6616,30 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
-     for (i = 0; i < def->clock.ntimers; i++) {
-         virDomainTimerDefPtr timer = def->clock.timers[i];
- 
--        if (timer->name == VIR_DOMAIN_TIMER_NAME_KVMCLOCK &&
--            timer->present != -1) {
--            qemuBuildCpuFeature(qemuCaps, &buf, "kvmclock",
--                                !!timer->present);
--        } else if (timer->name == VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK &&
--                   timer->present == 1) {
--            virBufferAddLit(&buf, ",hv-time");
--        } else if (timer->name == VIR_DOMAIN_TIMER_NAME_TSC &&
--                   timer->frequency > 0) {
--            virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
-+        switch ((virDomainTimerNameType)timer->name) {
-+        case VIR_DOMAIN_TIMER_NAME_KVMCLOCK:
-+            if (timer->present != -1) {
-+                qemuBuildCpuFeature(qemuCaps, &buf, "kvmclock",
-+                                    !!timer->present);
-+            }
-+            break;
-+        case VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK:
-+            if (timer->present == 1)
-+                virBufferAddLit(&buf, ",hv-time");
-+            break;
-+        case VIR_DOMAIN_TIMER_NAME_TSC:
-+            if (timer->frequency > 0)
-+                virBufferAsprintf(&buf, ",tsc-frequency=%lu", timer->frequency);
-+            break;
-+        case VIR_DOMAIN_TIMER_NAME_PLATFORM:
-+        case VIR_DOMAIN_TIMER_NAME_PIT:
-+        case VIR_DOMAIN_TIMER_NAME_RTC:
-+        case VIR_DOMAIN_TIMER_NAME_HPET:
-+            break;
-+        case VIR_DOMAIN_TIMER_NAME_LAST:
-+        default:
-+            virReportEnumRangeError(virDomainTimerNameType, timer->name);
-+            return -1;
-         }
-     }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Validate-configuration-for-the-armvtimer-timer.patch b/SOURCES/libvirt-qemu-Validate-configuration-for-the-armvtimer-timer.patch
deleted file mode 100644
index 86f5cd4..0000000
--- a/SOURCES/libvirt-qemu-Validate-configuration-for-the-armvtimer-timer.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 8152b6ac3b740bfe1155e3c4c251684cc5b3192e Mon Sep 17 00:00:00 2001
-Message-Id: <8152b6ac3b740bfe1155e3c4c251684cc5b3192e@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 13:12:36 +0100
-Subject: [PATCH] qemu: Validate configuration for the armvtimer timer
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Its use is limited to certain guest types, and it only supports
-a subset of all possible tick policies.
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit aeddab230cd1e2a12d5d6352971bb70ea067a1c4)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214121237.623948-6-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 38 ++++++++++++++++++++++++++++++++++++++
- 1 file changed, 38 insertions(+)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 4de4f9da53..1bed117eb0 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -5506,6 +5506,44 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
-             break;
- 
-         case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
-+            if (def->virtType != VIR_DOMAIN_VIRT_KVM ||
-+                !qemuDomainIsARMVirt(def)) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("Configuring the '%s' timer is not supported "
-+                                 "for virtType=%s arch=%s machine=%s guests"),
-+                               virDomainTimerNameTypeToString(timer->name),
-+                               virDomainVirtTypeToString(def->virtType),
-+                               virArchToString(def->os.arch),
-+                               def->os.machine);
-+                return -1;
-+            }
-+            if (timer->present == 0) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("The '%s' timer can't be disabled"),
-+                               virDomainTimerNameTypeToString(timer->name));
-+                return -1;
-+            }
-+            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_KVM_NO_ADJVTIME)) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("Configuring the '%s' timer is not supported "
-+                                 "with this QEMU binary"),
-+                               virDomainTimerNameTypeToString(timer->name));
-+                return -1;
-+            }
-+
-+            switch (timer->tickpolicy) {
-+            case -1:
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
-+                break;
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
-+            case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("The '%s' timer does not support tickpolicy '%s'"),
-+                               virDomainTimerNameTypeToString(timer->name),
-+                               virDomainTimerTickpolicyTypeToString(timer->tickpolicy));
-+                return -1;
-+            }
-             break;
-         }
-     }
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-Validate-domain-definition-even-on-migration.patch b/SOURCES/libvirt-qemu-Validate-domain-definition-even-on-migration.patch
new file mode 100644
index 0000000..33d2f4d
--- /dev/null
+++ b/SOURCES/libvirt-qemu-Validate-domain-definition-even-on-migration.patch
@@ -0,0 +1,72 @@
+From fa7cff4e684ededd184976d4fdf217cc155825b8 Mon Sep 17 00:00:00 2001
+Message-Id: <fa7cff4e684ededd184976d4fdf217cc155825b8@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Mon, 31 Jan 2022 12:55:47 +0100
+Subject: [PATCH] qemu: Validate domain definition even on migration
+
+When we are about to spawn QEMU, we validate the domain
+definition against qemuCaps. Except when domain is/was already
+running before (i.e. on incoming migration, snapshots, resume
+from a file). However, especially on incoming migration it may
+happen that the destination QEMU is different to the source
+QEMU, e.g. the destination QEMU may have some devices disabled.
+
+And we have a function that validates devices/features requested
+in domain XML against the desired QEMU capabilities (aka
+qemuCaps) - it's virDomainDefValidate() which calls
+qemuValidateDomainDef() and qemuValidateDomainDeviceDef()
+subsequently.
+
+But the problem here is that the validation function is
+explicitly skipped over in specific scenarios (like incoming
+migration, restore from a snapshot or previously saved file).
+
+This in turn means that we may spawn QEMU and request
+device/features it doesn't support. When that happens QEMU fails
+to load migration stream:
+
+  qemu-kvm: ... 'virtio-mem-pci' is not a valid device model name
+
+(NB, while the example shows one particular device, the problem
+is paramount)
+
+This problem is easier to run into since we are slowly moving
+validation from qemu_command.c into said validation functions.
+
+The solution is simple: do the validation in all cases. And while
+it may happen that users would be unable to migrate/restore a
+guest due to a bug in our validator, spawning QEMU without
+validation is worse (especially when you consider that users can
+supply their own XMLs for migrate/restore operations - these were
+never validated).
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2048435
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Peter Krempa <pkrempa@redhat.com>
+(cherry picked from commit 517b8c12b98d7ac0bb4d582e0b491d50d776eb6d)
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2050702
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/qemu/qemu_process.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
+index 5c9ca0fe4f..5c6657a876 100644
+--- a/src/qemu/qemu_process.c
++++ b/src/qemu/qemu_process.c
+@@ -5411,11 +5411,7 @@ qemuProcessStartValidate(virQEMUDriver *driver,
+ 
+     }
+ 
+-    /* Checks below should not be executed when starting a qemu process for a
+-     * VM that was running before (migration, snapshots, save). It's more
+-     * important to start such VM than keep the configuration clean */
+-    if ((flags & VIR_QEMU_PROCESS_START_NEW) &&
+-        virDomainDefValidate(vm->def, 0, driver->xmlopt, qemuCaps) < 0)
++    if (virDomainDefValidate(vm->def, 0, driver->xmlopt, qemuCaps) < 0)
+         return -1;
+ 
+     if (qemuProcessStartValidateGraphics(vm) < 0)
+-- 
+2.35.1
+
diff --git a/SOURCES/libvirt-qemu-add-QEMU_CAPS_DEVICE_VHOST_USER_FS.patch b/SOURCES/libvirt-qemu-add-QEMU_CAPS_DEVICE_VHOST_USER_FS.patch
deleted file mode 100644
index 3614dd4..0000000
--- a/SOURCES/libvirt-qemu-add-QEMU_CAPS_DEVICE_VHOST_USER_FS.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From e6a402520fef59636ede2d24249ae6b4fe45ac60 Mon Sep 17 00:00:00 2001
-Message-Id: <e6a402520fef59636ede2d24249ae6b4fe45ac60@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:39 +0100
-Subject: [PATCH] qemu: add QEMU_CAPS_DEVICE_VHOST_USER_FS
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduced by QEMU commit 98fc1ada4cf70af0f1df1a2d7183cf786fc7da05
-    virtio: add vhost-user-fs base device
-
-Released in QEMU v4.2.0.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit d99128a62b9f84e3e5b372d1e6419f4f1d1dffe6)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-
-Conflicts: * different set of capabilities available downstream:
-    src/qemu/qemu_capabilities.c
-    tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-  * missing downstream:
-    tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <2450cfcd270e664a9832a82367787b6cdfc2c6fa.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_capabilities.c                      | 2 ++
- src/qemu/qemu_capabilities.h                      | 1 +
- tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 +
- tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml   | 1 +
- tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml  | 1 +
- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 +
- 6 files changed, 7 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 6912a6f72b..34df4d89b3 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -558,6 +558,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               /* 350 */
-               "virtio-net.failover",
-               "cpu.kvm-no-adjvtime",
-+              "vhost-user-fs",
-     );
- 
- 
-@@ -1272,6 +1273,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
-     { "vhost-user-vga", QEMU_CAPS_DEVICE_VHOST_USER_VGA },
-     { "ramfb", QEMU_CAPS_DEVICE_RAMFB },
-     { "max-arm-cpu", QEMU_CAPS_ARM_MAX_CPU },
-+    { "vhost-user-fs-device", QEMU_CAPS_DEVICE_VHOST_USER_FS },
- };
- 
- static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = {
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 4ccb0c55bc..e3449a9ca3 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -539,6 +539,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     /* 350 */
-     QEMU_CAPS_VIRTIO_NET_FAILOVER, /* virtio-net-*.failover */
-     QEMU_CAPS_CPU_KVM_NO_ADJVTIME, /* cpu.kvm-no-adjvtime */
-+    QEMU_CAPS_DEVICE_VHOST_USER_FS, /* -device vhost-user-fs */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-index 6af09e1a83..55fa169d89 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-@@ -177,6 +177,7 @@
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-   <flag name='virtio-net.failover'/>
-+  <flag name='vhost-user-fs'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-index c8746f05ef..49963b7020 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-@@ -136,6 +136,7 @@
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-+  <flag name='vhost-user-fs'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-index c71791e205..ed3dea23b3 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-@@ -220,6 +220,7 @@
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-   <flag name='virtio-net.failover'/>
-+  <flag name='vhost-user-fs'/>
-   <version>4002000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-index e871ba528e..8195da4e27 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-@@ -179,6 +179,7 @@
-   <flag name='smp-dies'/>
-   <flag name='virtio-net.failover'/>
-   <flag name='cpu.kvm-no-adjvtime'/>
-+  <flag name='vhost-user-fs'/>
-   <version>4002050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700241</microcodeVersion>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-add-QEMU_CAPS_STORAGE_WERROR.patch b/SOURCES/libvirt-qemu-add-QEMU_CAPS_STORAGE_WERROR.patch
deleted file mode 100644
index 46b44a7..0000000
--- a/SOURCES/libvirt-qemu-add-QEMU_CAPS_STORAGE_WERROR.patch
+++ /dev/null
@@ -1,407 +0,0 @@
-From 3d20773c3ab225449f1977b064d779adf316853c Mon Sep 17 00:00:00 2001
-Message-Id: <3d20773c3ab225449f1977b064d779adf316853c@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 1 Apr 2020 17:19:26 +0200
-Subject: [PATCH] qemu: add QEMU_CAPS_STORAGE_WERROR
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Detect the werror property on SCSI and virtio disks.
-But clear it if the QEMU supports usb-storage device without it
-also supporting this option for usb-storage.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 47e84b06ec8181cbdb00c87bcc67f20edd9e949b)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1819250
-
-Conflicts: src/qemu/qemu_capabilities.c
-	tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-	tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-	tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-	tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-	tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-	tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-	tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-	tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml
-	tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-           different capablility sets
-Message-Id: <67c670e206dd05aac31b86cac1f42e2f37b366e5.1585754141.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_capabilities.c                      | 10 +++++++++-
- src/qemu/qemu_capabilities.h                      |  1 +
- tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml  |  1 +
- tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml  |  1 +
- tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml  |  1 +
- tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml   |  1 +
- tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml   |  1 +
- tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml   |  1 +
- tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml |  1 +
- tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml |  1 +
- tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml   |  1 +
- tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml  |  1 +
- tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml   |  1 +
- tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml  |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml   |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml   |  1 +
- tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml  |  1 +
- tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml  |  1 +
- tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml |  1 +
- tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml   |  1 +
- tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml   |  1 +
- tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml  |  1 +
- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml |  1 +
- 26 files changed, 34 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 0b4ed4253c..9d744501b9 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -563,7 +563,8 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "blockdev-reopen",
- 
-               /* 355 */
--              "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api"
-+              "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api",
-+              "storage.werror",
-     );
- 
- 
-@@ -1299,6 +1300,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBlk[] = {
-     { "iommu_platform", QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM },
-     { "ats", QEMU_CAPS_VIRTIO_PCI_ATS },
-     { "write-cache", QEMU_CAPS_DISK_WRITE_CACHE },
-+    { "werror", QEMU_CAPS_STORAGE_WERROR },
- };
- 
- static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioNet[] = {
-@@ -1334,6 +1336,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsSCSIDisk[] = {
-     { "share-rw", QEMU_CAPS_DISK_SHARE_RW },
-     { "write-cache", QEMU_CAPS_DISK_WRITE_CACHE },
-     { "device_id", QEMU_CAPS_SCSI_DISK_DEVICE_ID },
-+    { "werror", QEMU_CAPS_STORAGE_WERROR },
- };
- 
- static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsIDEDrive[] = {
-@@ -4811,6 +4814,11 @@ virQEMUCapsInitProcessCapsInterlock(virQEMUCapsPtr qemuCaps)
- {
-     if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV))
-         virQEMUCapsClear(qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP);
-+
-+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_USB_STORAGE) &&
-+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_STORAGE_WERROR)) {
-+        virQEMUCapsClear(qemuCaps, QEMU_CAPS_STORAGE_WERROR);
-+    }
- }
- 
- 
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 0f7c586703..78bddb3856 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -545,6 +545,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
- 
-     /* 355 */
-     QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API, /* downstream support for blockdev reopen in rhel-av-8.2.0 */
-+    QEMU_CAPS_STORAGE_WERROR, /* virtio-blk,scsi-hd.werror */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
-index aa9027d514..04ac872985 100644
---- a/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml
-@@ -106,6 +106,7 @@
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='query-cpu-model-baseline'/>
-   <flag name='query-cpu-model-comparison'/>
-+  <flag name='storage.werror'/>
-   <version>2010000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100287</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
-index db51d461a8..6d36a6e484 100644
---- a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml
-@@ -113,6 +113,7 @@
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='query-cpu-model-baseline'/>
-   <flag name='query-cpu-model-comparison'/>
-+  <flag name='storage.werror'/>
-   <version>2011000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100288</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
-index cbbe24823a..21a168dd3b 100644
---- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
-@@ -125,6 +125,7 @@
-   <flag name='query-cpu-model-baseline'/>
-   <flag name='query-cpu-model-comparison'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>2012000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100289</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
-index 762ce4946e..17351ca6bf 100644
---- a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
-@@ -90,6 +90,7 @@
-   <flag name='virtual-css-bridge'/>
-   <flag name='sdl-gl'/>
-   <flag name='zpci'/>
-+  <flag name='storage.werror'/>
-   <version>2007000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100245</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
-index 6000bed682..d204b82030 100644
---- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
-@@ -95,6 +95,7 @@
-   <flag name='zpci'/>
-   <flag name='query-cpu-model-baseline'/>
-   <flag name='query-cpu-model-comparison'/>
-+  <flag name='storage.werror'/>
-   <version>2007093</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100246</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
-index 95251de022..9a6d94d37b 100644
---- a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml
-@@ -100,6 +100,7 @@
-   <flag name='iothread.poll-max-ns'/>
-   <flag name='query-cpu-model-baseline'/>
-   <flag name='query-cpu-model-comparison'/>
-+  <flag name='storage.werror'/>
-   <version>2009000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100247</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml
-index 0b507ec80e..6814a2f9c6 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml
-@@ -95,6 +95,7 @@
-   <flag name='memory-backend-file.align'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>3000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>0</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml
-index 0d7c589f71..b81f5825cc 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml
-@@ -95,6 +95,7 @@
-   <flag name='memory-backend-file.align'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>3000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>0</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml
-index da57f8738b..85cda12076 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml
-@@ -128,6 +128,7 @@
-   <flag name='query-cpu-model-comparison'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>3000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100239</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-index c955994ac0..575b1c2a43 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
-@@ -202,6 +202,7 @@
-   <flag name='bochs-display'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>3000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100239</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-index cab38d442b..591f054193 100644
---- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
-@@ -159,6 +159,7 @@
-   <flag name='overcommit'/>
-   <flag name='bochs-display'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>3000091</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-index 3e89d7f933..6e434579ff 100644
---- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
-@@ -205,6 +205,7 @@
-   <flag name='bochs-display'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>3000092</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml
-index 757bf193fc..6fd1880ae2 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml
-@@ -169,6 +169,7 @@
-   <flag name='ramfb'/>
-   <flag name='arm-max-cpu'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-index 4e13888042..aa22eccc6f 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
-@@ -173,6 +173,7 @@
-   <flag name='migration-file-drop-cache'/>
-   <flag name='machine.pseries.cap-ccf-assist'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml
-index 7d3a1bec6f..6a567239b9 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml
-@@ -170,6 +170,7 @@
-   <flag name='bochs-display'/>
-   <flag name='migration-file-drop-cache'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>0</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml
-index 1732139db8..d6686b7c68 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml
-@@ -170,6 +170,7 @@
-   <flag name='bochs-display'/>
-   <flag name='migration-file-drop-cache'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>0</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml
-index fd124ce0c5..9dc29832f9 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml
-@@ -136,6 +136,7 @@
-   <flag name='query-cpu-model-baseline'/>
-   <flag name='query-cpu-model-comparison'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-index ba32d4c592..3c1baf9560 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
-@@ -210,6 +210,7 @@
-   <flag name='migration-file-drop-cache'/>
-   <flag name='ramfb'/>
-   <flag name='drive-nvme'/>
-+  <flag name='storage.werror'/>
-   <version>4000000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100240</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-index 54b797a86a..d5f2673fb6 100644
---- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-@@ -216,6 +216,7 @@
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-+  <flag name='storage.werror'/>
-   <version>4001000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100241</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-index 55fa169d89..75f9bc3158 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-@@ -178,6 +178,7 @@
-   <flag name='smp-dies'/>
-   <flag name='virtio-net.failover'/>
-   <flag name='vhost-user-fs'/>
-+  <flag name='storage.werror'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-index 7c62546d74..f5121fca94 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-@@ -177,6 +177,7 @@
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-+  <flag name='storage.werror'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-index 49963b7020..59cb9200cb 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-@@ -137,6 +137,7 @@
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-   <flag name='vhost-user-fs'/>
-+  <flag name='storage.werror'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-index ed3dea23b3..f6df71ff3e 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-@@ -221,6 +221,7 @@
-   <flag name='smp-dies'/>
-   <flag name='virtio-net.failover'/>
-   <flag name='vhost-user-fs'/>
-+  <flag name='storage.werror'/>
-   <version>4002000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-index 8195da4e27..140a466910 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-@@ -180,6 +180,7 @@
-   <flag name='virtio-net.failover'/>
-   <flag name='cpu.kvm-no-adjvtime'/>
-   <flag name='vhost-user-fs'/>
-+  <flag name='storage.werror'/>
-   <version>4002050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700241</microcodeVersion>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-add-capabilities-flag-for-failover-feature.patch b/SOURCES/libvirt-qemu-add-capabilities-flag-for-failover-feature.patch
deleted file mode 100644
index 454a9ea..0000000
--- a/SOURCES/libvirt-qemu-add-capabilities-flag-for-failover-feature.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From a2712d6a8ef06050b4e31d9e6e9800a4babc2cd8 Mon Sep 17 00:00:00 2001
-Message-Id: <a2712d6a8ef06050b4e31d9e6e9800a4babc2cd8@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 30 Jan 2020 14:12:39 -0500
-Subject: [PATCH] qemu: add capabilities flag for failover feature
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Presence of the virtio-net-pci option called "failover" indicates
-support in a qemu binary of a simplistic bonding of a virtio-net
-device with another PCI device. This feature allows migration of
-guests that have a network device assigned to a guest with VFIO, by
-creating a network bond device in the guest consisting of the
-VFIO-assigned device and a virtio-net-pci device, then temporarily
-(and automatically) unplugging the VFIO net device prior to migration
-(and hotplugging an equivalent device on the migration
-destination). (The feature is called "failover" because the bond
-device uses the vfio-pci netdev for normal guest networking, but
-"fails over" to the virtio-net-pci netdev once the vfio-pci device is
-unplugged for migration.)
-
-Full functioning of the feature also requires support in the
-virtio-net driver in the guest OS (since that is where the bond device
-resides), but if the "failover" commandline option is present for the
-virtio-net-pci device in qemu, at least the qemu part of the feature
-is available, and libvirt can add the proper options to both the
-virtio-net-pci and vfio-pci device commandlines to indicate qemu
-should attempt doing the failover during migration.
-
-This patch just adds the qemu capabilities flag "virtio-net.failover".
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit cad65f222f29dffd4e91d43b230665aca813c7a6)
-
-Conflicts:
-   src/qemu/qemu_capabilities.c
-   src/qemu/qemu_capabilities.h
-   tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-   tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-
-     context changed due to other capabilities flags
-     added upstream
-
-   tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-
-     only exists upstream
-
-https://bugzilla.redhat.com/1693587
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200130191244.24174-2-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_capabilities.c                      | 4 ++++
- src/qemu/qemu_capabilities.h                      | 3 +++
- tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 +
- tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml  | 1 +
- 4 files changed, 9 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 893fc5a1bb..10c17323be 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -554,6 +554,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "savevm-monitor-nodes",
-               "drive-nvme",
-               "smp-dies",
-+
-+              /* 350 */
-+              "virtio-net.failover",
-     );
- 
- 
-@@ -1299,6 +1302,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioNet[] = {
-     { "disable-legacy", QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY },
-     { "iommu_platform", QEMU_CAPS_VIRTIO_PCI_IOMMU_PLATFORM },
-     { "ats", QEMU_CAPS_VIRTIO_PCI_ATS },
-+    { "failover", QEMU_CAPS_VIRTIO_NET_FAILOVER },
- };
- 
- static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsSpaprPCIHostBridge[] = {
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 5ec8901bb3..6ab0eabd3f 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -536,6 +536,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_DRIVE_NVME, /* -drive file.driver=nvme */
-     QEMU_CAPS_SMP_DIES, /*  -smp dies= */
- 
-+    /* 350 */
-+    QEMU_CAPS_VIRTIO_NET_FAILOVER, /* virtio-net-*.failover */
-+
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
- 
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-index 184bb7ff77..6af09e1a83 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-@@ -176,6 +176,7 @@
-   <flag name='savevm-monitor-nodes'/>
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-+  <flag name='virtio-net.failover'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-index afd59a269d..c71791e205 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-@@ -219,6 +219,7 @@
-   <flag name='savevm-monitor-nodes'/>
-   <flag name='drive-nvme'/>
-   <flag name='smp-dies'/>
-+  <flag name='virtio-net.failover'/>
-   <version>4002000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100242</microcodeVersion>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-add-code-for-handling-virtiofsd.patch b/SOURCES/libvirt-qemu-add-code-for-handling-virtiofsd.patch
deleted file mode 100644
index d80f3de..0000000
--- a/SOURCES/libvirt-qemu-add-code-for-handling-virtiofsd.patch
+++ /dev/null
@@ -1,528 +0,0 @@
-From d4f90466fc4685b72ae9ca4bae1d022c04f0e2be Mon Sep 17 00:00:00 2001
-Message-Id: <d4f90466fc4685b72ae9ca4bae1d022c04f0e2be@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:46 +0100
-Subject: [PATCH] qemu: add code for handling virtiofsd
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Start virtiofsd for each <filesystem> device using it.
-
-Pre-create the socket for communication with QEMU and pass it
-to virtiofsd.
-
-Note that virtiofsd needs to run as root.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-
-Introduced by QEMU commit a43efa34c7d7b628cbf1ec0fe60043e5c91043ea
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit f0f986efa8a8e352fbdce7079ec440a4f3c8f522)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <78ba169fbe59c5307db462ad78b65b06776d64a6.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- po/POTFILES.in            |   1 +
- src/qemu/Makefile.inc.am  |   2 +
- src/qemu/qemu_domain.c    |   5 +-
- src/qemu/qemu_domain.h    |   2 +-
- src/qemu/qemu_extdevice.c |  20 ++-
- src/qemu/qemu_virtiofs.c  | 301 ++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_virtiofs.h  |  37 +++++
- tests/qemuxml2argvtest.c  |  11 ++
- 8 files changed, 376 insertions(+), 3 deletions(-)
- create mode 100644 src/qemu/qemu_virtiofs.c
- create mode 100644 src/qemu/qemu_virtiofs.h
-
-diff --git a/po/POTFILES.in b/po/POTFILES.in
-index faf173584e..29984042f4 100644
---- a/po/POTFILES.in
-+++ b/po/POTFILES.in
-@@ -169,6 +169,7 @@
- @SRCDIR@/src/qemu/qemu_tpm.c
- @SRCDIR@/src/qemu/qemu_vhost_user.c
- @SRCDIR@/src/qemu/qemu_vhost_user_gpu.c
-+@SRCDIR@/src/qemu/qemu_virtiofs.c
- @SRCDIR@/src/remote/remote_daemon.c
- @SRCDIR@/src/remote/remote_daemon_config.c
- @SRCDIR@/src/remote/remote_daemon_dispatch.c
-diff --git a/src/qemu/Makefile.inc.am b/src/qemu/Makefile.inc.am
-index 967f6e75a2..77786526ea 100644
---- a/src/qemu/Makefile.inc.am
-+++ b/src/qemu/Makefile.inc.am
-@@ -67,6 +67,8 @@ QEMU_DRIVER_SOURCES = \
- 	qemu/qemu_vhost_user.h \
- 	qemu/qemu_vhost_user_gpu.c \
- 	qemu/qemu_vhost_user_gpu.h \
-+	qemu/qemu_virtiofs.c \
-+	qemu/qemu_virtiofs.h \
- 	qemu/qemu_checkpoint.c \
- 	qemu/qemu_checkpoint.h \
- 	qemu/qemu_backup.c \
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 79d8de2e42..3cbe7ef6e1 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1440,8 +1440,11 @@ qemuDomainFSPrivateNew(void)
- 
- 
- static void
--qemuDomainFSPrivateDispose(void *obj G_GNUC_UNUSED)
-+qemuDomainFSPrivateDispose(void *obj)
- {
-+    qemuDomainFSPrivatePtr priv = obj;
-+
-+    g_free(priv->vhostuser_fs_sock);
- }
- 
- static virClassPtr qemuDomainVideoPrivateClass;
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index c581b3a162..83150e4e6d 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -568,7 +568,7 @@ typedef qemuDomainFSPrivate *qemuDomainFSPrivatePtr;
- struct _qemuDomainFSPrivate {
-     virObject parent;
- 
--    int dummy;
-+    char *vhostuser_fs_sock;
- };
- 
- 
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index bb73787b8d..bfa770f45a 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -20,11 +20,13 @@
- 
- #include <config.h>
- 
-+#include "qemu_command.h"
- #include "qemu_extdevice.h"
- #include "qemu_vhost_user_gpu.h"
- #include "qemu_domain.h"
- #include "qemu_tpm.h"
- #include "qemu_slirp.h"
-+#include "qemu_virtiofs.h"
- 
- #include "viralloc.h"
- #include "virlog.h"
-@@ -153,7 +155,7 @@ qemuExtDevicesCleanupHost(virQEMUDriverPtr driver,
- int
- qemuExtDevicesStart(virQEMUDriverPtr driver,
-                     virDomainObjPtr vm,
--                    virLogManagerPtr logManager G_GNUC_UNUSED,
-+                    virLogManagerPtr logManager,
-                     bool incomingMigration)
- {
-     virDomainDefPtr def = vm->def;
-@@ -183,6 +185,15 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
-             return -1;
-     }
- 
-+    for (i = 0; i < def->nfss; i++) {
-+        virDomainFSDefPtr fs = def->fss[i];
-+
-+        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
-+            if (qemuVirtioFSStart(logManager, driver, vm, fs) < 0)
-+                return -1;
-+        }
-+    }
-+
-     return 0;
- }
- 
-@@ -214,6 +225,13 @@ qemuExtDevicesStop(virQEMUDriverPtr driver,
-         if (slirp)
-             qemuSlirpStop(slirp, vm, driver, net, false);
-     }
-+
-+    for (i = 0; i < def->nfss; i++) {
-+        virDomainFSDefPtr fs = def->fss[i];
-+
-+        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS)
-+            qemuVirtioFSStop(driver, vm, fs);
-+    }
- }
- 
- 
-diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
-new file mode 100644
-index 0000000000..09ab2cef27
---- /dev/null
-+++ b/src/qemu/qemu_virtiofs.c
-@@ -0,0 +1,301 @@
-+/*
-+ * qemu_virtiofs.c: virtiofs support
-+ *
-+ * 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 <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+
-+#include "logging/log_manager.h"
-+#include "virlog.h"
-+#include "qemu_command.h"
-+#include "qemu_conf.h"
-+#include "qemu_extdevice.h"
-+#include "qemu_security.h"
-+#include "qemu_virtiofs.h"
-+#include "virpidfile.h"
-+#include "virqemu.h"
-+#include "virutil.h"
-+
-+#define VIR_FROM_THIS VIR_FROM_QEMU
-+
-+
-+char *
-+qemuVirtioFSCreatePidFilename(virDomainObjPtr vm,
-+                              const char *alias)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    g_autofree char *shortName = NULL;
-+    g_autofree char *name = NULL;
-+
-+    if (!(shortName = virDomainDefGetShortName(vm->def)))
-+        return NULL;
-+
-+    name = g_strdup_printf("%s-%s-virtiofsd", shortName, alias);
-+
-+    return virPidFileBuildPath(priv->libDir, name);
-+}
-+
-+
-+char *
-+qemuVirtioFSCreateSocketFilename(virDomainObjPtr vm,
-+                                 const char *alias)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+
-+    return virFileBuildPath(priv->libDir, alias, "-virtiofsd.sock");
-+}
-+
-+
-+static char *
-+qemuVirtioFSCreateLogFilename(virQEMUDriverConfigPtr cfg,
-+                              const virDomainDef *def,
-+                              const char *alias)
-+{
-+    g_autofree char *name = NULL;
-+
-+    name = g_strdup_printf("%s-%s", def->name, alias);
-+
-+    return virFileBuildPath(cfg->logDir, name, "-virtiofsd.log");
-+}
-+
-+
-+static int
-+qemuVirtioFSOpenChardev(virQEMUDriverPtr driver,
-+                        virDomainObjPtr vm,
-+                        const char *socket_path)
-+{
-+    virDomainChrSourceDefPtr chrdev = virDomainChrSourceDefNew(NULL);
-+    virDomainChrDef chr = { .source = chrdev };
-+    VIR_AUTOCLOSE fd = -1;
-+    int ret = -1;
-+
-+    chrdev->type = VIR_DOMAIN_CHR_TYPE_UNIX;
-+    chrdev->data.nix.listen = true;
-+    chrdev->data.nix.path = g_strdup(socket_path);
-+
-+    if (qemuSecuritySetDaemonSocketLabel(driver->securityManager, vm->def) < 0)
-+        goto cleanup;
-+    fd = qemuOpenChrChardevUNIXSocket(chrdev);
-+    if (fd < 0) {
-+        ignore_value(qemuSecurityClearSocketLabel(driver->securityManager, vm->def));
-+        goto cleanup;
-+    }
-+    if (qemuSecurityClearSocketLabel(driver->securityManager, vm->def) < 0)
-+        goto cleanup;
-+
-+    if (qemuSecuritySetChardevLabel(driver, vm, &chr) < 0)
-+        goto cleanup;
-+
-+    ret = fd;
-+    fd = -1;
-+
-+ cleanup:
-+    virObjectUnref(chrdev);
-+    return ret;
-+}
-+
-+
-+static virCommandPtr
-+qemuVirtioFSBuildCommandLine(virQEMUDriverConfigPtr cfg,
-+                             virDomainFSDefPtr fs,
-+                             int *fd)
-+{
-+    g_autoptr(virCommand) cmd = NULL;
-+    g_auto(virBuffer) opts = VIR_BUFFER_INITIALIZER;
-+
-+    if (!(cmd = virCommandNew(fs->binary)))
-+        return NULL;
-+
-+    virCommandAddArgFormat(cmd, "--fd=%d", *fd);
-+    virCommandPassFD(cmd, *fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
-+    *fd = -1;
-+
-+    virCommandAddArg(cmd, "-o");
-+    virBufferAddLit(&opts, "source=");
-+    virQEMUBuildBufferEscapeComma(&opts, fs->src->path);
-+    if (fs->cache)
-+        virBufferAsprintf(&opts, ",cache=%s", virDomainFSCacheModeTypeToString(fs->cache));
-+
-+    if (fs->xattr == VIR_TRISTATE_SWITCH_ON)
-+        virBufferAddLit(&opts, ",xattr");
-+    else if (fs->xattr == VIR_TRISTATE_SWITCH_OFF)
-+        virBufferAddLit(&opts, ",no_xattr");
-+
-+    if (fs->flock == VIR_TRISTATE_SWITCH_ON)
-+        virBufferAddLit(&opts, ",flock");
-+    else if (fs->flock == VIR_TRISTATE_SWITCH_OFF)
-+        virBufferAddLit(&opts, ",no_flock");
-+
-+    if (fs->posix_lock == VIR_TRISTATE_SWITCH_ON)
-+        virBufferAddLit(&opts, ",posix_lock");
-+    else if (fs->posix_lock == VIR_TRISTATE_SWITCH_OFF)
-+        virBufferAddLit(&opts, ",no_posix_lock");
-+
-+    virCommandAddArgBuffer(cmd, &opts);
-+    if (cfg->virtiofsdDebug)
-+        virCommandAddArg(cmd, "-d");
-+
-+    return g_steal_pointer(&cmd);
-+}
-+
-+int
-+qemuVirtioFSStart(virLogManagerPtr logManager,
-+                  virQEMUDriverPtr driver,
-+                  virDomainObjPtr vm,
-+                  virDomainFSDefPtr fs)
-+{
-+    g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-+    g_autoptr(virCommand) cmd = NULL;
-+    g_autofree char *socket_path = NULL;
-+    g_autofree char *pidfile = NULL;
-+    g_autofree char *logpath = NULL;
-+    pid_t pid = (pid_t) -1;
-+    VIR_AUTOCLOSE fd = -1;
-+    VIR_AUTOCLOSE logfd = -1;
-+    int ret = -1;
-+    int rc;
-+
-+    if (!virFileExists(fs->src->path)) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("the virtiofs export directory '%s' does not exist"),
-+                       fs->src->path);
-+        return -1;
-+    }
-+
-+    if (!(pidfile = qemuVirtioFSCreatePidFilename(vm, fs->info.alias)))
-+        goto cleanup;
-+
-+    if (!(socket_path = qemuVirtioFSCreateSocketFilename(vm, fs->info.alias)))
-+        goto cleanup;
-+
-+    if ((fd = qemuVirtioFSOpenChardev(driver, vm, socket_path)) < 0)
-+        goto cleanup;
-+
-+    logpath = qemuVirtioFSCreateLogFilename(cfg, vm->def, fs->info.alias);
-+
-+    if (cfg->stdioLogD) {
-+        if ((logfd = virLogManagerDomainOpenLogFile(logManager,
-+                                                    "qemu",
-+                                                    vm->def->uuid,
-+                                                    vm->def->name,
-+                                                    logpath,
-+                                                    0,
-+                                                    NULL, NULL)) < 0)
-+            goto cleanup;
-+    } else {
-+        if ((logfd = open(logpath, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) < 0) {
-+            virReportSystemError(errno, _("failed to create logfile %s"),
-+                                 logpath);
-+            goto cleanup;
-+        }
-+        if (virSetCloseExec(logfd) < 0) {
-+            virReportSystemError(errno, _("failed to set close-on-exec flag on %s"),
-+                                 logpath);
-+            goto error;
-+        }
-+    }
-+
-+    if (!(cmd = qemuVirtioFSBuildCommandLine(cfg, fs, &fd)))
-+        goto cleanup;
-+
-+    /* so far only running as root is supported */
-+    virCommandSetUID(cmd, 0);
-+    virCommandSetGID(cmd, 0);
-+
-+    virCommandSetPidFile(cmd, pidfile);
-+    virCommandSetOutputFD(cmd, &logfd);
-+    virCommandSetErrorFD(cmd, &logfd);
-+    virCommandNonblockingFDs(cmd);
-+    virCommandDaemonize(cmd);
-+
-+    if (qemuExtDeviceLogCommand(driver, vm, cmd, "virtiofsd") < 0)
-+        goto cleanup;
-+
-+    rc = virCommandRun(cmd, NULL);
-+
-+    if (rc < 0) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-+                       _("Could not start 'virtiofsd'"));
-+        goto error;
-+    }
-+
-+    rc = virPidFileReadPath(pidfile, &pid);
-+    if (rc < 0) {
-+        virReportSystemError(-rc,
-+                             _("Unable to read virtiofsd pidfile '%s'"),
-+                             pidfile);
-+        goto error;
-+    }
-+
-+    if (virProcessKill(pid, 0) != 0) {
-+        virReportSystemError(errno, "%s",
-+                             _("virtiofsd died unexpectedly"));
-+        goto error;
-+    }
-+
-+    QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = g_steal_pointer(&socket_path);
-+    ret = 0;
-+
-+ cleanup:
-+    if (socket_path)
-+        unlink(socket_path);
-+    return ret;
-+
-+ error:
-+    if (pid != -1)
-+        virProcessKillPainfully(pid, true);
-+    if (pidfile)
-+        unlink(pidfile);
-+    goto cleanup;
-+}
-+
-+
-+void
-+qemuVirtioFSStop(virQEMUDriverPtr driver G_GNUC_UNUSED,
-+                    virDomainObjPtr vm,
-+                    virDomainFSDefPtr fs)
-+{
-+    g_autofree char *pidfile = NULL;
-+    virErrorPtr orig_err;
-+    pid_t pid = -1;
-+    int rc;
-+
-+    virErrorPreserveLast(&orig_err);
-+
-+    if (!(pidfile = qemuVirtioFSCreatePidFilename(vm, fs->info.alias)))
-+        goto cleanup;
-+
-+    rc = virPidFileReadPathIfAlive(pidfile, &pid, NULL);
-+    if (rc >= 0 && pid != (pid_t) -1)
-+        virProcessKillPainfully(pid, true);
-+
-+    if (unlink(pidfile) < 0 &&
-+        errno != ENOENT) {
-+        virReportSystemError(errno,
-+                             _("Unable to remove stale pidfile %s"),
-+                             pidfile);
-+    }
-+
-+    if (QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock)
-+        unlink(QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock);
-+
-+ cleanup:
-+    virErrorRestore(&orig_err);
-+}
-diff --git a/src/qemu/qemu_virtiofs.h b/src/qemu/qemu_virtiofs.h
-new file mode 100644
-index 0000000000..b2f0c57d0c
---- /dev/null
-+++ b/src/qemu/qemu_virtiofs.h
-@@ -0,0 +1,37 @@
-+/*
-+ * qemu_virtiofs.h: virtiofs support
-+ *
-+ * 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/>.
-+ */
-+
-+#pragma once
-+
-+
-+char *
-+qemuVirtioFSCreatePidFilename(virDomainObjPtr vm,
-+                              const char *alias);
-+char *
-+qemuVirtioFSCreateSocketFilename(virDomainObjPtr vm,
-+                                 const char *alias);
-+
-+int
-+qemuVirtioFSStart(virLogManagerPtr logManager,
-+                  virQEMUDriverPtr driver,
-+                  virDomainObjPtr vm,
-+                  virDomainFSDefPtr fs);
-+void
-+qemuVirtioFSStop(virQEMUDriverPtr driver,
-+                 virDomainObjPtr vm,
-+                 virDomainFSDefPtr fs);
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 8215935bab..a391823090 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -496,6 +496,17 @@ testCompareXMLToArgv(const void *data)
-         }
-     }
- 
-+    for (i = 0; i < vm->def->nfss; i++) {
-+        virDomainFSDefPtr fs = vm->def->fss[i];
-+        char *s;
-+
-+        if (fs->fsdriver != VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS)
-+            continue;
-+
-+        s = g_strdup_printf("/tmp/lib/domain--1-guest/fs%zu.vhost-fs.sock", i);
-+        QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock = s;
-+    }
-+
-     if (vm->def->vsock) {
-         virDomainVsockDefPtr vsock = vm->def->vsock;
-         qemuDomainVsockPrivatePtr vsockPriv =
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-add-support-for-specifying-CPU-dies-topology-parameter.patch b/SOURCES/libvirt-qemu-add-support-for-specifying-CPU-dies-topology-parameter.patch
deleted file mode 100644
index 9656320..0000000
--- a/SOURCES/libvirt-qemu-add-support-for-specifying-CPU-dies-topology-parameter.patch
+++ /dev/null
@@ -1,382 +0,0 @@
-From 2527410246c5d9f0642087fbd894fdba8d8fa906 Mon Sep 17 00:00:00 2001
-Message-Id: <2527410246c5d9f0642087fbd894fdba8d8fa906@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Mon, 3 Feb 2020 18:07:24 +0000
-Subject: [PATCH] qemu: add support for specifying CPU "dies" topology
- parameter
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-QEMU since 4.1.0 supports the "dies" parameter for -smp
-
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 4cf8dd0c57330e9141333a1b9f4e318e3c83a289)
-
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785207
-Message-Id: <20200203180726.2203691-4-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_capabilities.c                  |  2 ++
- src/qemu/qemu_capabilities.h                  |  1 +
- src/qemu/qemu_command.c                       |  9 +++--
- .../caps_4.1.0.x86_64.xml                     |  1 +
- .../caps_4.2.0.aarch64.xml                    |  1 +
- .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml |  1 +
- .../qemucapabilitiesdata/caps_4.2.0.s390x.xml |  1 +
- .../caps_4.2.0.x86_64.xml                     |  1 +
- .../hugepages-nvdimm.x86_64-latest.args       |  2 +-
- ...memory-default-hugepage.x86_64-latest.args |  2 +-
- .../memfd-memory-numa.x86_64-latest.args      |  2 +-
- ...y-hotplug-nvdimm-access.x86_64-latest.args |  2 +-
- ...ry-hotplug-nvdimm-align.x86_64-latest.args |  2 +-
- ...ry-hotplug-nvdimm-label.x86_64-latest.args |  2 +-
- ...ory-hotplug-nvdimm-pmem.x86_64-latest.args |  2 +-
- ...hotplug-nvdimm-readonly.x86_64-latest.args |  2 +-
- .../memory-hotplug-nvdimm.x86_64-latest.args  |  2 +-
- tests/qemuxml2argvdata/smp-dies.args          | 29 ++++++++++++++++
- tests/qemuxml2argvdata/smp-dies.xml           | 33 +++++++++++++++++++
- tests/qemuxml2argvtest.c                      |  1 +
- 20 files changed, 86 insertions(+), 12 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/smp-dies.args
- create mode 100644 tests/qemuxml2argvdata/smp-dies.xml
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index edefb70309..893fc5a1bb 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -553,6 +553,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "blockdev-file-dynamic-auto-read-only",
-               "savevm-monitor-nodes",
-               "drive-nvme",
-+              "smp-dies",
-     );
- 
- 
-@@ -3097,6 +3098,7 @@ static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = {
-     { "sandbox", "elevateprivileges", QEMU_CAPS_SECCOMP_BLACKLIST },
-     { "chardev", "fd", QEMU_CAPS_CHARDEV_FD_PASS },
-     { "overcommit", NULL, QEMU_CAPS_OVERCOMMIT },
-+    { "smp-opts", "dies", QEMU_CAPS_SMP_DIES },
- };
- 
- static int
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index d76c1dbfa9..5ec8901bb3 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -534,6 +534,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_BLOCK_FILE_AUTO_READONLY_DYNAMIC, /* the auto-read-only property of block backends for files is dynamic */
-     QEMU_CAPS_SAVEVM_MONITOR_NODES, /* 'savevm' handles monitor-owned nodes properly */
-     QEMU_CAPS_DRIVE_NVME, /* -drive file.driver=nvme */
-+    QEMU_CAPS_SMP_DIES, /*  -smp dies= */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index d7e8216092..7a184c229e 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -7105,7 +7105,8 @@ qemuBuildTSEGCommandLine(virCommandPtr cmd,
- 
- static int
- qemuBuildSmpCommandLine(virCommandPtr cmd,
--                        virDomainDefPtr def)
-+                        virDomainDefPtr def,
-+                        virQEMUCapsPtr qemuCaps)
- {
-     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-     unsigned int maxvcpus = virDomainDefGetVcpusMax(def);
-@@ -7130,12 +7131,14 @@ qemuBuildSmpCommandLine(virCommandPtr cmd,
-     /* sockets, cores, and threads are either all zero
-      * or all non-zero, thus checking one of them is enough */
-     if (def->cpu && def->cpu->sockets) {
--        if (def->cpu->dies != 1) {
-+        if (def->cpu->dies != 1 && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_DIES)) {
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                            _("Only 1 die per socket is supported"));
-             return -1;
-         }
-         virBufferAsprintf(&buf, ",sockets=%u", def->cpu->sockets);
-+        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SMP_DIES))
-+            virBufferAsprintf(&buf, ",dies=%u", def->cpu->dies);
-         virBufferAsprintf(&buf, ",cores=%u", def->cpu->cores);
-         virBufferAsprintf(&buf, ",threads=%u", def->cpu->threads);
-     } else {
-@@ -9823,7 +9826,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
-     if (qemuBuildMemCommandLine(cmd, cfg, def, qemuCaps, priv) < 0)
-         return NULL;
- 
--    if (qemuBuildSmpCommandLine(cmd, def) < 0)
-+    if (qemuBuildSmpCommandLine(cmd, def, qemuCaps) < 0)
-         return NULL;
- 
-     if (qemuBuildIOThreadCommandLine(cmd, def) < 0)
-diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-index a98945de0e..54b797a86a 100644
---- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
-@@ -215,6 +215,7 @@
-   <flag name='ramfb'/>
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-   <version>4001000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100241</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-index a6469073fd..184bb7ff77 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
-@@ -175,6 +175,7 @@
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='savevm-monitor-nodes'/>
-   <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>61700242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-index ee9fb23640..7c62546d74 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
-@@ -176,6 +176,7 @@
-   <flag name='machine.pseries.cap-ccf-assist'/>
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>42900242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-index fdf5cb4ce9..c8746f05ef 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
-@@ -135,6 +135,7 @@
-   <flag name='query-cpu-model-comparison'/>
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-   <version>4001050</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>39100242</microcodeVersion>
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-index 4857e2f5a5..afd59a269d 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
-@@ -218,6 +218,7 @@
-   <flag name='blockdev-file-dynamic-auto-read-only'/>
-   <flag name='savevm-monitor-nodes'/>
-   <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-   <version>4002000</version>
-   <kvmVersion>0</kvmVersion>
-   <microcodeVersion>43100242</microcodeVersion>
-diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
-index 9056e56cb7..0d795dca91 100644
---- a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=1048576k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -object memory-backend-file,id=ram-node0,prealloc=yes,\
- mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=yes,size=1073741824 \
- -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
-diff --git a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args
-index 998c9f98bd..a655fb1f7c 100644
---- a/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memfd-memory-default-hugepage.x86_64-latest.args
-@@ -16,7 +16,7 @@ file=/tmp/lib/domain--1-instance-00000092/master-key.aes \
- -m 14336 \
- -mem-prealloc \
- -overcommit mem-lock=off \
---smp 8,sockets=1,cores=8,threads=1 \
-+-smp 8,sockets=1,dies=1,cores=8,threads=1 \
- -object memory-backend-memfd,id=ram-node0,hugetlb=yes,hugetlbsize=2097152,\
- share=yes,size=15032385536,host-nodes=3,policy=preferred \
- -numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
-diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
-index 998c9f98bd..a655fb1f7c 100644
---- a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
-@@ -16,7 +16,7 @@ file=/tmp/lib/domain--1-instance-00000092/master-key.aes \
- -m 14336 \
- -mem-prealloc \
- -overcommit mem-lock=off \
---smp 8,sockets=1,cores=8,threads=1 \
-+-smp 8,sockets=1,dies=1,cores=8,threads=1 \
- -object memory-backend-memfd,id=ram-node0,hugetlb=yes,hugetlbsize=2097152,\
- share=yes,size=15032385536,host-nodes=3,policy=preferred \
- -numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
-index beac9ab22a..c8a6ec5755 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=219136k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -numa node,nodeid=0,cpus=0-1,mem=214 \
- -object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
- share=no,size=536870912 \
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
-index 3e599098f0..60e9e80039 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=219136k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -numa node,nodeid=0,cpus=0-1,mem=214 \
- -object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
- share=no,size=536870912,align=2097152 \
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
-index 05a473dbcc..8c5e483cbb 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=219136k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -numa node,nodeid=0,cpus=0-1,mem=214 \
- -object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
- share=no,size=536870912 \
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
-index c3554ac101..7f77ab9fce 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=219136k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -numa node,nodeid=0,cpus=0-1,mem=214 \
- -object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
- share=no,size=536870912,pmem=on \
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
-index e1d3fc57a4..631835a380 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=219136k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -numa node,nodeid=0,cpus=0-1,mem=214 \
- -object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
- share=no,size=536870912 \
-diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
-index dc6ddd3a0e..48221a5526 100644
---- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
-@@ -15,7 +15,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -machine pc,accel=tcg,usb=off,dump-guest-core=off,nvdimm=on \
- -m size=1048576k,slots=16,maxmem=1099511627776k \
- -overcommit mem-lock=off \
---smp 2,sockets=2,cores=1,threads=1 \
-+-smp 2,sockets=2,dies=1,cores=1,threads=1 \
- -numa node,nodeid=0,cpus=0-1,mem=1024 \
- -object memory-backend-file,id=memnvdimm0,prealloc=yes,mem-path=/tmp/nvdimm,\
- size=536870912 \
-diff --git a/tests/qemuxml2argvdata/smp-dies.args b/tests/qemuxml2argvdata/smp-dies.args
-new file mode 100644
-index 0000000000..632e9d8e34
---- /dev/null
-+++ b/tests/qemuxml2argvdata/smp-dies.args
-@@ -0,0 +1,29 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest1 \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-i386 \
-+-name QEMUGuest1 \
-+-S \
-+-machine pc,accel=tcg,usb=off,dump-guest-core=off \
-+-m 214 \
-+-realtime mlock=off \
-+-smp 1,maxcpus=4,sockets=2,dies=2,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-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1
-diff --git a/tests/qemuxml2argvdata/smp-dies.xml b/tests/qemuxml2argvdata/smp-dies.xml
-new file mode 100644
-index 0000000000..caadaef8b5
---- /dev/null
-+++ b/tests/qemuxml2argvdata/smp-dies.xml
-@@ -0,0 +1,33 @@
-+<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' current='1'>4</vcpu>
-+  <os>
-+    <type arch='i686' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <cpu>
-+    <topology sockets='2' dies='2' cores='1' threads='1'/>
-+  </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-i386</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'/>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 58b4deefc6..b923590930 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1689,6 +1689,7 @@ mymain(void)
-     DO_TEST("qemu-ns-alt", NONE);
- 
-     DO_TEST("smp", NONE);
-+    DO_TEST("smp-dies", QEMU_CAPS_SMP_DIES);
- 
-     DO_TEST("iothreads", QEMU_CAPS_OBJECT_IOTHREAD);
-     DO_TEST("iothreads-ids", QEMU_CAPS_OBJECT_IOTHREAD);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-add-virtiofsd_debug-to-qemu.conf.patch b/SOURCES/libvirt-qemu-add-virtiofsd_debug-to-qemu.conf.patch
deleted file mode 100644
index 157f3e5..0000000
--- a/SOURCES/libvirt-qemu-add-virtiofsd_debug-to-qemu.conf.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 26d83d4f99fbdebf9546ebb883535a85dda2fbad Mon Sep 17 00:00:00 2001
-Message-Id: <26d83d4f99fbdebf9546ebb883535a85dda2fbad@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:43 +0100
-Subject: [PATCH] qemu: add virtiofsd_debug to qemu.conf
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a 'virtiofsd_debug' option for tuning whether to run virtiofsd
-in debug mode.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit f04319a5449974f1553458e96c2a6ee25e65ab93)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <6e46af8184e9e982a6aca92a62534623795bb1fc.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/libvirtd_qemu.aug         | 1 +
- src/qemu/qemu.conf                 | 7 +++++++
- src/qemu/qemu_conf.c               | 2 ++
- src/qemu/qemu_conf.h               | 1 +
- src/qemu/test_libvirtd_qemu.aug.in | 1 +
- 5 files changed, 12 insertions(+)
-
-diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug
-index 557b6f38f8..3014fa6b86 100644
---- a/src/qemu/libvirtd_qemu.aug
-+++ b/src/qemu/libvirtd_qemu.aug
-@@ -116,6 +116,7 @@ module Libvirtd_qemu =
-    let nvram_entry = str_array_entry "nvram"
- 
-    let debug_level_entry = int_entry "gluster_debug_level"
-+                 | bool_entry "virtiofsd_debug"
- 
-    let memory_entry = str_entry "memory_backing_dir"
- 
-diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
-index b6805ffc41..815d2d78ae 100644
---- a/src/qemu/qemu.conf
-+++ b/src/qemu/qemu.conf
-@@ -809,6 +809,13 @@
- #
- #gluster_debug_level = 9
- 
-+# virtiofsd debug
-+#
-+# Whether to enable the debugging output of the virtiofsd daemon.
-+# Possible values are 0 or 1. Disabled by default.
-+#
-+#virtiofsd_debug = 1
-+
- # To enhance security, QEMU driver is capable of creating private namespaces
- # for each domain started. Well, so far only "mount" namespace is supported. If
- # enabled it means qemu process is unable to see all the devices on the system,
-diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index 029996427e..7aaf2862a4 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -801,6 +801,8 @@ virQEMUDriverConfigLoadDebugEntry(virQEMUDriverConfigPtr cfg,
- {
-     if (virConfGetValueUInt(conf, "gluster_debug_level", &cfg->glusterDebugLevel) < 0)
-         return -1;
-+    if (virConfGetValueBool(conf, "virtiofsd_debug", &cfg->virtiofsdDebug) < 0)
-+        return -1;
- 
-     return 0;
- }
-diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
-index b9401635d7..4361f5b2bb 100644
---- a/src/qemu/qemu_conf.h
-+++ b/src/qemu/qemu_conf.h
-@@ -202,6 +202,7 @@ struct _virQEMUDriverConfig {
-     virFirmwarePtr *firmwares;
-     size_t nfirmwares;
-     unsigned int glusterDebugLevel;
-+    bool virtiofsdDebug;
- 
-     char *memoryBackingDir;
- 
-diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
-index dd90edf687..fca9a942c9 100644
---- a/src/qemu/test_libvirtd_qemu.aug.in
-+++ b/src/qemu/test_libvirtd_qemu.aug.in
-@@ -98,6 +98,7 @@ module Test_libvirtd_qemu =
- }
- { "stdio_handler" = "logd" }
- { "gluster_debug_level" = "9" }
-+{ "virtiofsd_debug" = "1" }
- { "namespaces"
-     { "1" = "mount" }
- }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-add-wait-unplug-to-qemu-migration-status-enum.patch b/SOURCES/libvirt-qemu-add-wait-unplug-to-qemu-migration-status-enum.patch
deleted file mode 100644
index b5163bd..0000000
--- a/SOURCES/libvirt-qemu-add-wait-unplug-to-qemu-migration-status-enum.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 614ff7c7faf6ad46bb3b44ff5b57e839b00af4a4 Mon Sep 17 00:00:00 2001
-Message-Id: <614ff7c7faf6ad46bb3b44ff5b57e839b00af4a4@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 30 Jan 2020 14:12:43 -0500
-Subject: [PATCH] qemu: add wait-unplug to qemu migration status enum
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Aside from itinerant error (actually warning) messages due to an
-unrecognized response from qemu, this isn't even necessary - the
-migration proceeds successfully to completion anyway.
-
-(I'm not sure where to see this status reported in the API though - do
-we need to add an extra state, or recognition of a new event somewhere?)
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 8a226ddb3602586a2ba2359afc4448c02f566a0e)
-
-https://bugzilla.redhat.com/1693587
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200130191244.24174-6-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_migration.c    | 1 +
- src/qemu/qemu_monitor.c      | 1 +
- src/qemu/qemu_monitor.h      | 1 +
- src/qemu/qemu_monitor_json.c | 1 +
- 4 files changed, 4 insertions(+)
-
-diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
-index 46612a3c84..b56ccbdc3c 100644
---- a/src/qemu/qemu_migration.c
-+++ b/src/qemu/qemu_migration.c
-@@ -1457,6 +1457,7 @@ qemuMigrationUpdateJobType(qemuDomainJobInfoPtr jobInfo)
-     case QEMU_MONITOR_MIGRATION_STATUS_SETUP:
-     case QEMU_MONITOR_MIGRATION_STATUS_ACTIVE:
-     case QEMU_MONITOR_MIGRATION_STATUS_CANCELLING:
-+    case QEMU_MONITOR_MIGRATION_STATUS_WAIT_UNPLUG:
-     case QEMU_MONITOR_MIGRATION_STATUS_LAST:
-         break;
-     }
-diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
-index ccd20b3740..4f547bf5ec 100644
---- a/src/qemu/qemu_monitor.c
-+++ b/src/qemu/qemu_monitor.c
-@@ -168,6 +168,7 @@ VIR_ENUM_IMPL(qemuMonitorMigrationStatus,
-               "device", "postcopy-active",
-               "completed", "failed",
-               "cancelling", "cancelled",
-+              "wait-unplug",
- );
- 
- VIR_ENUM_IMPL(qemuMonitorVMStatus,
-diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
-index 3f3b81cddd..cca2cdcb27 100644
---- a/src/qemu/qemu_monitor.h
-+++ b/src/qemu/qemu_monitor.h
-@@ -767,6 +767,7 @@ typedef enum {
-     QEMU_MONITOR_MIGRATION_STATUS_ERROR,
-     QEMU_MONITOR_MIGRATION_STATUS_CANCELLING,
-     QEMU_MONITOR_MIGRATION_STATUS_CANCELLED,
-+    QEMU_MONITOR_MIGRATION_STATUS_WAIT_UNPLUG,
- 
-     QEMU_MONITOR_MIGRATION_STATUS_LAST
- } qemuMonitorMigrationStatus;
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index e5164d218a..5d8c7e9b5e 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -3515,6 +3515,7 @@ qemuMonitorJSONGetMigrationStatsReply(virJSONValuePtr reply,
-     case QEMU_MONITOR_MIGRATION_STATUS_INACTIVE:
-     case QEMU_MONITOR_MIGRATION_STATUS_SETUP:
-     case QEMU_MONITOR_MIGRATION_STATUS_CANCELLED:
-+    case QEMU_MONITOR_MIGRATION_STATUS_WAIT_UNPLUG:
-     case QEMU_MONITOR_MIGRATION_STATUS_LAST:
-         break;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-agent-set-ifname-to-NULL-after-freeing.patch b/SOURCES/libvirt-qemu-agent-set-ifname-to-NULL-after-freeing.patch
deleted file mode 100644
index 4eabc76..0000000
--- a/SOURCES/libvirt-qemu-agent-set-ifname-to-NULL-after-freeing.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 1b7381da7db7092bf774779a610f153532efa5d4 Mon Sep 17 00:00:00 2001
-Message-Id: <1b7381da7db7092bf774779a610f153532efa5d4@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 29 Sep 2020 14:43:06 +0200
-Subject: [PATCH] qemu: agent: set ifname to NULL after freeing
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CVE-2020-25637
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
-Fixes: 0977b8aa071de550e1a013d35e2c72615e65d520
-Reviewed-by: Mauro Matteo Cascella <mcascell@redhat.com>
-(cherry picked from commit a63b48c5ecef077bf0f909a85f453a605600cf05)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-
-Conflicts: src/qemu/qemu_agent.c
-    Commit ee247e1d which switched virStringListFree
-    to g_strfreev is missing downstream.
-Message-Id: <01acbf07b5b165b89cc73a127fe7bda666bdf235.1601383236.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_agent.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index f13126aeee..968534b594 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -2192,6 +2192,7 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
- 
-         /* Has to be freed for each interface. */
-         virStringListFree(ifname);
-+        ifname = NULL;
- 
-         /* as well as IP address which - moreover -
-          * can be presented multiple times */
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-qemu-allow-migration-with-assigned-PCI-hostdev-if-teaming-is-set.patch b/SOURCES/libvirt-qemu-allow-migration-with-assigned-PCI-hostdev-if-teaming-is-set.patch
deleted file mode 100644
index b36e29f..0000000
--- a/SOURCES/libvirt-qemu-allow-migration-with-assigned-PCI-hostdev-if-teaming-is-set.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From a86311164657b4bc304705b1dd5cea3db83c7c12 Mon Sep 17 00:00:00 2001
-Message-Id: <a86311164657b4bc304705b1dd5cea3db83c7c12@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 30 Jan 2020 14:12:42 -0500
-Subject: [PATCH] qemu: allow migration with assigned PCI hostdev if <teaming>
- is set
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Normally a PCI hostdev can't be migrated, so
-qemuMigrationSrcIsAllowedHostdev() won't permit it. In the case of a a
-hostdev network interface that has <teaming type='transient'/> set,
-QEMU will automatically unplug the device prior to migration, and
-re-plug a corresponding device on the destination. This patch modifies
-qemuMigrationSrcIsAllowedHostdev() to allow domains with those devices
-to be migrated.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 2758f680b7d586baf084f340b153d7706b8ce12b)
-
-https://bugzilla.redhat.com/1693587
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200130191244.24174-5-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_migration.c | 52 ++++++++++++++++++++++++++++++++++++---
- 1 file changed, 48 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
-index 29d228a8d9..46612a3c84 100644
---- a/src/qemu/qemu_migration.c
-+++ b/src/qemu/qemu_migration.c
-@@ -1093,10 +1093,54 @@ qemuMigrationSrcIsAllowedHostdev(const virDomainDef *def)
-      * forbidden. */
-     for (i = 0; i < def->nhostdevs; i++) {
-         virDomainHostdevDefPtr hostdev = def->hostdevs[i];
--        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
--            hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) {
--            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
--                           _("domain has assigned non-USB host devices"));
-+        switch ((virDomainHostdevMode)hostdev->mode) {
-+        case VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES:
-+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                           _("cannot migrate a domain with <hostdev mode='capabilities'>"));
-+            return false;
-+
-+        case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS:
-+            switch ((virDomainHostdevSubsysType)hostdev->source.subsys.type) {
-+            case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB:
-+                /* USB devices can be "migrated" */
-+                continue;
-+
-+            case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
-+            case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST:
-+            case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV:
-+                virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-+                               _("cannot migrate a domain with <hostdev mode='subsystem' type='%s'>"),
-+                               virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type));
-+                return false;
-+
-+            case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
-+                /*
-+                 * if this is a network interface with <teaming
-+                 * type='transient'>, migration *is* allowed because
-+                 * the device will be auto-unplugged by QEMU during
-+                 * migration.
-+                 */
-+                if (hostdev->parentnet &&
-+                    hostdev->parentnet->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT) {
-+                    continue;
-+                }
-+
-+                /* all other PCI hostdevs can't be migrated */
-+                virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-+                               _("cannot migrate a domain with <hostdev mode='subsystem' type='%s'>"),
-+                               virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type));
-+                return false;
-+
-+            case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST:
-+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-+                               _("invalid hostdev subsystem type"));
-+                return false;
-+            }
-+            break;
-+
-+        case VIR_DOMAIN_HOSTDEV_MODE_LAST:
-+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-+                           _("invalid hostdev mode"));
-             return false;
-         }
-     }
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-avoid-launching-non-x86-guests-with-APIC-EOI-setting.patch b/SOURCES/libvirt-qemu-avoid-launching-non-x86-guests-with-APIC-EOI-setting.patch
deleted file mode 100644
index 4236c7f..0000000
--- a/SOURCES/libvirt-qemu-avoid-launching-non-x86-guests-with-APIC-EOI-setting.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From a809e7c5200c4089153768a047f85add0205c4bc Mon Sep 17 00:00:00 2001
-Message-Id: <a809e7c5200c4089153768a047f85add0205c4bc@dist-git>
-From: Daniel Henrique Barboza <danielhb413@gmail.com>
-Date: Mon, 30 Mar 2020 17:18:27 -0400
-Subject: [PATCH] qemu: avoid launching non-x86 guests with APIC-EOI setting
-
-The "<apic/>" feature, although it's available only for x86 guests,
-can be declared in the domain XML of other archs without errors.
-But setting its 'eoi' attribute will break QEMU. For "<apic eoi='on'/>",
-in a ppc64 guest:
-
-qemu-kvm: Expected key=value format, found +kvm_pv_eoi
-
-A similar error happens with eoi='off'.
-
-One can argue that it's better to simply forbid launching non-x86
-guests with "<apic/>" declared in the XML - it is a feature that
-the architecture doesn't support and this would make it clearer
-about it. This is sensible, but there are non-x86 guests that are
-running with "<apic/>" declared in the domain (and A LOT of guests
-running with "<acpi/>" for that matter, probably reminiscent of x86
-templates that were reused for other archs) that will stop working if we
-go this route.
-
-A more subtle approach is to detect if the 'eoi' element is being set
-for non-x86 guests and warn the user about it with a better error
-message than the one QEMU provides. This is the new error message
-when any value is set for the 'eoi' element in a ppc64 XML:
-
-error: unsupported configuration: The 'eoi' attribute of the 'apic'
-feature is not supported for architecture 'ppc64' or machine type
-'pseries'.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1236440
-
-Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit dbda73ff27cf185fb5db498cc4db281b2d76778d)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1829729
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20200330211827.951474-2-dbarboza@redhat.com>
-Reviewed-by: Andrea Bolognani <abologna@redhat.com>
----
- src/qemu/qemu_domain.c | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index bb28716ff0..8f746cdf13 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -5279,8 +5279,23 @@ qemuDomainDefValidateFeatures(const virDomainDef *def,
-             }
-             break;
- 
--        case VIR_DOMAIN_FEATURE_ACPI:
-         case VIR_DOMAIN_FEATURE_APIC:
-+            /* The kvm_pv_eoi feature is x86-only. */
-+            if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
-+                def->apic_eoi != VIR_TRISTATE_SWITCH_ABSENT &&
-+                !ARCH_IS_X86(def->os.arch)) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("The 'eoi' attribute of 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_PAE:
-         case VIR_DOMAIN_FEATURE_HAP:
-         case VIR_DOMAIN_FEATURE_VIRIDIAN:
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-backup-Fix-backup-of-disk-skipped-in-an-intermediate-checkpoint.patch b/SOURCES/libvirt-qemu-backup-Fix-backup-of-disk-skipped-in-an-intermediate-checkpoint.patch
deleted file mode 100644
index 2b5aa3d..0000000
--- a/SOURCES/libvirt-qemu-backup-Fix-backup-of-disk-skipped-in-an-intermediate-checkpoint.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 97a6adcb3ac735ff135469aa602c798fbc0b1491 Mon Sep 17 00:00:00 2001
-Message-Id: <97a6adcb3ac735ff135469aa602c798fbc0b1491@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:36 +0200
-Subject: [PATCH] qemu: backup: Fix backup of disk skipped in an intermediate
- checkpoint
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If a disk is not captured by one of the intermediate checkpoints the
-code would fail, but we can easily calculate the bitmaps to merge
-correctly by skipping over checkpoints which don't describe the disk.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit c89a44777fdf89b400878adcb03a3557bcec3f4e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <d0efe760e9f8049758691b7f66a7de41fce5c264.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 24 ++++++++++++++++++++++++
- tests/qemublocktest.c  |  6 ++++++
- 2 files changed, 30 insertions(+)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 400b711f79..adbf696de6 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -240,6 +240,30 @@ qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
-     for (incridx = 0; incremental[incridx]; incridx++) {
-         g_autoptr(virJSONValue) tmp = virJSONValueNewArray();
-         virStorageSourcePtr tmpsrc = NULL;
-+        virDomainCheckpointDefPtr chkdef = (virDomainCheckpointDefPtr) incremental[incridx];
-+        bool checkpoint_has_disk = false;
-+        size_t i;
-+
-+        for (i = 0; i < chkdef->ndisks; i++) {
-+            if (STRNEQ_NULLABLE(diskdst, chkdef->disks[i].name))
-+                continue;
-+
-+            if (chkdef->disks[i].type == VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+                checkpoint_has_disk = true;
-+
-+            break;
-+        }
-+
-+        if (!checkpoint_has_disk) {
-+            if (!incremental[incridx + 1]) {
-+                virReportError(VIR_ERR_INVALID_ARG,
-+                               _("disk '%s' not found in checkpoint '%s'"),
-+                               diskdst, incremental[incridx]->name);
-+                return NULL;
-+            }
-+
-+            continue;
-+        }
- 
-         if (qemuBackupGetBitmapMergeRange(n, incremental[incridx]->name,
-                                           &tmp, &tmpsrc, diskdst,
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index e461b3a23d..d15965d9eb 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -727,6 +727,12 @@ testQemuBackupGetIncrementalMoment(const char *name)
-     if (!(checkpoint = virDomainCheckpointDefNew()))
-         abort();
- 
-+    checkpoint->disks = g_new0(virDomainCheckpointDiskDef, 1);
-+    checkpoint->ndisks = 1;
-+
-+    checkpoint->disks[0].name = g_strdup("testdisk");
-+    checkpoint->disks[0].type = VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP;
-+
-     checkpoint->parent.name = g_strdup(name);
- 
-     return (virDomainMomentDefPtr) checkpoint;
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Fix-handling-of-backing-store-for-backup-target-images.patch b/SOURCES/libvirt-qemu-backup-Fix-handling-of-backing-store-for-backup-target-images.patch
deleted file mode 100644
index 58078d1..0000000
--- a/SOURCES/libvirt-qemu-backup-Fix-handling-of-backing-store-for-backup-target-images.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 14b1e4fc93ba1a87854aa1afaf519cc3accff4c6 Mon Sep 17 00:00:00 2001
-Message-Id: <14b1e4fc93ba1a87854aa1afaf519cc3accff4c6@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:34 +0200
-Subject: [PATCH] qemu: backup: Fix handling of backing store for backup target
- images
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We always tried to install backing store for the image even if it didn't
-make sense, e.g. for a full backup into a raw image. Additionally we
-didn't record the backing file into the qcow2 metadata so the image
-itself contained the diff of data but reading from it would be
-incomplete as it depends on the backing image.
-
-This patch fixes both issues by carefully installing the correct backing
-file when appropriate and also recording it into the metadata when
-creating the image.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1813310
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4aea6f42fe32175ce0cb9015913db536097130e4)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <8c4ebc06863aac1f75532b6633772944a6b0bd2a.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 26 ++++++++++++++++++++++----
- 1 file changed, 22 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 9a056fa407..5d18720f53 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -105,6 +105,8 @@ struct qemuBackupDiskData {
-     virDomainDiskDefPtr domdisk;
-     qemuBlockJobDataPtr blockjob;
-     virStorageSourcePtr store;
-+    virStorageSourcePtr terminator;
-+    virStorageSourcePtr backingStore;
-     char *incrementalBitmap;
-     qemuBlockStorageSourceChainDataPtr crdata;
-     bool labelled;
-@@ -146,6 +148,7 @@ qemuBackupDiskDataCleanupOne(virDomainObjPtr vm,
-         qemuBlockJobStartupFinalize(vm, dd->blockjob);
- 
-     qemuBlockStorageSourceChainDataFree(dd->crdata);
-+    virObjectUnref(dd->terminator);
- }
- 
- 
-@@ -295,6 +298,7 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-                              virDomainBackupDiskDefPtr backupdisk,
-                              struct qemuBackupDiskData *dd,
-                              virJSONValuePtr actions,
-+                             bool pull,
-                              virDomainMomentDefPtr *incremental,
-                              virHashTablePtr blockNamedNodeData,
-                              virQEMUDriverConfigPtr cfg)
-@@ -314,6 +318,19 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-     if (!dd->store->format)
-         dd->store->format = VIR_STORAGE_FILE_QCOW2;
- 
-+    /* calculate backing store to use:
-+     * push mode:
-+     *   full backups: no backing store
-+     *   incremental: original disk if format supports backing store
-+     * pull mode:
-+     *   both: original disk
-+     */
-+    if (pull || (incremental && dd->store->format >= VIR_STORAGE_FILE_BACKING)) {
-+        dd->backingStore = dd->domdisk->src;
-+    } else {
-+        dd->backingStore = dd->terminator = virStorageSourceNew();
-+    }
-+
-     if (qemuDomainStorageFileInit(priv->driver, vm, dd->store, dd->domdisk->src) < 0)
-         return -1;
- 
-@@ -337,7 +354,7 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
- 
-     /* use original disk as backing to prevent opening the backing chain */
-     if (!(dd->crdata = qemuBuildStorageSourceChainAttachPrepareBlockdevTop(dd->store,
--                                                                           dd->domdisk->src,
-+                                                                           dd->backingStore,
-                                                                            priv->qemuCaps)))
-         return -1;
- 
-@@ -398,6 +415,7 @@ qemuBackupDiskPrepareData(virDomainObjPtr vm,
-     struct qemuBackupDiskData *disks = NULL;
-     ssize_t ndisks = 0;
-     size_t i;
-+    bool pull = def->type == VIR_DOMAIN_BACKUP_TYPE_PULL;
- 
-     disks = g_new0(struct qemuBackupDiskData, def->ndisks);
- 
-@@ -410,12 +428,12 @@ qemuBackupDiskPrepareData(virDomainObjPtr vm,
- 
-         ndisks++;
- 
--        if (qemuBackupDiskPrepareDataOne(vm, backupdisk, dd, actions,
-+        if (qemuBackupDiskPrepareDataOne(vm, backupdisk, dd, actions, pull,
-                                          incremental, blockNamedNodeData,
-                                          cfg) < 0)
-             goto error;
- 
--        if (def->type == VIR_DOMAIN_BACKUP_TYPE_PULL) {
-+        if (pull) {
-             if (qemuBackupDiskPrepareDataOnePull(actions, dd) < 0)
-                 goto error;
-         } else {
-@@ -480,7 +498,7 @@ qemuBackupDiskPrepareOneStorage(virDomainObjPtr vm,
-                                                    dd->store, dd->domdisk->src) < 0)
-             return -1;
- 
--        if (qemuBlockStorageSourceCreate(vm, dd->store, NULL, NULL,
-+        if (qemuBlockStorageSourceCreate(vm, dd->store, dd->backingStore, NULL,
-                                          dd->crdata->srcdata[0],
-                                          QEMU_ASYNC_JOB_BACKUP) < 0)
-             return -1;
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Implement-support-for-backup-disk-bitmap-name-configuration.patch b/SOURCES/libvirt-qemu-backup-Implement-support-for-backup-disk-bitmap-name-configuration.patch
deleted file mode 100644
index 8871ea3..0000000
--- a/SOURCES/libvirt-qemu-backup-Implement-support-for-backup-disk-bitmap-name-configuration.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From fc87d33beca46597b7d413752a07f50af8579a6a Mon Sep 17 00:00:00 2001
-Message-Id: <fc87d33beca46597b7d413752a07f50af8579a6a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:42 +0100
-Subject: [PATCH] qemu: backup: Implement support for backup disk bitmap name
- configuration
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the user-configured name of the bitmap when merging the appropriate
-bitmaps for an incremental backup so that the user can see it as
-configured. Additionally expose the default bitmap name if nothing is
-configured.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 0c3792a155d79ecf39221b9856fa14fde183af91)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <0071b6d1293859c700344434e71e3b2f75ce6ffd.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 2cc0e6ab07..23518a5d40 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -322,7 +322,10 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-         return -1;
- 
-     if (incremental) {
--        dd->incrementalBitmap = g_strdup_printf("backup-%s", dd->domdisk->dst);
-+        if (dd->backupdisk->exportbitmap)
-+            dd->incrementalBitmap = g_strdup(dd->backupdisk->exportbitmap);
-+        else
-+            dd->incrementalBitmap = g_strdup_printf("backup-%s", dd->domdisk->dst);
- 
-         if (qemuBackupDiskPrepareOneBitmaps(dd, actions, incremental,
-                                             blockNamedNodeData) < 0)
-@@ -368,6 +371,10 @@ static int
- qemuBackupDiskPrepareDataOnePull(virJSONValuePtr actions,
-                                  struct qemuBackupDiskData *dd)
- {
-+    if (!dd->backupdisk->exportbitmap &&
-+        dd->incrementalBitmap)
-+        dd->backupdisk->exportbitmap = g_strdup(dd->incrementalBitmap);
-+
-     if (qemuMonitorTransactionBackup(actions,
-                                      dd->domdisk->src->nodeformat,
-                                      dd->blockjob->name,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Implement-support-for-backup-disk-export-name-configuration.patch b/SOURCES/libvirt-qemu-backup-Implement-support-for-backup-disk-export-name-configuration.patch
deleted file mode 100644
index a617dca..0000000
--- a/SOURCES/libvirt-qemu-backup-Implement-support-for-backup-disk-export-name-configuration.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From ca5b0a17880bd76c2965e86fa6b6ee93dec204b9 Mon Sep 17 00:00:00 2001
-Message-Id: <ca5b0a17880bd76c2965e86fa6b6ee93dec204b9@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:41 +0100
-Subject: [PATCH] qemu: backup: Implement support for backup disk export name
- configuration
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Pass the exportname as configured when exporting the image via NBD and
-fill it with the default if it's not configured.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit bce4ac55f8d3df9d649c74d2f35feeaad4422028)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <de4d8ed67fa09ec4016bcafb818f9ab704afb305.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index c47de2f4a8..2cc0e6ab07 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -548,9 +548,12 @@ qemuBackupBeginPullExportDisks(virDomainObjPtr vm,
-     for (i = 0; i < ndisks; i++) {
-         struct qemuBackupDiskData *dd = disks + i;
- 
-+        if (!dd->backupdisk->exportname)
-+            dd->backupdisk->exportname = g_strdup(dd->domdisk->dst);
-+
-         if (qemuMonitorNBDServerAdd(priv->mon,
-                                     dd->store->nodeformat,
--                                    dd->domdisk->dst,
-+                                    dd->backupdisk->exportname,
-                                     false,
-                                     dd->incrementalBitmap) < 0)
-             return -1;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Initialize-store-source-properly-and-just-once.patch b/SOURCES/libvirt-qemu-backup-Initialize-store-source-properly-and-just-once.patch
deleted file mode 100644
index c758c9d..0000000
--- a/SOURCES/libvirt-qemu-backup-Initialize-store-source-properly-and-just-once.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 7ffdca30e2d5c80e68846df2656efed0e13a81d4 Mon Sep 17 00:00:00 2001
-Message-Id: <7ffdca30e2d5c80e68846df2656efed0e13a81d4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:08 +0200
-Subject: [PATCH] qemu: backup: Initialize 'store' source properly and just
- once
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Two functions called in sequence both initialized the virStorageSource
-backing 'store' leading to a memleak.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2d26f8b710d259a3e164a2bea3c9f9dc0de9b419)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <0e2df46f3a2ffd182e21d54497bafcfc09b26b0d.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index c207d3b7d0..013a82e06d 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -269,9 +269,6 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-         dd->backingStore = dd->terminator = virStorageSourceNew();
-     }
- 
--    if (qemuDomainStorageFileInit(priv->driver, vm, dd->store, dd->domdisk->src) < 0)
--        return -1;
--
-     if (qemuDomainPrepareStorageSourceBlockdev(NULL, dd->store, priv, cfg) < 0)
-         return -1;
- 
-@@ -407,7 +404,7 @@ qemuBackupDiskPrepareOneStorage(virDomainObjPtr vm,
-             return -1;
-         }
- 
--        if (qemuDomainStorageFileInit(priv->driver, vm, dd->store, NULL) < 0)
-+        if (qemuDomainStorageFileInit(priv->driver, vm, dd->store, dd->domdisk->src) < 0)
-             return -1;
- 
-         dd->initialized = true;
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Move-fetching-of-checkpoint-list-for-incremental-backup.patch b/SOURCES/libvirt-qemu-backup-Move-fetching-of-checkpoint-list-for-incremental-backup.patch
deleted file mode 100644
index 1000fe4..0000000
--- a/SOURCES/libvirt-qemu-backup-Move-fetching-of-checkpoint-list-for-incremental-backup.patch
+++ /dev/null
@@ -1,213 +0,0 @@
-From 7dae651c45df86ce74b304535baf62013d7f527d Mon Sep 17 00:00:00 2001
-Message-Id: <7dae651c45df86ce74b304535baf62013d7f527d@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:38 +0200
-Subject: [PATCH] qemu: backup: Move fetching of checkpoint list for
- incremental backup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fetch the checkpoint list for every disk specifically based on the new
-per-disk 'incremental' field.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 15c5ed8ba64e26090174d296486eacfa240af53e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <485f9933893a9890f018889a76fc48654de2c58a.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 109 ++++++++++++++++++++---------------------
- 1 file changed, 53 insertions(+), 56 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index adbf696de6..13e2a7412b 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -173,6 +173,50 @@ qemuBackupDiskDataCleanup(virDomainObjPtr vm,
- }
- 
- 
-+/**
-+ * qemuBackupBeginCollectIncrementalCheckpoints:
-+ * @vm: domain object
-+ * @incrFrom: name of checkpoint representing starting point of incremental backup
-+ *
-+ * Returns a NULL terminated list of pointers to checkpoint definitions in
-+ * chronological order starting from the 'current' checkpoint until reaching
-+ * @incrFrom.
-+ */
-+static virDomainMomentDefPtr *
-+qemuBackupBeginCollectIncrementalCheckpoints(virDomainObjPtr vm,
-+                                             const char *incrFrom)
-+{
-+    virDomainMomentObjPtr n = virDomainCheckpointGetCurrent(vm->checkpoints);
-+    g_autofree virDomainMomentDefPtr *incr = NULL;
-+    size_t nincr = 0;
-+
-+    while (n) {
-+        virDomainMomentDefPtr def = n->def;
-+
-+        if (VIR_APPEND_ELEMENT_COPY(incr, nincr, def) < 0)
-+            return NULL;
-+
-+        if (STREQ(def->name, incrFrom)) {
-+            def = NULL;
-+            if (VIR_APPEND_ELEMENT_COPY(incr, nincr, def) < 0)
-+                return NULL;
-+
-+            return g_steal_pointer(&incr);
-+        }
-+
-+        if (!n->def->parent_name)
-+            break;
-+
-+        n = virDomainCheckpointFindByName(vm->checkpoints, n->def->parent_name);
-+    }
-+
-+    virReportError(VIR_ERR_OPERATION_INVALID,
-+                   _("could not locate checkpoint '%s' for incremental backup"),
-+                   incrFrom);
-+    return NULL;
-+}
-+
-+
- static int
- qemuBackupGetBitmapMergeRange(virStorageSourcePtr from,
-                               const char *bitmapname,
-@@ -334,11 +378,11 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-                              struct qemuBackupDiskData *dd,
-                              virJSONValuePtr actions,
-                              bool pull,
--                             virDomainMomentDefPtr *incremental,
-                              virHashTablePtr blockNamedNodeData,
-                              virQEMUDriverConfigPtr cfg)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-+    g_autofree virDomainMomentDefPtr *incremental = NULL;
- 
-     /* set data structure */
-     dd->backupdisk = backupdisk;
-@@ -360,7 +404,8 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-      * pull mode:
-      *   both: original disk
-      */
--    if (pull || (incremental && dd->store->format >= VIR_STORAGE_FILE_BACKING)) {
-+    if (pull || (dd->backupdisk->incremental &&
-+                 dd->store->format >= VIR_STORAGE_FILE_BACKING)) {
-         dd->backingStore = dd->domdisk->src;
-     } else {
-         dd->backingStore = dd->terminator = virStorageSourceNew();
-@@ -372,7 +417,10 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-     if (qemuDomainPrepareStorageSourceBlockdev(NULL, dd->store, priv, cfg) < 0)
-         return -1;
- 
--    if (incremental) {
-+    if (dd->backupdisk->incremental) {
-+        if (!(incremental = qemuBackupBeginCollectIncrementalCheckpoints(vm, dd->backupdisk->incremental)))
-+            return -1;
-+
-         if (dd->backupdisk->exportbitmap)
-             dd->incrementalBitmap = g_strdup(dd->backupdisk->exportbitmap);
-         else
-@@ -441,7 +489,6 @@ qemuBackupDiskPrepareDataOnePull(virJSONValuePtr actions,
- static ssize_t
- qemuBackupDiskPrepareData(virDomainObjPtr vm,
-                           virDomainBackupDefPtr def,
--                          virDomainMomentDefPtr *incremental,
-                           virHashTablePtr blockNamedNodeData,
-                           virJSONValuePtr actions,
-                           virQEMUDriverConfigPtr cfg,
-@@ -464,8 +511,7 @@ qemuBackupDiskPrepareData(virDomainObjPtr vm,
-         ndisks++;
- 
-         if (qemuBackupDiskPrepareDataOne(vm, backupdisk, dd, actions, pull,
--                                         incremental, blockNamedNodeData,
--                                         cfg) < 0)
-+                                         blockNamedNodeData, cfg) < 0)
-             goto error;
- 
-         if (pull) {
-@@ -622,50 +668,6 @@ qemuBackupBeginPullExportDisks(virDomainObjPtr vm,
- }
- 
- 
--/**
-- * qemuBackupBeginCollectIncrementalCheckpoints:
-- * @vm: domain object
-- * @incrFrom: name of checkpoint representing starting point of incremental backup
-- *
-- * Returns a NULL terminated list of pointers to checkpoint definitions in
-- * chronological order starting from the 'current' checkpoint until reaching
-- * @incrFrom.
-- */
--static virDomainMomentDefPtr *
--qemuBackupBeginCollectIncrementalCheckpoints(virDomainObjPtr vm,
--                                             const char *incrFrom)
--{
--    virDomainMomentObjPtr n = virDomainCheckpointGetCurrent(vm->checkpoints);
--    g_autofree virDomainMomentDefPtr *incr = NULL;
--    size_t nincr = 0;
--
--    while (n) {
--        virDomainMomentDefPtr def = n->def;
--
--        if (VIR_APPEND_ELEMENT_COPY(incr, nincr, def) < 0)
--            return NULL;
--
--        if (STREQ(def->name, incrFrom)) {
--            def = NULL;
--            if (VIR_APPEND_ELEMENT_COPY(incr, nincr, def) < 0)
--                return NULL;
--
--            return g_steal_pointer(&incr);
--        }
--
--        if (!n->def->parent_name)
--            break;
--
--        n = virDomainCheckpointFindByName(vm->checkpoints, n->def->parent_name);
--    }
--
--    virReportError(VIR_ERR_OPERATION_INVALID,
--                   _("could not locate checkpoint '%s' for incremental backup"),
--                   incrFrom);
--    return NULL;
--}
--
--
- void
- qemuBackupJobTerminate(virDomainObjPtr vm,
-                        qemuDomainJobStatus jobstatus)
-@@ -799,7 +801,6 @@ qemuBackupBegin(virDomainObjPtr vm,
-     bool pull = false;
-     virDomainMomentObjPtr chk = NULL;
-     g_autoptr(virDomainCheckpointDef) chkdef = NULL;
--    g_autofree virDomainMomentDefPtr *incremental = NULL;
-     g_autoptr(virJSONValue) actions = NULL;
-     struct qemuBackupDiskData *dd = NULL;
-     ssize_t ndd = 0;
-@@ -867,10 +868,6 @@ qemuBackupBegin(virDomainObjPtr vm,
-     if (virDomainBackupAlignDisks(def, vm->def, suffix) < 0)
-         goto endjob;
- 
--    if (def->incremental &&
--        !(incremental = qemuBackupBeginCollectIncrementalCheckpoints(vm, def->incremental)))
--        goto endjob;
--
-     actions = virJSONValueNewArray();
- 
-     /* The 'chk' checkpoint must be rolled back if the transaction command
-@@ -884,7 +881,7 @@ qemuBackupBegin(virDomainObjPtr vm,
-     if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_BACKUP)))
-         goto endjob;
- 
--    if ((ndd = qemuBackupDiskPrepareData(vm, def, incremental, blockNamedNodeData,
-+    if ((ndd = qemuBackupDiskPrepareData(vm, def, blockNamedNodeData,
-                                          actions, cfg, &dd)) <= 0) {
-         if (ndd == 0) {
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Rewrite-backup-bitmap-handling-to-the-new-bitmap-semantics.patch b/SOURCES/libvirt-qemu-backup-Rewrite-backup-bitmap-handling-to-the-new-bitmap-semantics.patch
deleted file mode 100644
index c8e5883..0000000
--- a/SOURCES/libvirt-qemu-backup-Rewrite-backup-bitmap-handling-to-the-new-bitmap-semantics.patch
+++ /dev/null
@@ -1,457 +0,0 @@
-From 1fd01969c2a7c4deefc28363c9748786ca5d7169 Mon Sep 17 00:00:00 2001
-Message-Id: <1fd01969c2a7c4deefc28363c9748786ca5d7169@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:57 +0200
-Subject: [PATCH] qemu: backup: Rewrite backup bitmap handling to the new
- bitmap semantics
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reuse qemuBlockGetBitmapMergeActions which allows removal of the ad-hoc
-implementation of bitmap merging for backup. The new approach is simpler
-and also more robust in case some of the bitmaps break as they remove
-the dependency on the whole chain of bitmaps working.
-
-The new approach also allows backups if a snapshot is created outside of
-libvirt.
-
-Additionally the code is greatly simplified.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit e0d8d989e2bc9024f85b676166da0305c4b4014d)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <468adeee4056441afbf7b452def02179da043030.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c                        | 220 +++---------------
- src/qemu/qemu_backup.h                        |  12 +-
- tests/qemublocktest.c                         |  86 ++-----
- .../backupmerge/empty-out.json                |   4 +-
- 4 files changed, 63 insertions(+), 259 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 13e2a7412b..67d646f477 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -173,199 +173,58 @@ qemuBackupDiskDataCleanup(virDomainObjPtr vm,
- }
- 
- 
--/**
-- * qemuBackupBeginCollectIncrementalCheckpoints:
-- * @vm: domain object
-- * @incrFrom: name of checkpoint representing starting point of incremental backup
-- *
-- * Returns a NULL terminated list of pointers to checkpoint definitions in
-- * chronological order starting from the 'current' checkpoint until reaching
-- * @incrFrom.
-- */
--static virDomainMomentDefPtr *
--qemuBackupBeginCollectIncrementalCheckpoints(virDomainObjPtr vm,
--                                             const char *incrFrom)
--{
--    virDomainMomentObjPtr n = virDomainCheckpointGetCurrent(vm->checkpoints);
--    g_autofree virDomainMomentDefPtr *incr = NULL;
--    size_t nincr = 0;
--
--    while (n) {
--        virDomainMomentDefPtr def = n->def;
--
--        if (VIR_APPEND_ELEMENT_COPY(incr, nincr, def) < 0)
--            return NULL;
--
--        if (STREQ(def->name, incrFrom)) {
--            def = NULL;
--            if (VIR_APPEND_ELEMENT_COPY(incr, nincr, def) < 0)
--                return NULL;
--
--            return g_steal_pointer(&incr);
--        }
--
--        if (!n->def->parent_name)
--            break;
--
--        n = virDomainCheckpointFindByName(vm->checkpoints, n->def->parent_name);
--    }
--
--    virReportError(VIR_ERR_OPERATION_INVALID,
--                   _("could not locate checkpoint '%s' for incremental backup"),
--                   incrFrom);
--    return NULL;
--}
--
--
--static int
--qemuBackupGetBitmapMergeRange(virStorageSourcePtr from,
--                              const char *bitmapname,
--                              virJSONValuePtr *actions,
--                              virStorageSourcePtr *to,
--                              const char *diskdst,
--                              virHashTablePtr blockNamedNodeData)
-+int
-+qemuBackupDiskPrepareOneBitmapsChain(virStorageSourcePtr backingChain,
-+                                     virStorageSourcePtr targetsrc,
-+                                     const char *targetbitmap,
-+                                     const char *incremental,
-+                                     virJSONValuePtr actions,
-+                                     virHashTablePtr blockNamedNodeData)
- {
--    g_autoptr(virJSONValue) act = virJSONValueNewArray();
--    virStorageSourcePtr tmpsrc = NULL;
--    virStorageSourcePtr n;
--    bool foundbitmap = false;
-+    g_autoptr(virJSONValue) tmpactions = NULL;
- 
--    for (n = from; virStorageSourceIsBacking(n); n = n->backingStore) {
--        qemuBlockNamedNodeDataBitmapPtr bitmap = NULL;
--
--        if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                             n,
--                                                             bitmapname)))
--            break;
--
--        foundbitmap = true;
--
--        if (bitmap->inconsistent) {
--            virReportError(VIR_ERR_INVALID_ARG,
--                           _("bitmap '%s' for image '%s%u' is inconsistent"),
--                           bitmap->name, diskdst, n->id);
--            return -1;
--        }
--
--        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(act,
--                                                             n->nodeformat,
--                                                             bitmapname) < 0)
--            return -1;
--
--        tmpsrc = n;
--    }
--
--    if (!foundbitmap) {
--        virReportError(VIR_ERR_INVALID_ARG,
--                       _("failed to find bitmap '%s' in image '%s%u'"),
--                       bitmapname, diskdst, from->id);
-+    if (qemuBlockGetBitmapMergeActions(backingChain, NULL, targetsrc,
-+                                       incremental, targetbitmap, NULL,
-+                                       &tmpactions,
-+                                       blockNamedNodeData) < 0)
-         return -1;
--    }
- 
--    *actions = g_steal_pointer(&act);
--    *to = tmpsrc;
-+    if (tmpactions &&
-+        virJSONValueArrayConcat(actions, tmpactions) < 0)
-+        return -1;
- 
-     return 0;
- }
- 
- 
--virJSONValuePtr
--qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
--                                     virStorageSourcePtr backingChain,
--                                     virHashTablePtr blockNamedNodeData,
--                                     const char *diskdst)
--{
--    g_autoptr(virJSONValue) ret = NULL;
--    size_t incridx = 0;
--    virStorageSourcePtr n = backingChain;
--
--    ret = virJSONValueNewArray();
--
--    for (incridx = 0; incremental[incridx]; incridx++) {
--        g_autoptr(virJSONValue) tmp = virJSONValueNewArray();
--        virStorageSourcePtr tmpsrc = NULL;
--        virDomainCheckpointDefPtr chkdef = (virDomainCheckpointDefPtr) incremental[incridx];
--        bool checkpoint_has_disk = false;
--        size_t i;
--
--        for (i = 0; i < chkdef->ndisks; i++) {
--            if (STRNEQ_NULLABLE(diskdst, chkdef->disks[i].name))
--                continue;
--
--            if (chkdef->disks[i].type == VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
--                checkpoint_has_disk = true;
--
--            break;
--        }
--
--        if (!checkpoint_has_disk) {
--            if (!incremental[incridx + 1]) {
--                virReportError(VIR_ERR_INVALID_ARG,
--                               _("disk '%s' not found in checkpoint '%s'"),
--                               diskdst, incremental[incridx]->name);
--                return NULL;
--            }
--
--            continue;
--        }
--
--        if (qemuBackupGetBitmapMergeRange(n, incremental[incridx]->name,
--                                          &tmp, &tmpsrc, diskdst,
--                                          blockNamedNodeData) < 0)
--            return NULL;
--
--        if (virJSONValueArrayConcat(ret, tmp) < 0)
--            return NULL;
--
--        n = tmpsrc;
--    }
--
--    return g_steal_pointer(&ret);
--}
--
--
- static int
- qemuBackupDiskPrepareOneBitmaps(struct qemuBackupDiskData *dd,
-                                 virJSONValuePtr actions,
--                                virDomainMomentDefPtr *incremental,
-                                 virHashTablePtr blockNamedNodeData)
- {
--    g_autoptr(virJSONValue) mergebitmaps = NULL;
--    g_autoptr(virJSONValue) mergebitmapsstore = NULL;
--
--    if (!(mergebitmaps = qemuBackupDiskPrepareOneBitmapsChain(incremental,
--                                                              dd->domdisk->src,
--                                                              blockNamedNodeData,
--                                                              dd->domdisk->dst)))
--        return -1;
--
--    if (!(mergebitmapsstore = virJSONValueCopy(mergebitmaps)))
--        return -1;
--
--    if (qemuMonitorTransactionBitmapAdd(actions,
--                                        dd->domdisk->src->nodeformat,
--                                        dd->incrementalBitmap,
--                                        false,
--                                        true, 0) < 0)
--        return -1;
--
--    if (qemuMonitorTransactionBitmapMerge(actions,
--                                          dd->domdisk->src->nodeformat,
--                                          dd->incrementalBitmap,
--                                          &mergebitmaps) < 0)
-+    if (!qemuBlockBitmapChainIsValid(dd->domdisk->src,
-+                                     dd->backupdisk->incremental,
-+                                     blockNamedNodeData)) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("missing or broken bitmap '%s' for disk '%s'"),
-+                       dd->backupdisk->incremental, dd->domdisk->dst);
-         return -1;
-+    }
- 
--    if (qemuMonitorTransactionBitmapAdd(actions,
--                                        dd->store->nodeformat,
--                                        dd->incrementalBitmap,
--                                        false,
--                                        true, 0) < 0)
-+    if (qemuBackupDiskPrepareOneBitmapsChain(dd->domdisk->src,
-+                                             dd->domdisk->src,
-+                                             dd->incrementalBitmap,
-+                                             dd->backupdisk->incremental,
-+                                             actions,
-+                                             blockNamedNodeData) < 0)
-         return -1;
- 
--    if (qemuMonitorTransactionBitmapMerge(actions,
--                                          dd->store->nodeformat,
--                                          dd->incrementalBitmap,
--                                          &mergebitmapsstore) < 0)
-+    if (qemuBackupDiskPrepareOneBitmapsChain(dd->domdisk->src,
-+                                             dd->store,
-+                                             dd->incrementalBitmap,
-+                                             dd->backupdisk->incremental,
-+                                             actions,
-+                                             blockNamedNodeData) < 0)
-         return -1;
- 
-     return 0;
-@@ -382,7 +241,6 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-                              virQEMUDriverConfigPtr cfg)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
--    g_autofree virDomainMomentDefPtr *incremental = NULL;
- 
-     /* set data structure */
-     dd->backupdisk = backupdisk;
-@@ -418,16 +276,12 @@ qemuBackupDiskPrepareDataOne(virDomainObjPtr vm,
-         return -1;
- 
-     if (dd->backupdisk->incremental) {
--        if (!(incremental = qemuBackupBeginCollectIncrementalCheckpoints(vm, dd->backupdisk->incremental)))
--            return -1;
--
-         if (dd->backupdisk->exportbitmap)
-             dd->incrementalBitmap = g_strdup(dd->backupdisk->exportbitmap);
-         else
-             dd->incrementalBitmap = g_strdup_printf("backup-%s", dd->domdisk->dst);
- 
--        if (qemuBackupDiskPrepareOneBitmaps(dd, actions, incremental,
--                                            blockNamedNodeData) < 0)
-+        if (qemuBackupDiskPrepareOneBitmaps(dd, actions, blockNamedNodeData) < 0)
-             return -1;
-     }
- 
-@@ -881,8 +735,8 @@ qemuBackupBegin(virDomainObjPtr vm,
-     if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_BACKUP)))
-         goto endjob;
- 
--    if ((ndd = qemuBackupDiskPrepareData(vm, def, blockNamedNodeData,
--                                         actions, cfg, &dd)) <= 0) {
-+    if ((ndd = qemuBackupDiskPrepareData(vm, def, blockNamedNodeData, actions,
-+                                         cfg, &dd)) <= 0) {
-         if (ndd == 0) {
-             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                            _("no disks selected for backup"));
-diff --git a/src/qemu/qemu_backup.h b/src/qemu/qemu_backup.h
-index 3321ba0b6f..c821baf0ee 100644
---- a/src/qemu/qemu_backup.h
-+++ b/src/qemu/qemu_backup.h
-@@ -52,8 +52,10 @@ qemuBackupGetJobInfoStats(virQEMUDriverPtr driver,
-                           qemuDomainJobInfoPtr jobInfo);
- 
- /* exported for testing */
--virJSONValuePtr
--qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
--                                     virStorageSourcePtr backingChain,
--                                     virHashTablePtr blockNamedNodeData,
--                                     const char *diskdst);
-+int
-+qemuBackupDiskPrepareOneBitmapsChain(virStorageSourcePtr backingChain,
-+                                     virStorageSourcePtr targetsrc,
-+                                     const char *targetbitmap,
-+                                     const char *incremental,
-+                                     virJSONValuePtr actions,
-+                                     virHashTablePtr blockNamedNodeData);
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 7c8f67dd6b..dcdc9eade0 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -716,65 +716,6 @@ testQemuBitmapGetFakeChainEntry(virStorageSourcePtr src,
- }
- 
- 
--typedef virDomainMomentDefPtr testMomentList;
--
--static void
--testMomentListFree(testMomentList *list)
--{
--    testMomentList *tmp = list;
--
--    if (!list)
--        return;
--
--    while (*tmp) {
--        virObjectUnref(*tmp);
--        tmp++;
--    }
--
--    g_free(list);
--}
--
--G_DEFINE_AUTOPTR_CLEANUP_FUNC(testMomentList, testMomentListFree);
--
--static virDomainMomentDefPtr
--testQemuBackupGetIncrementalMoment(const char *name)
--{
--    virDomainCheckpointDefPtr checkpoint = NULL;
--
--    if (!(checkpoint = virDomainCheckpointDefNew()))
--        abort();
--
--    checkpoint->disks = g_new0(virDomainCheckpointDiskDef, 1);
--    checkpoint->ndisks = 1;
--
--    checkpoint->disks[0].name = g_strdup("testdisk");
--    checkpoint->disks[0].type = VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP;
--
--    checkpoint->parent.name = g_strdup(name);
--
--    return (virDomainMomentDefPtr) checkpoint;
--}
--
--
--static virDomainMomentDefPtr *
--testQemuBackupGetIncremental(const char *incFrom)
--{
--    const char *checkpoints[] = {"current", "d", "c", "b", "a"};
--    virDomainMomentDefPtr *incr;
--    size_t i;
--
--    incr = g_new0(virDomainMomentDefPtr, G_N_ELEMENTS(checkpoints) + 1);
--
--    for (i = 0; i < G_N_ELEMENTS(checkpoints); i++) {
--        incr[i] = testQemuBackupGetIncrementalMoment(checkpoints[i]);
--
--        if (STREQ(incFrom, checkpoints[i]))
--            break;
--    }
--
--    return incr;
--}
--
- static const char *backupDataPrefix = "qemublocktestdata/backupmerge/";
- 
- struct testQemuBackupIncrementalBitmapCalculateData {
-@@ -791,10 +732,10 @@ testQemuBackupIncrementalBitmapCalculate(const void *opaque)
-     const struct testQemuBackupIncrementalBitmapCalculateData *data = opaque;
-     g_autoptr(virJSONValue) nodedatajson = NULL;
-     g_autoptr(virHashTable) nodedata = NULL;
--    g_autoptr(virJSONValue) mergebitmaps = NULL;
--    g_autofree char *actual = NULL;
-+    g_autoptr(virJSONValue) actions = virJSONValueNewArray();
-     g_autofree char *expectpath = NULL;
--    g_autoptr(testMomentList) incremental = NULL;
-+    g_autoptr(virStorageSource) target = NULL;
-+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
- 
-     expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
-                                  backupDataPrefix, data->name);
-@@ -808,19 +749,24 @@ testQemuBackupIncrementalBitmapCalculate(const void *opaque)
-         return -1;
-     }
- 
--    incremental = testQemuBackupGetIncremental(data->incremental);
-+    if (!(target = virStorageSourceNew()))
-+        return -1;
- 
--    if ((mergebitmaps = qemuBackupDiskPrepareOneBitmapsChain(incremental,
--                                                             data->chain,
--                                                             nodedata,
--                                                             "testdisk"))) {
--        if (!(actual = virJSONValueToString(mergebitmaps, true)))
-+    target->nodeformat = g_strdup_printf("target_node");
-+
-+    if (qemuBackupDiskPrepareOneBitmapsChain(data->chain,
-+                                             target,
-+                                             "target-bitmap-name",
-+                                             data->incremental,
-+                                             actions,
-+                                             nodedata) >= 0) {
-+        if (virJSONValueToBuffer(actions, &buf, true) < 0)
-             return -1;
-     } else {
--        actual = g_strdup("NULL\n");
-+        virBufferAddLit(&buf, "NULL\n");
-     }
- 
--    return virTestCompareToFile(actual, expectpath);
-+    return virTestCompareToFile(virBufferCurrentContent(&buf), expectpath);
- }
- 
- 
-diff --git a/tests/qemublocktestdata/backupmerge/empty-out.json b/tests/qemublocktestdata/backupmerge/empty-out.json
-index 7951defec1..41b42e677b 100644
---- a/tests/qemublocktestdata/backupmerge/empty-out.json
-+++ b/tests/qemublocktestdata/backupmerge/empty-out.json
-@@ -1 +1,3 @@
--NULL
-+[
-+
-+]
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-backup-Split-up-code-traversing-checkpoint-list-looking-for-bitmaps.patch b/SOURCES/libvirt-qemu-backup-Split-up-code-traversing-checkpoint-list-looking-for-bitmaps.patch
deleted file mode 100644
index ca1b634..0000000
--- a/SOURCES/libvirt-qemu-backup-Split-up-code-traversing-checkpoint-list-looking-for-bitmaps.patch
+++ /dev/null
@@ -1,165 +0,0 @@
-From d0dc4217142fda8ce8850a30b7d89a344bb55d5e Mon Sep 17 00:00:00 2001
-Message-Id: <d0dc4217142fda8ce8850a30b7d89a344bb55d5e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:35 +0200
-Subject: [PATCH] qemu: backup: Split up code traversing checkpoint list
- looking for bitmaps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The algorithm is getting quite complex. Split out the lookup of range of
-backing chain storage sources and bitmaps contained in them which
-correspond to one checkpoint.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 562511afa6cef5948e6339596ba5954cb5ed0565)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <b3a1485033a5bb425f261caeb299973b2f39bbff.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 111 ++++++++++++++++++++++-------------------
- 1 file changed, 61 insertions(+), 50 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 5d18720f53..400b711f79 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -173,72 +173,83 @@ qemuBackupDiskDataCleanup(virDomainObjPtr vm,
- }
- 
- 
-+static int
-+qemuBackupGetBitmapMergeRange(virStorageSourcePtr from,
-+                              const char *bitmapname,
-+                              virJSONValuePtr *actions,
-+                              virStorageSourcePtr *to,
-+                              const char *diskdst,
-+                              virHashTablePtr blockNamedNodeData)
-+{
-+    g_autoptr(virJSONValue) act = virJSONValueNewArray();
-+    virStorageSourcePtr tmpsrc = NULL;
-+    virStorageSourcePtr n;
-+    bool foundbitmap = false;
-+
-+    for (n = from; virStorageSourceIsBacking(n); n = n->backingStore) {
-+        qemuBlockNamedNodeDataBitmapPtr bitmap = NULL;
-+
-+        if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                             n,
-+                                                             bitmapname)))
-+            break;
-+
-+        foundbitmap = true;
-+
-+        if (bitmap->inconsistent) {
-+            virReportError(VIR_ERR_INVALID_ARG,
-+                           _("bitmap '%s' for image '%s%u' is inconsistent"),
-+                           bitmap->name, diskdst, n->id);
-+            return -1;
-+        }
-+
-+        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(act,
-+                                                             n->nodeformat,
-+                                                             bitmapname) < 0)
-+            return -1;
-+
-+        tmpsrc = n;
-+    }
-+
-+    if (!foundbitmap) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("failed to find bitmap '%s' in image '%s%u'"),
-+                       bitmapname, diskdst, from->id);
-+        return -1;
-+    }
-+
-+    *actions = g_steal_pointer(&act);
-+    *to = tmpsrc;
-+
-+    return 0;
-+}
-+
-+
- virJSONValuePtr
- qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
-                                      virStorageSourcePtr backingChain,
-                                      virHashTablePtr blockNamedNodeData,
-                                      const char *diskdst)
- {
--    qemuBlockNamedNodeDataBitmapPtr bitmap;
-     g_autoptr(virJSONValue) ret = NULL;
-     size_t incridx = 0;
-+    virStorageSourcePtr n = backingChain;
- 
-     ret = virJSONValueNewArray();
- 
--    if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                         backingChain,
--                                                         incremental[0]->name))) {
--        virReportError(VIR_ERR_INVALID_ARG,
--                       _("failed to find bitmap '%s' in image '%s%u'"),
--                       incremental[0]->name, diskdst, backingChain->id);
--        return NULL;
--    }
-+    for (incridx = 0; incremental[incridx]; incridx++) {
-+        g_autoptr(virJSONValue) tmp = virJSONValueNewArray();
-+        virStorageSourcePtr tmpsrc = NULL;
- 
--    while (bitmap) {
--        if (bitmap->inconsistent) {
--            virReportError(VIR_ERR_INVALID_ARG,
--                           _("bitmap '%s' for image '%s%u' is inconsistent"),
--                           bitmap->name, diskdst, backingChain->id);
-+        if (qemuBackupGetBitmapMergeRange(n, incremental[incridx]->name,
-+                                          &tmp, &tmpsrc, diskdst,
-+                                          blockNamedNodeData) < 0)
-             return NULL;
--        }
- 
--        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(ret,
--                                                             backingChain->nodeformat,
--                                                             bitmap->name) < 0)
-+        if (virJSONValueArrayConcat(ret, tmp) < 0)
-             return NULL;
- 
--        if (backingChain->backingStore &&
--            (bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                            backingChain->backingStore,
--                                                            incremental[incridx]->name))) {
--            backingChain = backingChain->backingStore;
--            continue;
--        }
--
--        if (incremental[incridx + 1]) {
--            if ((bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                                backingChain,
--                                                                incremental[incridx + 1]->name))) {
--                incridx++;
--                continue;
--            }
--
--            if (backingChain->backingStore &&
--                (bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                                backingChain->backingStore,
--                                                                incremental[incridx + 1]->name))) {
--                incridx++;
--                backingChain = backingChain->backingStore;
--                continue;
--            }
--
--            virReportError(VIR_ERR_INVALID_ARG,
--                           _("failed to find bitmap '%s' in image '%s%u'"),
--                           incremental[incridx]->name, diskdst, backingChain->id);
--            return NULL;
--        } else {
--            break;
--        }
-+        n = tmpsrc;
-     }
- 
-     return g_steal_pointer(&ret);
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-block-Add-support-for-HTTP-cookies.patch b/SOURCES/libvirt-qemu-block-Add-support-for-HTTP-cookies.patch
deleted file mode 100644
index 32be511..0000000
--- a/SOURCES/libvirt-qemu-block-Add-support-for-HTTP-cookies.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 79e5b82ba66bbf8cbf55701013749ed155d92633 Mon Sep 17 00:00:00 2001
-Message-Id: <79e5b82ba66bbf8cbf55701013749ed155d92633@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:05 +0100
-Subject: [PATCH] qemu: block: Add support for HTTP cookies
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Pass the alias of the secret object holding the cookie data as
-'cookie-secret' to qemu.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 06d3e8d5398f9ed292b84a18c3bb6ea4034a772e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <1bed750b384b4f553f36cff4782fc29e32af7ca4.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                              | 14 +++++++++++---
- .../disk-network-http.x86_64-latest.args           | 11 +++++++++--
- tests/qemuxml2argvdata/disk-network-http.xml       |  8 ++++++++
- 3 files changed, 28 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index f07420b6e2..80a8c7296d 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -680,6 +680,7 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
- {
-     qemuDomainStorageSourcePrivatePtr srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
-     const char *passwordalias = NULL;
-+    const char *cookiealias = NULL;
-     const char *username = NULL;
-     virJSONValuePtr ret = NULL;
-     g_autoptr(virURI) uri = NULL;
-@@ -704,9 +705,15 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-     if (!(uristr = virURIFormat(uri)))
-         return NULL;
- 
--    if (!onlytarget && src->auth) {
--        username = src->auth->username;
--        passwordalias = srcPriv->secinfo->s.aes.alias;
-+    if (!onlytarget) {
-+        if (src->auth) {
-+            username = src->auth->username;
-+            passwordalias = srcPriv->secinfo->s.aes.alias;
-+        }
-+
-+        if (srcPriv &&
-+            srcPriv->httpcookie)
-+            cookiealias = srcPriv->httpcookie->s.aes.alias;
-     }
- 
-     ignore_value(virJSONValueObjectCreate(&ret,
-@@ -714,6 +721,7 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-                                           "S:username", username,
-                                           "S:password-secret", passwordalias,
-                                           "T:sslverify", src->sslverify,
-+                                          "S:cookie-secret", cookiealias,
-                                           NULL));
- 
-     return ret;
-diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-index 86e4597a81..cbb69e16a9 100644
---- a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-@@ -39,15 +39,22 @@ id=virtio-disk0,bootindex=1 \
- "file":"libvirt-3-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-3-format,\
- id=virtio-disk1 \
-+-object secret,id=libvirt-2-storage-httpcookie-secret0,\
-+data=DrPR9NA6GKJb7qi1KbjHad3f3UIGTTDmAmOZHHv1F5w5T8rhnk3f+uSKStHe0J2O,\
-+keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"http","url":"http://example.org:1234/test3.img",\
-+"cookie-secret":"libvirt-2-storage-httpcookie-secret0",\
- "node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw",\
- "file":"libvirt-2-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-2-format,\
- id=virtio-disk2 \
-+-object secret,id=libvirt-1-storage-httpcookie-secret0,\
-+data=DrPR9NA6GKJb7qi1KbjHad3f3UIGTTDmAmOZHHv1F5w5T8rhnk3f+uSKStHe0J2O,\
-+keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"https","url":"https://example.org:1234/test4.img",\
--"sslverify":false,"node-name":"libvirt-1-storage","auto-read-only":true,\
--"discard":"unmap"}' \
-+"sslverify":false,"cookie-secret":"libvirt-1-storage-httpcookie-secret0",\
-+"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw",\
- "file":"libvirt-1-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-1-format,\
-diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
-index 8c475aec1d..6acf75cf65 100644
---- a/tests/qemuxml2argvdata/disk-network-http.xml
-+++ b/tests/qemuxml2argvdata/disk-network-http.xml
-@@ -31,6 +31,10 @@
-       <driver name='qemu' type='raw'/>
-       <source protocol='http' name='test3.img'>
-         <host name='example.org' port='1234'/>
-+        <cookies>
-+          <cookie name='test'>testcookievalue</cookie>
-+          <cookie name='test2'>blurb</cookie>
-+        </cookies>
-       </source>
-       <target dev='vdc' bus='virtio'/>
-     </disk>
-@@ -39,6 +43,10 @@
-       <source protocol='https' name='test4.img'>
-         <host name='example.org' port='1234'/>
-         <ssl verify='no'/>
-+        <cookies>
-+          <cookie name='test'>testcookievalue</cookie>
-+          <cookie name='test2'>blurb</cookie>
-+        </cookies>
-       </source>
-       <target dev='vdd' bus='virtio'/>
-     </disk>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-block-Add-universal-helper-for-merging-dirty-bitmaps-for-all-scenarios.patch b/SOURCES/libvirt-qemu-block-Add-universal-helper-for-merging-dirty-bitmaps-for-all-scenarios.patch
deleted file mode 100644
index 2195f0d..0000000
--- a/SOURCES/libvirt-qemu-block-Add-universal-helper-for-merging-dirty-bitmaps-for-all-scenarios.patch
+++ /dev/null
@@ -1,238 +0,0 @@
-From 629e54cc030235909720da73d6367fc0b703d062 Mon Sep 17 00:00:00 2001
-Message-Id: <629e54cc030235909720da73d6367fc0b703d062@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:56 +0200
-Subject: [PATCH] qemu: block: Add universal helper for merging dirty bitmaps
- for all scenarios
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a function which allows merging bitmaps according to the new
-semantics and will allow replacing all the specific ad-hoc functions
-currently in use for 'backup', 'block commit', 'block copy' and will
-also be usable in the future for 'block pull' and non-shared storage
-migration.
-
-The semantics are a bit quirky for the 'backup' case but these quirks
-are documented and will prevent us from having two slightly different
-algorithms.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 4fa8654eced8b0362d3f3ff33eebb108fe833869)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <25acdc313844a20a9c884048498c42b9a8105de7.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 172 ++++++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_block.h |  10 +++
- 2 files changed, 182 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 38c8269721..b2296c2b4c 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2832,6 +2832,178 @@ qemuBlockGetNamedNodeData(virDomainObjPtr vm,
- }
- 
- 
-+/**
-+ * qemuBlockGetBitmapMergeActionsGetBitmaps:
-+ *
-+ * Collect a list of bitmaps which need to be handled in
-+ * qemuBlockGetBitmapMergeActions. The list contains only valid bitmaps in the
-+ * sub-chain which is being processed.
-+ *
-+ * Note that the returned GSList contains bitmap names string pointers borrowed
-+ * from @blockNamedNodeData so they must not be freed.
-+ */
-+static GSList *
-+qemuBlockGetBitmapMergeActionsGetBitmaps(virStorageSourcePtr topsrc,
-+                                         const char *bitmapname,
-+                                         virHashTablePtr blockNamedNodeData)
-+{
-+    g_autoptr(GSList) ret = NULL;
-+    qemuBlockNamedNodeDataPtr entry;
-+    size_t i;
-+
-+    /* for now it doesn't make sense to consider bitmaps which are not present
-+     * in @topsrc as we can't recreate a bitmap for a layer if it's missing */
-+
-+    if (!(entry = virHashLookup(blockNamedNodeData, topsrc->nodeformat)))
-+        return NULL;
-+
-+    for (i = 0; i < entry->nbitmaps; i++) {
-+        qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
-+
-+        if (bitmapname &&
-+            STRNEQ(bitmapname, bitmap->name))
-+            continue;
-+
-+        if (!qemuBlockBitmapChainIsValid(topsrc, bitmap->name, blockNamedNodeData))
-+            continue;
-+
-+        ret = g_slist_prepend(ret, bitmap->name);
-+    }
-+
-+    return g_steal_pointer(&ret);
-+}
-+
-+
-+/**
-+ * qemuBlockGetBitmapMergeActions:
-+ * @topsrc: top of the chain to merge bitmaps in
-+ * @basesrc: bottom of the chain to merge bitmaps in (NULL for full chain)
-+ * @target: destination storage source of the merge (may be part of original chain)
-+ * @bitmapname: name of bitmap to perform the merge (NULL for all bitmaps)
-+ * @dstbitmapname: name of destination bitmap of the merge (see below for caveats)
-+ * @writebitmapsrc: storage source corresponding to the node containing the write temporary bitmap
-+ * @actions: returns actions for a 'transaction' QMP command for executing the merge
-+ * @blockNamedNodeData: hash table filled with qemuBlockNamedNodeData
-+ *
-+ * Calculate handling of dirty block bitmaps between @topsrc and @basesrc. If
-+ * @basesrc is NULL the end of the chain is considered. @target is the destination
-+ * storage source definition of the merge and may or may not be part of the
-+ * merged chain.
-+ *
-+ * Specifically the merging algorithm ensures that each considered bitmap is
-+ * merged with the appropriate bitmaps so that it properly describes
-+ * the state of dirty blocks when looked at from @topsrc based on the depth
-+ * of the backing chain where the bitmap is placed.
-+ *
-+ * If @bitmapname is non-NULL only bitmaps with that name are handled, otherwise
-+ * all bitmaps are considered.
-+ *
-+ * If @dstbitmap is non-NULL everything is merged into a bitmap with that name,
-+ * otherwise each bitmap is merged into a bitmap with the same name into @target.
-+ * Additionally if @dstbitmap is non-NULL the target bitmap is created as 'inactive'
-+ * and 'transient' as a special case for the backup operation.
-+ *
-+ * If @writebitmapsrc is non-NULL, the 'libvirt-tmp-activewrite' bitmap from
-+ * given node is merged along with others. This bitmap corresponds to the writes
-+ * which occurred between an active layer job finished and the rest of the bitmap
-+ * merging.
-+ *
-+ * If the bitmap is not valid somehow (see qemuBlockBitmapChainIsValid) given
-+ * bitmap is silently skipped, so callers must ensure that given bitmap is valid
-+ * if they care about it.
-+ *
-+ * The resulting 'transaction' QMP command actions are filled in and returned via
-+ * @actions.
-+ *
-+ * Note that @actions may be NULL if no merging is required.
-+ */
-+int
-+qemuBlockGetBitmapMergeActions(virStorageSourcePtr topsrc,
-+                               virStorageSourcePtr basesrc,
-+                               virStorageSourcePtr target,
-+                               const char *bitmapname,
-+                               const char *dstbitmapname,
-+                               virStorageSourcePtr writebitmapsrc,
-+                               virJSONValuePtr *actions,
-+                               virHashTablePtr blockNamedNodeData)
-+{
-+    g_autoptr(virJSONValue) act = virJSONValueNewArray();
-+    virStorageSourcePtr n;
-+
-+    g_autoptr(GSList) bitmaps = NULL;
-+    GSList *next;
-+
-+    if (!(bitmaps = qemuBlockGetBitmapMergeActionsGetBitmaps(topsrc, bitmapname,
-+                                                             blockNamedNodeData)))
-+        return 0;
-+
-+    for (next = bitmaps; next; next = next->next) {
-+        const char *curbitmap = next->data;
-+        const char *mergebitmapname = dstbitmapname;
-+        bool mergebitmappersistent = false;
-+        bool mergebitmapdisabled = true;
-+        g_autoptr(virJSONValue) merge = virJSONValueNewArray();
-+        unsigned long long granularity = 0;
-+        qemuBlockNamedNodeDataBitmapPtr bitmap;
-+
-+        /* explicitly named destinations mean that we want a temporary
-+         * disabled bitmap only, so undo the default for non-explicit cases  */
-+        if (!mergebitmapname) {
-+            mergebitmapname = curbitmap;
-+            mergebitmappersistent = true;
-+            mergebitmapdisabled = false;
-+        }
-+
-+        for (n = topsrc; virStorageSourceIsBacking(n) && n != basesrc; n = n->backingStore) {
-+            if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                                 n, curbitmap)))
-+                continue;
-+
-+            if (granularity == 0)
-+                granularity = bitmap->granularity;
-+
-+            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(merge,
-+                                                                 n->nodeformat,
-+                                                                 bitmap->name) < 0)
-+                return -1;
-+        }
-+
-+        if (dstbitmapname ||
-+            !(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                             target, curbitmap))) {
-+
-+            if (qemuMonitorTransactionBitmapAdd(act,
-+                                                target->nodeformat,
-+                                                mergebitmapname,
-+                                                mergebitmappersistent,
-+                                                mergebitmapdisabled,
-+                                                granularity) < 0)
-+                return -1;
-+        }
-+
-+        if (writebitmapsrc &&
-+            qemuMonitorTransactionBitmapMergeSourceAddBitmap(merge,
-+                                                             writebitmapsrc->nodeformat,
-+                                                             "libvirt-tmp-activewrite") < 0)
-+            return -1;
-+
-+        if (qemuMonitorTransactionBitmapMerge(act, target->nodeformat,
-+                                              mergebitmapname, &merge) < 0)
-+            return -1;
-+    }
-+
-+    if (writebitmapsrc &&
-+        qemuMonitorTransactionBitmapRemove(act, writebitmapsrc->nodeformat,
-+                                           "libvirt-tmp-activewrite") < 0)
-+        return -1;
-+
-+    if (virJSONValueArraySize(act) > 0)
-+        *actions = g_steal_pointer(&act);
-+
-+    return 0;
-+}
-+
-+
- /**
-  * qemuBlockBitmapChainIsValid:
-  *
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 06afa54115..2500390734 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -221,6 +221,16 @@ virHashTablePtr
- qemuBlockGetNamedNodeData(virDomainObjPtr vm,
-                           qemuDomainAsyncJob asyncJob);
- 
-+int
-+qemuBlockGetBitmapMergeActions(virStorageSourcePtr topsrc,
-+                               virStorageSourcePtr basesrc,
-+                               virStorageSourcePtr target,
-+                               const char *bitmapname,
-+                               const char *dstbitmapname,
-+                               virStorageSourcePtr writebitmapsrc,
-+                               virJSONValuePtr *actions,
-+                               virHashTablePtr blockNamedNodeData);
-+
- bool
- qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
-                             const char *bitmapname,
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-block-Add-validator-for-bitmap-chains-accross-backing-chains.patch b/SOURCES/libvirt-qemu-block-Add-validator-for-bitmap-chains-accross-backing-chains.patch
deleted file mode 100644
index d4ea716..0000000
--- a/SOURCES/libvirt-qemu-block-Add-validator-for-bitmap-chains-accross-backing-chains.patch
+++ /dev/null
@@ -1,196 +0,0 @@
-From eeb1315a8015aeda4d2fb7ce590c85c40ffb567d Mon Sep 17 00:00:00 2001
-Message-Id: <eeb1315a8015aeda4d2fb7ce590c85c40ffb567d@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:23 +0100
-Subject: [PATCH] qemu: block: Add validator for bitmap chains accross backing
- chains
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a validator which checks that a bitmap spanning multiple backing
-chain members doesn't look broken. The current rules are that no
-intermediate birmaps are missing (unfortunately it's hard to know
-whether the topmost or bottommost bitmap is missing) and none of the
-components is inconsistent.
-
-We can obviously improve it over time.
-
-The validator is also tested against the existing bitmap data we have
-for the backup merging test as well as some of the existing broken
-bitmap synthetic test cases.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 41c7e5c2a689a4ad091cec40b61beeeb3dde49b8)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <a1020495b33e99b2c1bb847dff26565d4def1e20.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 41 +++++++++++++++++++++++++
- src/qemu/qemu_block.h |  5 ++++
- tests/qemublocktest.c | 70 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 116 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 03f029368e..b19290e677 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2687,3 +2687,44 @@ qemuBlockGetNamedNodeData(virDomainObjPtr vm,
- 
-     return g_steal_pointer(&blockNamedNodeData);
- }
-+
-+
-+/**
-+ * qemuBlockBitmapChainIsValid:
-+ *
-+ * Validates that the backing chain of @src contains proper consistent bitmap
-+ * data for a chain of bitmaps named @bitmapname.
-+ *
-+ * A valid chain:
-+ * 1) bitmaps of same name are in a consecutive subset of images without gap
-+ * 2) don't have any inconsistent bitmaps
-+ */
-+bool
-+qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
-+                            const char *bitmapname,
-+                            virHashTablePtr blockNamedNodeData)
-+{
-+    qemuBlockNamedNodeDataBitmapPtr bitmap;
-+    virStorageSourcePtr n;
-+    bool chain_started = false;
-+    bool chain_ended = false;
-+
-+    for (n = src; n; n = n->backingStore) {
-+        if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData, n, bitmapname))) {
-+            if (chain_started)
-+                chain_ended = true;
-+
-+            continue;
-+        }
-+
-+        if (chain_ended)
-+            return false;
-+
-+        chain_started = true;
-+
-+        if (bitmap->inconsistent)
-+            return false;
-+    }
-+
-+    return chain_started;
-+}
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 68646cbf2e..cf51b9bf4e 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -212,3 +212,8 @@ qemuBlockNamedNodeDataGetBitmapByName(virHashTablePtr blockNamedNodeData,
- virHashTablePtr
- qemuBlockGetNamedNodeData(virDomainObjPtr vm,
-                           qemuDomainAsyncJob asyncJob);
-+
-+bool
-+qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
-+                            const char *bitmapname,
-+                            virHashTablePtr blockNamedNodeData);
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 5946cd6c6b..6a7b07cfee 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -764,6 +764,41 @@ testQemuCheckpointDeleteMerge(const void *opaque)
- }
- 
- 
-+struct testQemuBlockBitmapValidateData {
-+    const char *name;
-+    const char *bitmapname;
-+    virStorageSourcePtr chain;
-+    bool expect;
-+};
-+
-+static int
-+testQemuBlockBitmapValidate(const void *opaque)
-+{
-+    const struct testQemuBlockBitmapValidateData *data = opaque;
-+    g_autoptr(virJSONValue) nodedatajson = NULL;
-+    g_autoptr(virHashTable) nodedata = NULL;
-+    bool actual;
-+
-+    if (!(nodedatajson = virTestLoadFileJSON(bitmapDetectPrefix, data->name,
-+                                             ".json", NULL)))
-+        return -1;
-+
-+    if (!(nodedata = qemuMonitorJSONBlockGetNamedNodeDataJSON(nodedatajson))) {
-+        VIR_TEST_VERBOSE("failed to load nodedata JSON\n");
-+        return -1;
-+    }
-+
-+    actual = qemuBlockBitmapChainIsValid(data->chain, data->bitmapname, nodedata);
-+
-+    if (actual != data->expect) {
-+        VIR_TEST_VERBOSE("expected rv:'%d' actual rv:'%d'\n", data->expect, actual);
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+
- static int
- mymain(void)
- {
-@@ -774,6 +809,7 @@ mymain(void)
-     struct testQemuImageCreateData imagecreatedata;
-     struct testQemuBackupIncrementalBitmapCalculateData backupbitmapcalcdata;
-     struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
-+    struct testQemuBlockBitmapValidateData blockbitmapvalidatedata;
-     char *capslatest_x86_64 = NULL;
-     virQEMUCapsPtr caps_x86_64 = NULL;
-     g_autoptr(virStorageSource) bitmapSourceChain = NULL;
-@@ -1041,7 +1077,41 @@ mymain(void)
-     TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate3", "d", "c", "snapshots-synthetic-checkpoint");
-     TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-current", "current", "d", "snapshots-synthetic-checkpoint");
- 
-+#define TEST_BITMAP_VALIDATE(testname, bitmap, rc) \
-+    do { \
-+        blockbitmapvalidatedata.name = testname; \
-+        blockbitmapvalidatedata.chain = bitmapSourceChain; \
-+        blockbitmapvalidatedata.bitmapname = bitmap; \
-+        blockbitmapvalidatedata.expect = rc; \
-+        if (virTestRun("bitmap validate " testname " " bitmap, \
-+                       testQemuBlockBitmapValidate, \
-+                       &blockbitmapvalidatedata) < 0) \
-+            ret = -1; \
-+    } while (0)
- 
-+    TEST_BITMAP_VALIDATE("basic", "a", true);
-+    TEST_BITMAP_VALIDATE("basic", "b", true);
-+    TEST_BITMAP_VALIDATE("basic", "c", true);
-+    TEST_BITMAP_VALIDATE("basic", "d", true);
-+    TEST_BITMAP_VALIDATE("basic", "current", true);
-+
-+    TEST_BITMAP_VALIDATE("snapshots", "a", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "b", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "c", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "d", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "current", true);
-+
-+    TEST_BITMAP_VALIDATE("synthetic", "a", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "b", true);
-+    TEST_BITMAP_VALIDATE("synthetic", "c", true);
-+    TEST_BITMAP_VALIDATE("synthetic", "d", true);
-+    TEST_BITMAP_VALIDATE("synthetic", "current", true);
-+
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "a", true);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "b", true);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "c", true);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "d", true);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "current", true);
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-block-Don-t-skip-creation-of-luks-formatted-images.patch b/SOURCES/libvirt-qemu-block-Don-t-skip-creation-of-luks-formatted-images.patch
deleted file mode 100644
index fa76d45..0000000
--- a/SOURCES/libvirt-qemu-block-Don-t-skip-creation-of-luks-formatted-images.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From b3285cc15d305161dd0f3730690d6a441c906456 Mon Sep 17 00:00:00 2001
-Message-Id: <b3285cc15d305161dd0f3730690d6a441c906456@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:45 +0100
-Subject: [PATCH] qemu: block: Don't skip creation of 'luks' formatted images
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-libvirt treats 'luks' images as raw+encryption. The logic in
-qemuBlockStorageSourceCreateFormat skipped the creation if the requested
-image was raw but didn't take into account the encryption.
-
-This manifested itself e.g. when attempting to do a virsh blockcopy with
-the following XML:
-
-    <disk type='file' device='disk'>
-      <driver name='qemu' type='raw'/>
-      <source file='/tmp/enccpy'>
-        <encryption format='luks'>
-          <secret type='passphrase' uuid='0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f'/>
-        </encryption>
-      </source>
-    </disk>
-
-Where qemu would report the following error:
-
- unable to execute QEMU command 'blockdev-add': Volume is not in LUKS format
-
-rather than actually formatting the image first.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit f4e7c792d58cbd7318fc30519c551e4fe0cd98de)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1371022
-Message-Id: <1a89d76526af86e4d0437852802a5da0d2aed701.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index eab21bc107..22f03da485 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2479,7 +2479,8 @@ qemuBlockStorageSourceCreateFormat(virDomainObjPtr vm,
-     g_autoptr(virJSONValue) createformatprops = NULL;
-     int ret;
- 
--    if (src->format == VIR_STORAGE_FILE_RAW)
-+    if (src->format == VIR_STORAGE_FILE_RAW &&
-+        !src->encryption)
-         return 0;
- 
-     if (qemuBlockStorageSourceCreateGetFormatProps(src, backingStore,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-block-Extract-calls-of-qemuBlockGetNamedNodeData-into-a-helper-function.patch b/SOURCES/libvirt-qemu-block-Extract-calls-of-qemuBlockGetNamedNodeData-into-a-helper-function.patch
deleted file mode 100644
index 0b7e65e..0000000
--- a/SOURCES/libvirt-qemu-block-Extract-calls-of-qemuBlockGetNamedNodeData-into-a-helper-function.patch
+++ /dev/null
@@ -1,122 +0,0 @@
-From 70cf28f452df43cec98387b3039c3b8c5dda10d4 Mon Sep 17 00:00:00 2001
-Message-Id: <70cf28f452df43cec98387b3039c3b8c5dda10d4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:16 +0100
-Subject: [PATCH] qemu: block: Extract calls of qemuBlockGetNamedNodeData into
- a helper function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Create a wrapper for qemuBlockGetNamedNodeData named
-qemuBlockGetNamedNodeData. The purpose of the wrapper is to integrate
-the monitor handling functionality and in the future possible
-qemuCaps-based flags.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5ddfac11698ec230626e12d077206210424c9bb2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <5527853a9417cf84812cadb842b934ff67de1ea4.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c |  5 +----
- src/qemu/qemu_block.c  | 20 ++++++++++++++++++++
- src/qemu/qemu_block.h  |  4 ++++
- src/qemu/qemu_driver.c | 16 ++++------------
- 4 files changed, 29 insertions(+), 16 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 23518a5d40..8b1e9a7e19 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -830,10 +830,7 @@ qemuBackupBegin(virDomainObjPtr vm,
-             goto endjob;
-     }
- 
--    if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, QEMU_ASYNC_JOB_BACKUP) < 0)
--        goto endjob;
--    blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
--    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0 || !blockNamedNodeData)
-+    if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_BACKUP)))
-         goto endjob;
- 
-     if ((ndd = qemuBackupDiskPrepareData(vm, def, incremental, blockNamedNodeData,
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 22f03da485..13e240fdac 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2670,3 +2670,23 @@ qemuBlockNamedNodeDataGetBitmapByName(virHashTablePtr blockNamedNodeData,
- 
-     return NULL;
- }
-+
-+
-+virHashTablePtr
-+qemuBlockGetNamedNodeData(virDomainObjPtr vm,
-+                          qemuDomainAsyncJob asyncJob)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    virQEMUDriverPtr driver = priv->driver;
-+    g_autoptr(virHashTable) blockNamedNodeData = NULL;
-+
-+    if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
-+        return NULL;
-+
-+    blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
-+
-+    if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
-+        return NULL;
-+
-+    return g_steal_pointer(&blockNamedNodeData);
-+}
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 1a38e0eccf..68646cbf2e 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -208,3 +208,7 @@ qemuBlockNamedNodeDataBitmapPtr
- qemuBlockNamedNodeDataGetBitmapByName(virHashTablePtr blockNamedNodeData,
-                                       virStorageSourcePtr src,
-                                       const char *bitmap);
-+
-+virHashTablePtr
-+qemuBlockGetNamedNodeData(virDomainObjPtr vm,
-+                          qemuDomainAsyncJob asyncJob);
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index e19e1da0bb..f7ad2dca28 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -15622,15 +15622,9 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
-     if (!(actions = virJSONValueNewArray()))
-         return -1;
- 
--    if (blockdev) {
--        if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
--            return -1;
--
--        blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
--
--        if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
--            return -1;
--    }
-+    if (blockdev &&
-+        !(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, asyncJob)))
-+        return -1;
- 
-     /* prepare a list of objects to use in the vm definition so that we don't
-      * have to roll back later */
-@@ -18334,9 +18328,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
-                                                                           priv->qemuCaps)))
-                 goto endjob;
-         } else {
--            qemuDomainObjEnterMonitor(driver, vm);
--            blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
--            if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockNamedNodeData)
-+            if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-                 goto endjob;
- 
-             if (qemuBlockStorageSourceCreateDetectSize(blockNamedNodeData,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-block-Extract-formatting-of-cookie-string.patch b/SOURCES/libvirt-qemu-block-Extract-formatting-of-cookie-string.patch
deleted file mode 100644
index aae59f8..0000000
--- a/SOURCES/libvirt-qemu-block-Extract-formatting-of-cookie-string.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From 41504cefb5ab3f473680bd7498fc940811cefc26 Mon Sep 17 00:00:00 2001
-Message-Id: <41504cefb5ab3f473680bd7498fc940811cefc26@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:06 +0100
-Subject: [PATCH] qemu: block: Extract formatting of cookie string
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduce qemuBlockStorageSourceGetCookieString which does the
-concatenation so that we can reuse it later.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit bafd2e94fabfe12bdc64c9972f56af536e6ad0eb)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-
-Conflicts:
-	src/qemu/qemu_block.c
-	src/qemu/qemu_block.h
-
-        Context, a8bcbb42172 not backported
-
-	src/qemu/qemu_domain.c
-
-        virBufferTrim change not backported, the conflict is on a
-        previous conflict resolution
-Message-Id: <bbc4bf3b1ebdc99aec680487c22d2a68c1cdda5f.1585063415.git.pkrempa@redhat.com>
-
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c  | 25 +++++++++++++++++++++++++
- src/qemu/qemu_block.h  |  3 +++
- src/qemu/qemu_domain.c | 13 +------------
- 3 files changed, 29 insertions(+), 12 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 73a424f7a8..1f48f559e3 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3306,3 +3306,28 @@ qemuBlockReopenReadOnly(virDomainObjPtr vm,
- 
-     return 0;
- }
-+
-+
-+/**
-+ * qemuBlockStorageSourceGetCookieString:
-+ * @src: storage source
-+ *
-+ * Returns a properly formatted string representing cookies of @src in format
-+ * accepted by qemu.
-+ */
-+char *
-+qemuBlockStorageSourceGetCookieString(virStorageSourcePtr src)
-+{
-+    virBuffer buf = VIR_BUFFER_INITIALIZER;
-+    size_t i;
-+
-+    for (i = 0; i < src->ncookies; i++) {
-+        virStorageNetCookieDefPtr cookie = src->cookies[i];
-+
-+        virBufferAsprintf(&buf, "%s=%s; ", cookie->name, cookie->value);
-+    }
-+
-+    virBufferTrim(&buf, "; ", -1);
-+
-+    return virBufferContentAndReset(&buf);
-+}
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 506957c3d5..4e7708ce74 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -255,3 +255,6 @@ int
- qemuBlockReopenReadOnly(virDomainObjPtr vm,
-                         virStorageSourcePtr src,
-                         qemuDomainAsyncJob asyncJob);
-+
-+char *
-+qemuBlockStorageSourceGetCookieString(virStorageSourcePtr src);
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 3d31e176d1..4007b4dbda 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1747,18 +1747,7 @@ qemuDomainSecretStorageSourcePrepareCookies(qemuDomainObjPrivatePtr priv,
-                                             const char *aliasprotocol)
- {
-     g_autofree char *secretalias = qemuAliasForSecret(aliasprotocol, "httpcookie");
--    g_autofree char *cookies = NULL;
--    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
--    size_t i;
--
--    for (i = 0; i < src->ncookies; i++) {
--        virStorageNetCookieDefPtr cookie = src->cookies[i];
--
--        virBufferAsprintf(&buf, "%s=%s; ", cookie->name, cookie->value);
--    }
--
--    virBufferTrim(&buf, "; ", -1);
--    cookies = virBufferContentAndReset(&buf);
-+    g_autofree char *cookies = qemuBlockStorageSourceGetCookieString(src);
- 
-     return qemuDomainSecretAESSetup(priv, secretalias, NULL,
-                                     (uint8_t *) cookies, strlen(cookies));
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemu-block-Implement-helpers-for-dealing-with-bitmaps-during-block-commit.patch b/SOURCES/libvirt-qemu-block-Implement-helpers-for-dealing-with-bitmaps-during-block-commit.patch
deleted file mode 100644
index 5080fe1..0000000
--- a/SOURCES/libvirt-qemu-block-Implement-helpers-for-dealing-with-bitmaps-during-block-commit.patch
+++ /dev/null
@@ -1,287 +0,0 @@
-From 3e71c9c766a0452e0bae3b4593f3cba3d1caec60 Mon Sep 17 00:00:00 2001
-Message-Id: <3e71c9c766a0452e0bae3b4593f3cba3d1caec60@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:24 +0100
-Subject: [PATCH] qemu: block: Implement helpers for dealing with bitmaps
- during block commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-qemuBlockBitmapsHandleCommitStart prepares for disabling the bitmaps in
-the 'base' of the commit job so that the bitmaps are not dirtied by the
-commit job. This needs to be done prior to start of the commit job.
-
-qemuBlockBitmapsHandleCommitFinish then calculates the necessary merges
-that agregate all the bitmaps between the commited images and write them
-into the base bitmap.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 1753f605506e28eb42bc5bb6fa9abe8fcbe6fb9b)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <c0624f94e802043ca10819aaaa9111ae230cfb7f.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 219 ++++++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_block.h |  14 +++
- 2 files changed, 233 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index b4da323610..21c1ad9618 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2988,6 +2988,225 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
- }
- 
- 
-+/**
-+ * @topsrc: virStorageSource representing 'top' of the job
-+ * @basesrc: virStorageSource representing 'base' of the job
-+ * @blockNamedNodeData: hash table containing data about bitmaps
-+ * @actions: filled with arguments for a 'transaction' command
-+ * @disabledBitmapsBase: filled with a list of bitmap names which must be disabled
-+ *
-+ * Prepares data for correctly handling bitmaps during the start of a commit
-+ * job. The bitmaps in the 'base' image must be disabled, so that the writes
-+ * done by the blockjob don't dirty the enabled bitmaps.
-+ *
-+ * @actions and @disabledBitmapsBase are untouched if no bitmaps need
-+ * to be disabled.
-+ */
-+int
-+qemuBlockBitmapsHandleCommitStart(virStorageSourcePtr topsrc,
-+                                  virStorageSourcePtr basesrc,
-+                                  virHashTablePtr blockNamedNodeData,
-+                                  virJSONValuePtr *actions,
-+                                  char ***disabledBitmapsBase)
-+{
-+    g_autoptr(virJSONValue) act = virJSONValueNewArray();
-+    VIR_AUTOSTRINGLIST bitmaplist = NULL;
-+    size_t curbitmapstr = 0;
-+    qemuBlockNamedNodeDataPtr entry;
-+    bool disable_bitmaps = false;
-+    size_t i;
-+
-+    if (!(entry = virHashLookup(blockNamedNodeData, basesrc->nodeformat)))
-+        return 0;
-+
-+    bitmaplist = g_new0(char *, entry->nbitmaps);
-+
-+    for (i = 0; i < entry->nbitmaps; i++) {
-+        qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
-+
-+        if (!bitmap->recording || bitmap->inconsistent ||
-+            !qemuBlockBitmapChainIsValid(topsrc, bitmap->name, blockNamedNodeData))
-+            continue;
-+
-+        disable_bitmaps = true;
-+
-+        if (qemuMonitorTransactionBitmapDisable(act, basesrc->nodeformat,
-+                                                bitmap->name) < 0)
-+            return -1;
-+
-+        bitmaplist[curbitmapstr++] = g_strdup(bitmap->name);
-+    }
-+
-+    if (disable_bitmaps) {
-+        *actions = g_steal_pointer(&act);
-+        *disabledBitmapsBase = g_steal_pointer(&bitmaplist);
-+    }
-+
-+    return 0;
-+}
-+
-+
-+struct qemuBlockBitmapsHandleCommitData {
-+    bool skip;
-+    bool create;
-+    bool enable;
-+    const char *basenode;
-+    virJSONValuePtr merge;
-+    unsigned long long granularity;
-+    bool persistent;
-+};
-+
-+
-+static void
-+qemuBlockBitmapsHandleCommitDataFree(void *opaque)
-+{
-+    struct qemuBlockBitmapsHandleCommitData *data = opaque;
-+
-+    virJSONValueFree(data->merge);
-+    g_free(data);
-+}
-+
-+
-+static int
-+qemuBlockBitmapsHandleCommitFinishIterate(void *payload,
-+                                          const void *entryname,
-+                                          void *opaque)
-+{
-+    struct qemuBlockBitmapsHandleCommitData *data = payload;
-+    const char *bitmapname = entryname;
-+    virJSONValuePtr actions = opaque;
-+
-+    if (data->skip)
-+        return 0;
-+
-+    if (data->create) {
-+        if (qemuMonitorTransactionBitmapAdd(actions, data->basenode, bitmapname,
-+                                            data->persistent, !data->enable,
-+                                            data->granularity) < 0)
-+            return -1;
-+    } else {
-+        if (data->enable &&
-+            qemuMonitorTransactionBitmapEnable(actions, data->basenode, bitmapname) < 0)
-+            return -1;
-+    }
-+
-+    if (data->merge &&
-+        qemuMonitorTransactionBitmapMerge(actions, data->basenode, bitmapname,
-+                                          &data->merge) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
-+/**
-+ * @topsrc: virStorageSource representing 'top' of the job
-+ * @basesrc: virStorageSource representing 'base' of the job
-+ * @blockNamedNodeData: hash table containing data about bitmaps
-+ * @actions: filled with arguments for a 'transaction' command
-+ * @disabledBitmapsBase: bitmap names which were disabled
-+ *
-+ * Calculates the necessary bitmap merges/additions/enablements to properly
-+ * handle commit of images from 'top' into 'base'. The necessary operations
-+ * in the form of arguments of the 'transaction' command are filled into
-+ * 'actions' if there is anything to do. Otherwise NULL is returned.
-+ */
-+int
-+qemuBlockBitmapsHandleCommitFinish(virStorageSourcePtr topsrc,
-+                                   virStorageSourcePtr basesrc,
-+                                   virHashTablePtr blockNamedNodeData,
-+                                   virJSONValuePtr *actions,
-+                                   char **disabledBitmapsBase)
-+{
-+    g_autoptr(virJSONValue) act = virJSONValueNewArray();
-+    virStorageSourcePtr n;
-+    qemuBlockNamedNodeDataPtr entry;
-+    g_autoptr(virHashTable) commitdata = NULL;
-+    struct qemuBlockBitmapsHandleCommitData *bitmapdata;
-+    size_t i;
-+
-+    commitdata = virHashNew(qemuBlockBitmapsHandleCommitDataFree);
-+
-+    for (n = topsrc; n != basesrc; n = n->backingStore) {
-+        if (!(entry = virHashLookup(blockNamedNodeData, n->nodeformat)))
-+            continue;
-+
-+        for (i = 0; i < entry->nbitmaps; i++) {
-+            qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
-+
-+            if (!(bitmapdata = virHashLookup(commitdata, bitmap->name))) {
-+                bitmapdata = g_new0(struct qemuBlockBitmapsHandleCommitData, 1);
-+
-+                /* we must mirror the state of the topmost bitmap and merge
-+                 * everything else */
-+                bitmapdata->create = true;
-+                bitmapdata->enable = bitmap->recording;
-+                bitmapdata->basenode = basesrc->nodeformat;
-+                bitmapdata->merge = virJSONValueNewArray();
-+                bitmapdata->granularity = bitmap->granularity;
-+                bitmapdata->persistent = bitmap->persistent;
-+
-+                if (virHashAddEntry(commitdata, bitmap->name, bitmapdata) < 0) {
-+                    qemuBlockBitmapsHandleCommitDataFree(bitmapdata);
-+                    return -1;
-+                }
-+            }
-+
-+            if (bitmap->inconsistent ||
-+                !qemuBlockBitmapChainIsValid(topsrc, bitmap->name, blockNamedNodeData))
-+                bitmapdata->skip = true;
-+
-+            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(bitmapdata->merge,
-+                                                                 n->nodeformat,
-+                                                                 bitmap->name) < 0)
-+                return -1;
-+        }
-+    }
-+
-+    if ((entry = virHashLookup(blockNamedNodeData, basesrc->nodeformat))) {
-+        /* note that all bitmaps in 'base' were disabled when commit was started */
-+        for (i = 0; i < entry->nbitmaps; i++) {
-+            qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
-+
-+            if ((bitmapdata = virHashLookup(commitdata, bitmap->name))) {
-+                bitmapdata->create = false;
-+            } else {
-+                if (disabledBitmapsBase) {
-+                    char **disabledbitmaps;
-+
-+                    for (disabledbitmaps = disabledBitmapsBase; *disabledbitmaps; disabledbitmaps++) {
-+                        if (STREQ(*disabledBitmapsBase, bitmap->name)) {
-+                            bitmapdata = g_new0(struct qemuBlockBitmapsHandleCommitData, 1);
-+
-+                            bitmapdata->create = false;
-+                            bitmapdata->enable = true;
-+                            bitmapdata->basenode = basesrc->nodeformat;
-+                            bitmapdata->granularity = bitmap->granularity;
-+                            bitmapdata->persistent = bitmap->persistent;
-+
-+                            if (virHashAddEntry(commitdata, bitmap->name, bitmapdata) < 0) {
-+                                qemuBlockBitmapsHandleCommitDataFree(bitmapdata);
-+                                return -1;
-+                            }
-+
-+                            break;
-+                        }
-+                    }
-+                }
-+            }
-+        }
-+    }
-+
-+    if (virHashForEach(commitdata, qemuBlockBitmapsHandleCommitFinishIterate, act) < 0)
-+        return -1;
-+
-+    if (virJSONValueArraySize(act) > 0)
-+        *actions = g_steal_pointer(&act);
-+
-+    return 0;
-+}
-+
-+
- /**
-  * qemuBlockReopenFormat:
-  * @vm: domain object
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index e012052352..75b25bfea5 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -232,6 +232,20 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
-                                 bool shallow,
-                                 virJSONValuePtr *actions);
- 
-+int
-+qemuBlockBitmapsHandleCommitStart(virStorageSourcePtr topsrc,
-+                                  virStorageSourcePtr basesrc,
-+                                  virHashTablePtr blockNamedNodeData,
-+                                  virJSONValuePtr *actions,
-+                                  char ***disabledBitmapsBase);
-+
-+int
-+qemuBlockBitmapsHandleCommitFinish(virStorageSourcePtr topsrc,
-+                                   virStorageSourcePtr basesrc,
-+                                   virHashTablePtr blockNamedNodeData,
-+                                   virJSONValuePtr *actions,
-+                                   char **disabledBitmapsBase);
-+
- int
- qemuBlockReopenReadWrite(virDomainObjPtr vm,
-                          virStorageSourcePtr src,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-block-Implement-readahead-and-timeout-properties-for-curl-driver.patch b/SOURCES/libvirt-qemu-block-Implement-readahead-and-timeout-properties-for-curl-driver.patch
deleted file mode 100644
index 39c4c85..0000000
--- a/SOURCES/libvirt-qemu-block-Implement-readahead-and-timeout-properties-for-curl-driver.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From f1650a0ed4fc226325e5a9772e6d04a95457f470 Mon Sep 17 00:00:00 2001
-Message-Id: <f1650a0ed4fc226325e5a9772e6d04a95457f470@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:06 +0100
-Subject: [PATCH] qemu: block: Implement readahead and timeout properties for
- 'curl' driver
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Pass in the correct fields.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9cac141cd67d2213074fd146b58812da8fe30603)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <71cba24b72024183752fe9873d0fd5f01caf122b.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                                       | 2 ++
- tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args | 6 ++++--
- tests/qemuxml2argvdata/disk-network-http.xml                | 2 ++
- 3 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 80a8c7296d..b077e2e02f 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -722,6 +722,8 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-                                           "S:password-secret", passwordalias,
-                                           "T:sslverify", src->sslverify,
-                                           "S:cookie-secret", cookiealias,
-+                                          "P:timeout", src->timeout,
-+                                          "P:readahead", src->readahead,
-                                           NULL));
- 
-     return ret;
-diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-index cbb69e16a9..2f2849ebdf 100644
---- a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-@@ -28,13 +28,15 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -boot strict=on \
- -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
- -blockdev '{"driver":"http","url":"http://example.org:80/test.img",\
--"node-name":"libvirt-4-storage","auto-read-only":true,"discard":"unmap"}' \
-+"timeout":1234,"node-name":"libvirt-4-storage","auto-read-only":true,\
-+"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-4-format","read-only":false,"driver":"raw",\
- "file":"libvirt-4-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=libvirt-4-format,\
- id=virtio-disk0,bootindex=1 \
- -blockdev '{"driver":"https","url":"https://example.org:443/test2.img",\
--"node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \
-+"readahead":1024,"node-name":"libvirt-3-storage","auto-read-only":true,\
-+"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw",\
- "file":"libvirt-3-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-3-format,\
-diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
-index 6acf75cf65..20024c732e 100644
---- a/tests/qemuxml2argvdata/disk-network-http.xml
-+++ b/tests/qemuxml2argvdata/disk-network-http.xml
-@@ -17,6 +17,7 @@
-       <driver name='qemu' type='raw'/>
-       <source protocol='http' name='test.img'>
-         <host name='example.org'/>
-+        <timeout seconds='1234'/>
-       </source>
-       <target dev='vda' bus='virtio'/>
-     </disk>
-@@ -24,6 +25,7 @@
-       <driver name='qemu' type='raw'/>
-       <source protocol='https' name='test2.img'>
-         <host name='example.org'/>
-+        <readahead size='1024'/>
-       </source>
-       <target dev='vdb' bus='virtio'/>
-     </disk>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-block-Implement-ssl-verification-configuration.patch b/SOURCES/libvirt-qemu-block-Implement-ssl-verification-configuration.patch
deleted file mode 100644
index d285e0b..0000000
--- a/SOURCES/libvirt-qemu-block-Implement-ssl-verification-configuration.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 35ea15a7ddb570301c6dceb01e13e6f8ef6ba478 Mon Sep 17 00:00:00 2001
-Message-Id: <35ea15a7ddb570301c6dceb01e13e6f8ef6ba478@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:01 +0100
-Subject: [PATCH] qemu: block: Implement ssl verification configuration
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow disabling of SSL certificate validation for HTTPS and FTPS drives
-in qemu.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 304da9376c972413d77cc6c7f094a1b39d651ea8)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <a36c004cf393076f7d6cbfa377909c91b99e768d.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                                       | 1 +
- tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args | 3 ++-
- tests/qemuxml2argvdata/disk-network-http.xml                | 1 +
- 3 files changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 5144cf266f..e60975a142 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -713,6 +713,7 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-                                           "s:url", uristr,
-                                           "S:username", username,
-                                           "S:password-secret", passwordalias,
-+                                          "T:sslverify", src->sslverify,
-                                           NULL));
- 
-     return ret;
-diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-index d39f357072..86e4597a81 100644
---- a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-@@ -46,7 +46,8 @@ id=virtio-disk1 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-2-format,\
- id=virtio-disk2 \
- -blockdev '{"driver":"https","url":"https://example.org:1234/test4.img",\
--"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-+"sslverify":false,"node-name":"libvirt-1-storage","auto-read-only":true,\
-+"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw",\
- "file":"libvirt-1-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-1-format,\
-diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
-index 83a9865c83..8c475aec1d 100644
---- a/tests/qemuxml2argvdata/disk-network-http.xml
-+++ b/tests/qemuxml2argvdata/disk-network-http.xml
-@@ -38,6 +38,7 @@
-       <driver name='qemu' type='raw'/>
-       <source protocol='https' name='test4.img'>
-         <host name='example.org' port='1234'/>
-+        <ssl verify='no'/>
-       </source>
-       <target dev='vdd' bus='virtio'/>
-     </disk>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-block-Introduce-function-to-calculate-bitmap-handling-for-block-copy.patch b/SOURCES/libvirt-qemu-block-Introduce-function-to-calculate-bitmap-handling-for-block-copy.patch
deleted file mode 100644
index 89209e3..0000000
--- a/SOURCES/libvirt-qemu-block-Introduce-function-to-calculate-bitmap-handling-for-block-copy.patch
+++ /dev/null
@@ -1,189 +0,0 @@
-From 0890cd78e9391625a591a7a9327601ee79ba6636 Mon Sep 17 00:00:00 2001
-Message-Id: <0890cd78e9391625a591a7a9327601ee79ba6636@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:25 +0100
-Subject: [PATCH] qemu: block: Introduce function to calculate bitmap handling
- for block-copy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a function calculating which bitmaps to copy to the mirror during
-a block-copy operation.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 26f07f68707e16bef3d48e1c0b138791ab5df346)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <6d4bd72b975f9f690cb34784ed22bb5fad6bbf2c.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 138 ++++++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_block.h |   7 +++
- 2 files changed, 145 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index b19290e677..63116ef5f2 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2728,3 +2728,141 @@ qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
- 
-     return chain_started;
- }
-+
-+
-+struct qemuBlockBitmapsHandleBlockcopyConcatData {
-+    virHashTablePtr bitmaps_merge;
-+    virJSONValuePtr actions;
-+    const char *mirrornodeformat;
-+    bool has_bitmaps;
-+};
-+
-+
-+static int
-+qemuBlockBitmapsHandleBlockcopyConcatActions(void *payload,
-+                                             const void *name,
-+                                             void *opaque)
-+{
-+    struct qemuBlockBitmapsHandleBlockcopyConcatData *data = opaque;
-+    virJSONValuePtr createactions = payload;
-+    const char *bitmapname = name;
-+    g_autoptr(virJSONValue) mergebitmaps = virHashSteal(data->bitmaps_merge, bitmapname);
-+
-+    data->has_bitmaps = true;
-+
-+    virJSONValueArrayConcat(data->actions, createactions);
-+
-+    if (qemuMonitorTransactionBitmapMerge(data->actions,
-+                                          data->mirrornodeformat,
-+                                          bitmapname,
-+                                          &mergebitmaps) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
-+/**
-+ * qemuBlockBitmapsHandleBlockcopy:
-+ * @src: disk source
-+ * @mirror: mirror source
-+ * @blockNamedNodeData: hash table containing data about bitmaps
-+ * @shallow: whether shallow copy is requested
-+ * @actions: filled with arguments for a 'transaction' command
-+ *
-+ * Calculates which bitmaps to copy and merge during a virDomainBlockCopy job.
-+ * This is designed to be called when the job is already synchronised as it
-+ * may result in active bitmaps being created.
-+ *
-+ * Returns 0 on success and -1 on error. If @actions is NULL when 0 is returned
-+ * there are no actions to perform for the given job.
-+ */
-+int
-+qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
-+                                virStorageSourcePtr mirror,
-+                                virHashTablePtr blockNamedNodeData,
-+                                bool shallow,
-+                                virJSONValuePtr *actions)
-+{
-+    g_autoptr(virHashTable) bitmaps = virHashNew(virJSONValueHashFree);
-+    g_autoptr(virHashTable) bitmaps_merge = virHashNew(virJSONValueHashFree);
-+    g_autoptr(virHashTable) bitmaps_skip = virHashNew(NULL);
-+    g_autoptr(virJSONValue) tmpactions = virJSONValueNewArray();
-+    qemuBlockNamedNodeDataPtr entry;
-+    virStorageSourcePtr n;
-+    size_t i;
-+    struct qemuBlockBitmapsHandleBlockcopyConcatData data = { .bitmaps_merge = bitmaps_merge,
-+                                                              .actions = tmpactions,
-+                                                              .mirrornodeformat = mirror->nodeformat,
-+                                                              .has_bitmaps = false, };
-+
-+    for (n = src; n; n = n->backingStore) {
-+        if (!(entry = virHashLookup(blockNamedNodeData, n->nodeformat)))
-+            continue;
-+
-+        for (i = 0; i < entry->nbitmaps; i++) {
-+            qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
-+            virJSONValuePtr bitmap_merge;
-+
-+            if (virHashHasEntry(bitmaps_skip, bitmap->name))
-+                continue;
-+
-+            if (!(bitmap_merge = virHashLookup(bitmaps_merge, bitmap->name))) {
-+                g_autoptr(virJSONValue) tmp = NULL;
-+                bool disabled = !bitmap->recording;
-+
-+                /* disable any non top-layer bitmaps */
-+                if (n != src)
-+                    disabled = true;
-+
-+                if (!bitmap->persistent ||
-+                    !(qemuBlockBitmapChainIsValid(n, bitmap->name,
-+                                                  blockNamedNodeData))) {
-+                    ignore_value(virHashAddEntry(bitmaps_skip, bitmap->name, NULL));
-+                    continue;
-+                }
-+
-+                /* prepare the data for adding the bitmap to the mirror */
-+                tmp = virJSONValueNewArray();
-+
-+                if (qemuMonitorTransactionBitmapAdd(tmp,
-+                                                    mirror->nodeformat,
-+                                                    bitmap->name,
-+                                                    true,
-+                                                    disabled,
-+                                                    bitmap->granularity) < 0)
-+                    return -1;
-+
-+                if (virHashAddEntry(bitmaps, bitmap->name, tmp) < 0)
-+                    return -1;
-+
-+                tmp = NULL;
-+
-+                /* prepare array for merging all the bitmaps from the original chain */
-+                tmp = virJSONValueNewArray();
-+
-+                if (virHashAddEntry(bitmaps_merge, bitmap->name, tmp) < 0)
-+                    return -1;
-+
-+                bitmap_merge = g_steal_pointer(&tmp);
-+            }
-+
-+            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(bitmap_merge,
-+                                                                 n->nodeformat,
-+                                                                 bitmap->name) < 0)
-+                return -1;
-+        }
-+
-+        if (shallow)
-+            break;
-+    }
-+
-+    if (virHashForEach(bitmaps, qemuBlockBitmapsHandleBlockcopyConcatActions,
-+                       &data) < 0)
-+        return -1;
-+
-+    if (data.has_bitmaps)
-+        *actions = g_steal_pointer(&tmpactions);
-+
-+    return 0;
-+}
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index cf51b9bf4e..a816190bb7 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -217,3 +217,10 @@ bool
- qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
-                             const char *bitmapname,
-                             virHashTablePtr blockNamedNodeData);
-+
-+int
-+qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
-+                                virStorageSourcePtr mirror,
-+                                virHashTablePtr blockNamedNodeData,
-+                                bool shallow,
-+                                virJSONValuePtr *actions);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-block-Properly-format-storage-slice-into-backing-store-strings.patch b/SOURCES/libvirt-qemu-block-Properly-format-storage-slice-into-backing-store-strings.patch
deleted file mode 100644
index 7c28b70..0000000
--- a/SOURCES/libvirt-qemu-block-Properly-format-storage-slice-into-backing-store-strings.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From 4d6f00b6dc1d17761ea5bd3656d0e60e2f6cfa61 Mon Sep 17 00:00:00 2001
-Message-Id: <4d6f00b6dc1d17761ea5bd3656d0e60e2f6cfa61@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:22 +0100
-Subject: [PATCH] qemu: block: Properly format storage slice into backing store
- strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When creating overlay images e.g. for snapshots or when merging
-snapshots we often specify the backing store string to use. Make the
-formatter aware of backing chain entries which have a <slice>
-configured so that we record it properly. Otherwise such images
-would not work without the XML (when detecting the backing chain).
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 73ca20146700c82e257b02ff8296e42a92629c58)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <68328ece6d627b223d5c7f56c5286fc5d0d04502.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 84 ++++++++++++++++++++++++++-----------------
- 1 file changed, 51 insertions(+), 33 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 1147f4d3af..387a2db2e6 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1930,44 +1930,48 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src)
- {
-     int actualType = virStorageSourceGetActualType(src);
-     g_autoptr(virJSONValue) backingProps = NULL;
-+    g_autoptr(virJSONValue) sliceProps = NULL;
-+    virJSONValuePtr props = NULL;
-     g_autoptr(virURI) uri = NULL;
-     g_autofree char *backingJSON = NULL;
-     char *ret = NULL;
- 
--    if (virStorageSourceIsLocalStorage(src)) {
--        ret = g_strdup(src->path);
--        return ret;
--    }
--
--    /* generate simplified URIs for the easy cases */
--    if (actualType == VIR_STORAGE_TYPE_NETWORK &&
--        src->nhosts == 1 &&
--        src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
--
--        switch ((virStorageNetProtocol) src->protocol) {
--        case VIR_STORAGE_NET_PROTOCOL_NBD:
--        case VIR_STORAGE_NET_PROTOCOL_HTTP:
--        case VIR_STORAGE_NET_PROTOCOL_HTTPS:
--        case VIR_STORAGE_NET_PROTOCOL_FTP:
--        case VIR_STORAGE_NET_PROTOCOL_FTPS:
--        case VIR_STORAGE_NET_PROTOCOL_TFTP:
--        case VIR_STORAGE_NET_PROTOCOL_ISCSI:
--        case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
--            if (!(uri = qemuBlockStorageSourceGetURI(src)))
--                return NULL;
--
--            if (!(ret = virURIFormat(uri)))
--                return NULL;
--
-+    if (!src->sliceStorage) {
-+        if (virStorageSourceIsLocalStorage(src)) {
-+            ret = g_strdup(src->path);
-             return ret;
-+        }
- 
--        case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
--        case VIR_STORAGE_NET_PROTOCOL_RBD:
--        case VIR_STORAGE_NET_PROTOCOL_VXHS:
--        case VIR_STORAGE_NET_PROTOCOL_SSH:
--        case VIR_STORAGE_NET_PROTOCOL_LAST:
--        case VIR_STORAGE_NET_PROTOCOL_NONE:
--            break;
-+        /* generate simplified URIs for the easy cases */
-+        if (actualType == VIR_STORAGE_TYPE_NETWORK &&
-+            src->nhosts == 1 &&
-+            src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
-+
-+            switch ((virStorageNetProtocol) src->protocol) {
-+            case VIR_STORAGE_NET_PROTOCOL_NBD:
-+            case VIR_STORAGE_NET_PROTOCOL_HTTP:
-+            case VIR_STORAGE_NET_PROTOCOL_HTTPS:
-+            case VIR_STORAGE_NET_PROTOCOL_FTP:
-+            case VIR_STORAGE_NET_PROTOCOL_FTPS:
-+            case VIR_STORAGE_NET_PROTOCOL_TFTP:
-+            case VIR_STORAGE_NET_PROTOCOL_ISCSI:
-+            case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
-+                if (!(uri = qemuBlockStorageSourceGetURI(src)))
-+                    return NULL;
-+
-+                if (!(ret = virURIFormat(uri)))
-+                    return NULL;
-+
-+                return ret;
-+
-+            case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
-+            case VIR_STORAGE_NET_PROTOCOL_RBD:
-+            case VIR_STORAGE_NET_PROTOCOL_VXHS:
-+            case VIR_STORAGE_NET_PROTOCOL_SSH:
-+            case VIR_STORAGE_NET_PROTOCOL_LAST:
-+            case VIR_STORAGE_NET_PROTOCOL_NONE:
-+                break;
-+            }
-         }
-     }
- 
-@@ -1975,7 +1979,21 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src)
-     if (!(backingProps = qemuBlockStorageSourceGetBackendProps(src, false, true, false)))
-         return NULL;
- 
--    if (!(backingJSON = virJSONValueToString(backingProps, false)))
-+    props = backingProps;
-+
-+    if (src->sliceStorage) {
-+        if (virJSONValueObjectCreate(&sliceProps,
-+                                     "s:driver", "raw",
-+                                     "U:offset", src->sliceStorage->offset,
-+                                     "U:size", src->sliceStorage->size,
-+                                     "a:file", &backingProps,
-+                                     NULL) < 0)
-+            return NULL;
-+
-+        props = sliceProps;
-+    }
-+
-+    if (!(backingJSON = virJSONValueToString(props, false)))
-         return NULL;
- 
-     ret = g_strdup_printf("json:%s", backingJSON);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-block-Remove-active-write-bitmap-even-if-there-are-no-bitmaps-to-merge.patch b/SOURCES/libvirt-qemu-block-Remove-active-write-bitmap-even-if-there-are-no-bitmaps-to-merge.patch
deleted file mode 100644
index 78fb8d3..0000000
--- a/SOURCES/libvirt-qemu-block-Remove-active-write-bitmap-even-if-there-are-no-bitmaps-to-merge.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From cb297cdd8dc75abc8fd0d60dddf54cbe305d4c14 Mon Sep 17 00:00:00 2001
-Message-Id: <cb297cdd8dc75abc8fd0d60dddf54cbe305d4c14@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 21 Jul 2020 13:56:23 +0200
-Subject: [PATCH] qemu: block: Remove 'active-write' bitmap even if there are
- no bitmaps to merge
-
-The 'libvirt-tmp-activewrite' bitmap is added during the 'pivot'
-operation of block copy and active layer block commit operations
-regardless of whether there are any bitmaps to merge, but was not
-removed unless a bitmap was merged. This meant that subsequent attempts
-to merge into the same image would fail.
-
-Fix it by checking whether the 'libvirt-tmp-activewrite' would be used
-by the code and don't skip the code which would delete it.
-
-This is a regression introduced when we switched to the new code for
-block commit in <20a7abc2d2d> and for block copy in <7bfff40fdfe5>. The
-actual bug originates from <4fa8654ece>.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1857735
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 9d039863e2cae227cc73b7a886b40be5e5218a12)
-
-rhel-8.3: https://bugzilla.redhat.com/show_bug.cgi?id=1857779
-rhel-av-8.2.1: not cloned yet
-Message-Id: <4fea6a40be534d5a6fe7aad88d6bee1c3e77dcfb.1595332476.git.pkrempa@redhat.com>
-
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_block.c                                    | 3 ++-
- tests/qemublocktestdata/bitmapblockcommit/empty          | 9 +++++++++
- .../bitmapblockcopy/empty-deep-out.json                  | 9 +++++++++
- .../bitmapblockcopy/empty-shallow-out.json               | 9 +++++++++
- 4 files changed, 29 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 18c3861a2e..dc5fa3da03 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2935,7 +2935,7 @@ qemuBlockGetBitmapMergeActions(virStorageSourcePtr topsrc,
- 
-     if (!(bitmaps = qemuBlockGetBitmapMergeActionsGetBitmaps(topsrc, bitmapname,
-                                                              blockNamedNodeData)))
--        return 0;
-+        goto done;
- 
-     for (next = bitmaps; next; next = next->next) {
-         const char *curbitmap = next->data;
-@@ -2992,6 +2992,7 @@ qemuBlockGetBitmapMergeActions(virStorageSourcePtr topsrc,
-             return -1;
-     }
- 
-+ done:
-     if (writebitmapsrc &&
-         qemuMonitorTransactionBitmapRemove(act, writebitmapsrc->nodeformat,
-                                            "libvirt-tmp-activewrite") < 0)
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/empty b/tests/qemublocktestdata/bitmapblockcommit/empty
-index 9260011852..eddef0ddcd 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/empty
-+++ b/tests/qemublocktestdata/bitmapblockcommit/empty
-@@ -1 +1,10 @@
- merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json
-index e69de29bb2..99f2589ed4 100644
---- a/tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json
-+++ b/tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json
-index e69de29bb2..99f2589ed4 100644
---- a/tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json
-+++ b/tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-block-Support-VIR_DOMAIN_BLOCK_COMMIT-PULL-REBASE_RELATIVE-with-blockdev.patch b/SOURCES/libvirt-qemu-block-Support-VIR_DOMAIN_BLOCK_COMMIT-PULL-REBASE_RELATIVE-with-blockdev.patch
deleted file mode 100644
index 01f5c05..0000000
--- a/SOURCES/libvirt-qemu-block-Support-VIR_DOMAIN_BLOCK_COMMIT-PULL-REBASE_RELATIVE-with-blockdev.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From 9990d25b88bd2a03c5badb1e40da01030c4b68e4 Mon Sep 17 00:00:00 2001
-Message-Id: <9990d25b88bd2a03c5badb1e40da01030c4b68e4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:41 +0200
-Subject: [PATCH] qemu: block: Support
- VIR_DOMAIN_BLOCK_COMMIT/PULL/REBASE_RELATIVE with blockdev
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Preservation of the relative relationship requires us to load the
-backing store strings from the disk images. With blockdev we stopped
-detecting the backing chain if it's specified in the XML so the relative
-links were not loaded at that point. To preserve the functionality from
-the pre-blockdev without accessing the backing chain unnecessarily
-during VM startup we must refresh the relative links when relative
-block commit or block pull is requested.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1818655
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit ffc6249c79dbf980d116af7c7ed20222538a7c1c)
-Message-Id: <05fc4389e00afd4b8bf5653fb730c4d8f6a4516d.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_block.c  | 46 ++++++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_block.h  |  5 +++++
- src/qemu/qemu_driver.c |  8 ++++++++
- 3 files changed, 59 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index ba7318b074..e7577c1312 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3341,3 +3341,49 @@ qemuBlockStorageSourceGetCookieString(virStorageSourcePtr src)
- 
-     return virBufferContentAndReset(&buf);
- }
-+
-+
-+/**
-+ * qemuBlockUpdateRelativeBacking:
-+ * @vm: domain object
-+ * @src: starting point of the update
-+ * @topsrc: top level image in the backing chain (used to get security label)
-+ *
-+ * Reload data necessary for keeping backing store links starting from @src
-+ * relative.
-+ */
-+int
-+qemuBlockUpdateRelativeBacking(virDomainObjPtr vm,
-+                               virStorageSourcePtr src,
-+                               virStorageSourcePtr topsrc)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    virQEMUDriverPtr driver = priv->driver;
-+    virStorageSourcePtr n;
-+
-+    for (n = src; virStorageSourceHasBacking(n); n = n->backingStore) {
-+        g_autofree char *backingStoreStr = NULL;
-+        int rc;
-+
-+        if (n->backingStore->relPath)
-+            break;
-+
-+        if (!virStorageFileSupportsBackingChainTraversal(n))
-+            continue;
-+
-+        if (qemuDomainStorageFileInit(driver, vm, n, topsrc) < 0)
-+            return -1;
-+
-+        rc = virStorageFileGetBackingStoreStr(n, &backingStoreStr);
-+
-+        virStorageFileDeinit(n);
-+
-+        if (rc < 0)
-+            return rc;
-+
-+        if (backingStoreStr && virStorageIsRelative(backingStoreStr))
-+            n->backingStore->relPath = g_steal_pointer(&backingStoreStr);
-+    }
-+
-+    return 0;
-+}
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 4e7708ce74..06afa54115 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -258,3 +258,8 @@ qemuBlockReopenReadOnly(virDomainObjPtr vm,
- 
- char *
- qemuBlockStorageSourceGetCookieString(virStorageSourcePtr src);
-+
-+int
-+qemuBlockUpdateRelativeBacking(virDomainObjPtr vm,
-+                               virStorageSourcePtr src,
-+                               virStorageSourcePtr topsrc);
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 3c3c7b6041..27a50f60ef 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17740,6 +17740,10 @@ qemuDomainBlockPullCommon(virDomainObjPtr vm,
-                 goto endjob;
-             }
- 
-+            if (blockdev &&
-+                qemuBlockUpdateRelativeBacking(vm, disk->src, disk->src) < 0)
-+                goto endjob;
-+
-             if (virStorageFileGetRelativeBackingPath(disk->src->backingStore,
-                                                      baseSource,
-                                                      &backingPath) < 0)
-@@ -18867,6 +18871,10 @@ qemuDomainBlockCommit(virDomainPtr dom,
-             goto endjob;
-         }
- 
-+        if (blockdev && top_parent &&
-+            qemuBlockUpdateRelativeBacking(vm, top_parent, disk->src) < 0)
-+            goto endjob;
-+
-         if (virStorageFileGetRelativeBackingPath(topSource, baseSource,
-                                                  &backingPath) < 0)
-             goto endjob;
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemu-block-forbid-creation-of-storage-sources-with-slice.patch b/SOURCES/libvirt-qemu-block-forbid-creation-of-storage-sources-with-slice.patch
deleted file mode 100644
index 89cbf1f..0000000
--- a/SOURCES/libvirt-qemu-block-forbid-creation-of-storage-sources-with-slice.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From eb3af538c22a06297d7f423210cbebcdd008e0c1 Mon Sep 17 00:00:00 2001
-Message-Id: <eb3af538c22a06297d7f423210cbebcdd008e0c1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:18 +0100
-Subject: [PATCH] qemu: block: forbid creation of storage sources with <slice>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Specifically creating such images via libvirt during blockjobs would
-be much more hassle than it's worth. Just forbid them for now.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8c4303768846834893687db68ec265ce35aab5df)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <756f5928f4ba944fdec54f60724194a046276a01.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index b408d4c81f..1147f4d3af 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2529,6 +2529,12 @@ qemuBlockStorageSourceCreate(virDomainObjPtr vm,
-     int ret = -1;
-     int rc;
- 
-+    if (src->sliceStorage) {
-+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                       _("creation of images with slice type='storage' is not supported"));
-+        return -1;
-+    }
-+
-     if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-         goto cleanup;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-block-implement-helpers-for-blockdev-reopen.patch b/SOURCES/libvirt-qemu-block-implement-helpers-for-blockdev-reopen.patch
deleted file mode 100644
index 0917faa..0000000
--- a/SOURCES/libvirt-qemu-block-implement-helpers-for-blockdev-reopen.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-From 416b12099e379ec4c19e55a0414a448d140f3dc1 Mon Sep 17 00:00:00 2001
-Message-Id: <416b12099e379ec4c19e55a0414a448d140f3dc1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:16 +0100
-Subject: [PATCH] qemu: block: implement helpers for blockdev-reopen
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduce a set of helpers to call blockdev-reopen in certain scenarios
-
-Libvirt will use the QMP command to turn certain members of the backing
-chain read-write for bitmap manipulation and we'll also want to use it
-to replace/install the backing chain of a qcow2 format node.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 96063ce280a398493d7a78a35f674ed25078d849)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <f7b3a9cc523a22b9f1678483b6b8bf302ae7e1cc.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 101 ++++++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_block.h |   9 ++++
- 2 files changed, 110 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 141059ae81..b4da323610 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2986,3 +2986,104 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
- 
-     return 0;
- }
-+
-+
-+/**
-+ * qemuBlockReopenFormat:
-+ * @vm: domain object
-+ * @src: storage source to reopen
-+ * @asyncJob: qemu async job type
-+ *
-+ * Invokes the 'blockdev-reopen' command on the format layer of @src. This means
-+ * that @src must be already properly configured for the desired outcome. The
-+ * nodenames of @src are used to identify the specific image in qemu.
-+ */
-+static int
-+qemuBlockReopenFormat(virDomainObjPtr vm,
-+                      virStorageSourcePtr src,
-+                      qemuDomainAsyncJob asyncJob)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    virQEMUDriverPtr driver = priv->driver;
-+    g_autoptr(virJSONValue) reopenprops = NULL;
-+    int rc;
-+
-+    /* If we are lacking the object here, qemu might have opened an image with
-+     * a node name unknown to us */
-+    if (!src->backingStore) {
-+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                       _("can't reopen image with unknown presence of backing store"));
-+        return -1;
-+    }
-+
-+    if (!(reopenprops = qemuBlockStorageSourceGetBlockdevProps(src, src->backingStore)))
-+        return -1;
-+
-+    if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
-+        return -1;
-+
-+    rc = qemuMonitorBlockdevReopen(priv->mon, &reopenprops);
-+
-+    if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
-+/**
-+ * qemuBlockReopenReadWrite:
-+ * @vm: domain object
-+ * @src: storage source to reopen
-+ * @asyncJob: qemu async job type
-+ *
-+ * Wrapper that reopens @src read-write. We currently depend on qemu
-+ * reopening the storage with 'auto-read-only' enabled for us.
-+ * After successful reopen @src's 'readonly' flag is modified. Does nothing
-+ * if @src is already read-write.
-+ */
-+int
-+qemuBlockReopenReadWrite(virDomainObjPtr vm,
-+                         virStorageSourcePtr src,
-+                         qemuDomainAsyncJob asyncJob)
-+{
-+    if (!src->readonly)
-+        return 0;
-+
-+    src->readonly = false;
-+    if (qemuBlockReopenFormat(vm, src, asyncJob) < 0) {
-+        src->readonly = true;
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+
-+/**
-+ * qemuBlockReopenReadOnly:
-+ * @vm: domain object
-+ * @src: storage source to reopen
-+ * @asyncJob: qemu async job type
-+ *
-+ * Wrapper that reopens @src read-only. We currently depend on qemu
-+ * reopening the storage with 'auto-read-only' enabled for us.
-+ * After successful reopen @src's 'readonly' flag is modified. Does nothing
-+ * if @src is already read-only.
-+ */
-+int
-+qemuBlockReopenReadOnly(virDomainObjPtr vm,
-+                         virStorageSourcePtr src,
-+                         qemuDomainAsyncJob asyncJob)
-+{
-+    if (src->readonly)
-+        return 0;
-+
-+    src->readonly = true;
-+    if (qemuBlockReopenFormat(vm, src, asyncJob) < 0) {
-+        src->readonly = false;
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 197f5dae97..e012052352 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -231,3 +231,12 @@ qemuBlockBitmapsHandleBlockcopy(virStorageSourcePtr src,
-                                 virHashTablePtr blockNamedNodeData,
-                                 bool shallow,
-                                 virJSONValuePtr *actions);
-+
-+int
-+qemuBlockReopenReadWrite(virDomainObjPtr vm,
-+                         virStorageSourcePtr src,
-+                         qemuDomainAsyncJob asyncJob);
-+int
-+qemuBlockReopenReadOnly(virDomainObjPtr vm,
-+                        virStorageSourcePtr src,
-+                        qemuDomainAsyncJob asyncJob);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-blockcopy-Actually-unplug-unused-images-when-mirror-job-fails-to-start.patch b/SOURCES/libvirt-qemu-blockcopy-Actually-unplug-unused-images-when-mirror-job-fails-to-start.patch
deleted file mode 100644
index f6b9f59..0000000
--- a/SOURCES/libvirt-qemu-blockcopy-Actually-unplug-unused-images-when-mirror-job-fails-to-start.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 830d5044f0069e3e34e826d27478c9a19503adcf Mon Sep 17 00:00:00 2001
-Message-Id: <830d5044f0069e3e34e826d27478c9a19503adcf@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:36 +0100
-Subject: [PATCH] qemu: blockcopy: Actually unplug unused images when mirror
- job fails to start
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If a mirror job fails to start in -blockdev mode we'd not unplug the
-backing files we added first because the code on the error path checked
-the wrong value. 'rc' is used as status of the code which added the
-images, but the state of the 'block(dev)-mirror' call is stored in 'ret'
-at that point.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 623366d13066174e60067fa763ddc2c3d1db20ef)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1792195
-Message-Id: <5e9e1dd3db0f3137079f2fb29974778f8cf32879.1580824112.git.pkrempa@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 6163b13e91..83f24d7231 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18415,7 +18415,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
-     qemuBlockJobStarted(job, vm);
- 
-  endjob:
--    if (rc < 0 &&
-+    if (ret < 0 &&
-         virDomainObjIsActive(vm) &&
-         (data || crdata)) {
-         qemuDomainObjEnterMonitor(driver, vm);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-blockcopy-Allow-copy-of-read-only-disks-with-blockdev.patch b/SOURCES/libvirt-qemu-blockcopy-Allow-copy-of-read-only-disks-with-blockdev.patch
deleted file mode 100644
index c2f5b77..0000000
--- a/SOURCES/libvirt-qemu-blockcopy-Allow-copy-of-read-only-disks-with-blockdev.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 352140578bbab5afe3f711c88732b24c6332da1a Mon Sep 17 00:00:00 2001
-Message-Id: <352140578bbab5afe3f711c88732b24c6332da1a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 12 May 2020 17:24:11 +0200
-Subject: [PATCH] qemu: blockcopy: Allow copy of read-only disks with -blockdev
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-'blockdev-mirror' requires the write permission internally to do the
-copy. This means that we have to force the image to be read-write for
-the duration of the copy and can fix it after the copy is done.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1832204
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 65a12c467cd683809b4d445b8cf1c3ae250209b2)
-Message-Id: <296aeeaa0ab2b90e872c76c6f15eda080b749bdb.1589296861.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_blockjob.c | 5 +++++
- src/qemu/qemu_driver.c   | 9 +++++++++
- 2 files changed, 14 insertions(+)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 21a043d369..c80c71295b 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1281,6 +1281,7 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver,
-                                            qemuBlockJobDataPtr job,
-                                            qemuDomainAsyncJob asyncJob)
- {
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-     VIR_DEBUG("copy job '%s' on VM '%s' pivoted", job->name, vm->def->name);
- 
-     /* mirror may be NULL for copy job corresponding to migration */
-@@ -1296,6 +1297,10 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver,
-         !virStorageSourceIsBacking(job->disk->mirror->backingStore))
-         job->disk->mirror->backingStore = g_steal_pointer(&job->disk->src->backingStore);
- 
-+    if (job->disk->src->readonly &&
-+        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-+        ignore_value(qemuBlockReopenReadOnly(vm, job->disk->mirror, asyncJob));
-+
-     qemuBlockJobRewriteConfigDiskSource(vm, job->disk, job->disk->mirror);
- 
-     qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, job->disk->src);
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 7ae8641577..9f7d96c0b6 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18389,6 +18389,15 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
-                                          keepParentLabel) < 0)
-         goto endjob;
- 
-+    if (mirror->readonly) {
-+        if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
-+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                           _("copy of read-only disks is not supported"));
-+            goto endjob;
-+        }
-+        mirror->readonly = false;
-+    }
-+
-     /* we must initialize XML-provided chain prior to detecting to keep semantics
-      * with VM startup */
-     if (blockdev) {
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-blockcopy-Allow-late-opening-of-the-backing-chain-of-a-shallow-copy.patch b/SOURCES/libvirt-qemu-blockcopy-Allow-late-opening-of-the-backing-chain-of-a-shallow-copy.patch
deleted file mode 100644
index c7cdc1d..0000000
--- a/SOURCES/libvirt-qemu-blockcopy-Allow-late-opening-of-the-backing-chain-of-a-shallow-copy.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 7e60e728bc225b3499a3d1fad6b56d0ce8c40908 Mon Sep 17 00:00:00 2001
-Message-Id: <7e60e728bc225b3499a3d1fad6b56d0ce8c40908@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:39 +0100
-Subject: [PATCH] qemu: blockcopy: Allow late opening of the backing chain of a
- shallow copy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-oVirt used a quirk in the pre-blockdev semantics of drive-mirror which
-opened the backing chain of the mirror destination only once
-'block-job-complete' was called.
-
-Our introduction of blockdev made qemu open the backing chain images
-right at the start of the job. This broke oVirt's usage of this API
-because they copy the data into the backing chain during the time the
-block copy job is running.
-
-Re-introduce late open of the backing chain if qemu allows us to use
-blockdev-snapshot on write-only nodes as it can be used to install the
-backing chain even for an existing image now.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit cc7868a8b3cfa4a0062936c23e82e4a31923f724)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1803092
-Message-Id: <d37e660b9610d7a1cc42892ff3305cb477a8f98a.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 57 +++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 53 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 5a4e979907..441bb02b6b 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17556,10 +17556,12 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-                      qemuBlockJobDataPtr job,
-                      virDomainDiskDefPtr disk)
- {
-+    g_autoptr(qemuBlockStorageSourceChainData) chainattachdata = NULL;
-     int ret = -1;
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
-     g_autoptr(virJSONValue) actions = NULL;
-+    g_autoptr(virJSONValue) reopenactions = NULL;
- 
-     if (job->state != QEMU_BLOCKJOB_STATE_READY) {
-         virReportError(VIR_ERR_BLOCK_COPY_ACTIVE,
-@@ -17590,6 +17592,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         if (blockdev && !job->jobflagsmissing) {
-             g_autoptr(virHashTable) blockNamedNodeData = NULL;
-             bool shallow = job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-+            bool reuse = job->jobflags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT;
- 
-             if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-                 return -1;
-@@ -17598,6 +17601,27 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-                                                 blockNamedNodeData,
-                                                 shallow, &actions) < 0)
-                 return -1;
-+
-+            /* Open and install the backing chain of 'mirror' late if we can use
-+             * blockdev-snapshot to do it. This is to appease oVirt that wants
-+             * to copy data into the backing chain while the top image is being
-+             * copied shallow */
-+            if (reuse && shallow &&
-+                virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY) &&
-+                virStorageSourceHasBacking(disk->mirror)) {
-+
-+                if (!(chainattachdata = qemuBuildStorageSourceChainAttachPrepareBlockdev(disk->mirror->backingStore,
-+                                                                                         priv->qemuCaps)))
-+                    return -1;
-+
-+                reopenactions = virJSONValueNewArray();
-+
-+                if (qemuMonitorTransactionSnapshotBlockdev(reopenactions,
-+                                                           disk->mirror->backingStore->nodeformat,
-+                                                           disk->mirror->nodeformat))
-+                    return -1;
-+            }
-+
-         }
-         break;
- 
-@@ -17609,7 +17633,15 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-     if (blockdev) {
-         int rc = 0;
- 
--        if (actions)
-+        if (chainattachdata) {
-+            if ((rc = qemuBlockStorageSourceChainAttach(priv->mon, chainattachdata)) == 0) {
-+                /* install backing images on success, or unplug them on failure */
-+                if ((rc = qemuMonitorTransaction(priv->mon, &reopenactions)) != 0)
-+                    qemuBlockStorageSourceChainDetach(priv->mon, chainattachdata);
-+            }
-+        }
-+
-+        if (actions && rc == 0)
-             rc = qemuMonitorTransaction(priv->mon, &actions);
- 
-         if (rc == 0)
-@@ -18354,9 +18386,26 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
- 
-     if (blockdev) {
-         if (mirror_reuse) {
--            if (!(data = qemuBuildStorageSourceChainAttachPrepareBlockdev(mirror,
--                                                                          priv->qemuCaps)))
--                goto endjob;
-+            /* oVirt depended on late-backing-chain-opening semantics the old
-+             * qemu command had to copy the backing chain data while the top
-+             * level is being copied. To restore this semantics if
-+             * blockdev-reopen is supported defer opening of the backing chain
-+             * of 'mirror' to the pivot step */
-+            if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY)) {
-+                g_autoptr(virStorageSource) terminator = virStorageSourceNew();
-+
-+                if (!terminator)
-+                    goto endjob;
-+
-+                if (!(data = qemuBuildStorageSourceChainAttachPrepareBlockdevTop(mirror,
-+                                                                                 terminator,
-+                                                                                 priv->qemuCaps)))
-+                    goto endjob;
-+            } else {
-+                if (!(data = qemuBuildStorageSourceChainAttachPrepareBlockdev(mirror,
-+                                                                              priv->qemuCaps)))
-+                    goto endjob;
-+            }
-         } else {
-             if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-                 goto endjob;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Actually-delete-temporary-bitmap-on-failed-active-commit.patch b/SOURCES/libvirt-qemu-blockjob-Actually-delete-temporary-bitmap-on-failed-active-commit.patch
deleted file mode 100644
index 3edbf3b..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Actually-delete-temporary-bitmap-on-failed-active-commit.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 2069251b1f50e1aaec566909478f1443ccfe32e6 Mon Sep 17 00:00:00 2001
-Message-Id: <2069251b1f50e1aaec566909478f1443ccfe32e6@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 21 Jul 2020 13:56:22 +0200
-Subject: [PATCH] qemu: blockjob: Actually delete temporary bitmap on failed
- active commit
-
-Commit 20a7abc2d2d tried to delete the possibly leftover bitmap but
-neglected to call the actual monitor to do so.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 378e4fbc795c607485799cbd060f34483f580544)
-
-rhel-8.3: https://bugzilla.redhat.com/show_bug.cgi?id=1857779
-rhel-av-8.2.1: not cloned yet
-Message-Id: <add765f8f49b70dbfe1c2adf7e63e6e21b480c6d.1595332476.git.pkrempa@redhat.com>
-
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_blockjob.c | 13 +++++++++++--
- 1 file changed, 11 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 7e2df1445d..486fca31f3 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1378,8 +1378,10 @@ qemuBlockJobProcessEventConcludedCopyAbort(virQEMUDriverPtr driver,
- static void
- qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
-                                            virDomainObjPtr vm,
--                                           qemuBlockJobDataPtr job)
-+                                           qemuBlockJobDataPtr job,
-+                                           qemuDomainAsyncJob asyncJob)
- {
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(virJSONValue) actions = virJSONValueNewArray();
-     virDomainDiskDefPtr disk = job->disk;
- 
-@@ -1391,6 +1393,13 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
-     ignore_value(qemuMonitorTransactionBitmapRemove(actions, disk->mirror->nodeformat,
-                                                     "libvirt-tmp-activewrite"));
- 
-+    if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-+        return;
-+
-+    qemuMonitorTransaction(priv->mon, &actions);
-+
-+    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0)
-+        return;
- 
-     /* Ideally, we would make the backing chain read only again (yes, SELinux
-      * can do that using different labels). But that is not implemented yet and
-@@ -1515,7 +1524,7 @@ qemuBlockJobEventProcessConcludedTransition(qemuBlockJobDataPtr job,
-         if (success) {
-             qemuBlockJobProcessEventCompletedActiveCommit(driver, vm, job, asyncJob);
-         } else {
--            qemuBlockJobProcessEventFailedActiveCommit(driver, vm, job);
-+            qemuBlockJobProcessEventFailedActiveCommit(driver, vm, job, asyncJob);
-         }
-         break;
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Don-t-base-bitmap-handling-of-active-layer-block-commit-on-QEMU_CAPS_BLOCKDEV_REOPEN.patch b/SOURCES/libvirt-qemu-blockjob-Don-t-base-bitmap-handling-of-active-layer-block-commit-on-QEMU_CAPS_BLOCKDEV_REOPEN.patch
deleted file mode 100644
index 13d121b..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Don-t-base-bitmap-handling-of-active-layer-block-commit-on-QEMU_CAPS_BLOCKDEV_REOPEN.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 3c9641730c62ffae735d7984b3bc0632a9194b03 Mon Sep 17 00:00:00 2001
-Message-Id: <3c9641730c62ffae735d7984b3bc0632a9194b03@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 21 Jul 2020 13:56:21 +0200
-Subject: [PATCH] qemu: blockjob: Don't base bitmap handling of active-layer
- block commit on QEMU_CAPS_BLOCKDEV_REOPEN
-
-The handler finalizing the active layer block commit doesn't actually
-reopen the file for active layer block commit, so the comment and check
-are invalid.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit d73f107469c8882a47ffbf1a55bd0b0370d6969e)
-
-rhel-8.3: https://bugzilla.redhat.com/show_bug.cgi?id=1857779
-rhel-av-8.2.1: not cloned yet
-Message-Id: <6946fb2535038e24dcef4884806c11c258f0fc70.1595332476.git.pkrempa@redhat.com>
-
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_blockjob.c | 3 ++-
- src/qemu/qemu_driver.c   | 6 +-----
- 2 files changed, 3 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 6e33f8666c..7e2df1445d 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1063,7 +1063,8 @@ qemuBlockJobProcessEventCompletedCommitBitmaps(virDomainObjPtr vm,
-     g_autoptr(virJSONValue) actions = NULL;
-     bool active = job->type == QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT;
- 
--    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-+    if (!active &&
-+        !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-         return 0;
- 
-     if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, asyncJob)))
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 9e3a455814..ad5ef7d67d 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17631,11 +17631,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         break;
- 
-     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
--        /* we technically don't need reopen here, but we couldn't prepare
--         * the bitmaps if it wasn't present thus must skip this */
--        if (blockdev &&
--            virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
--
-+        if (blockdev) {
-             actions = virJSONValueNewArray();
- 
-             if (qemuMonitorTransactionBitmapAdd(actions,
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Handle-bitmaps-after-finish-of-normal-block-commit.patch b/SOURCES/libvirt-qemu-blockjob-Handle-bitmaps-after-finish-of-normal-block-commit.patch
deleted file mode 100644
index 47341be..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Handle-bitmaps-after-finish-of-normal-block-commit.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From 629629bccbaef81ab1e187fbf5aab4e07d49f350 Mon Sep 17 00:00:00 2001
-Message-Id: <629629bccbaef81ab1e187fbf5aab4e07d49f350@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:31 +0100
-Subject: [PATCH] qemu: blockjob: Handle bitmaps after finish of normal
- block-commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Merge the bitmaps into base of the block commit after the job finishes.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit db450a742224fb96d8f4d45fde3d0c19faeabfdb)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <dcf1a67be965850ccd4b35f3ef4587dee5c77151.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.c | 52 ++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 52 insertions(+)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 63f1cc79c3..0b7e1403e6 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1049,6 +1049,55 @@ qemuBlockJobDeleteImages(virQEMUDriverPtr driver,
-     }
- }
- 
-+
-+/**
-+ * qemuBlockJobProcessEventCompletedCommitBitmaps:
-+ *
-+ * Handles the bitmap changes after commit. This returns -1 on monitor failures.
-+ */
-+static int
-+qemuBlockJobProcessEventCompletedCommitBitmaps(virDomainObjPtr vm,
-+                                               qemuBlockJobDataPtr job,
-+                                               qemuDomainAsyncJob asyncJob)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    g_autoptr(virHashTable) blockNamedNodeData = NULL;
-+    g_autoptr(virJSONValue) actions = NULL;
-+
-+    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-+        return 0;
-+
-+    if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, asyncJob)))
-+        return -1;
-+
-+    if (qemuBlockBitmapsHandleCommitFinish(job->data.commit.top,
-+                                           job->data.commit.base,
-+                                           blockNamedNodeData,
-+                                           &actions,
-+                                           job->data.commit.disabledBitmapsBase) < 0)
-+        return 0;
-+
-+    if (!actions)
-+        return 0;
-+
-+    if (qemuBlockReopenReadWrite(vm, job->data.commit.base, asyncJob) < 0)
-+        return -1;
-+
-+    if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-+        return -1;
-+
-+    qemuMonitorTransaction(priv->mon, &actions);
-+
-+    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0)
-+        return -1;
-+
-+    if (qemuBlockReopenReadOnly(vm, job->data.commit.base, asyncJob) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
- /**
-  * qemuBlockJobProcessEventCompletedCommit:
-  * @driver: qemu driver object
-@@ -1106,6 +1155,9 @@ qemuBlockJobProcessEventCompletedCommit(virQEMUDriverPtr driver,
-     if (!n)
-         return;
- 
-+    if (qemuBlockJobProcessEventCompletedCommitBitmaps(vm, job, asyncJob) < 0)
-+        return;
-+
-     /* revert access to images */
-     qemuDomainStorageSourceAccessAllow(driver, vm, job->data.commit.base,
-                                        true, false, false);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Re-enable-bitmaps-after-failed-block-commit.patch b/SOURCES/libvirt-qemu-blockjob-Re-enable-bitmaps-after-failed-block-commit.patch
deleted file mode 100644
index 538ca89..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Re-enable-bitmaps-after-failed-block-commit.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 8e5be603c7e3ab3679af498a30cc510177c20514 Mon Sep 17 00:00:00 2001
-Message-Id: <8e5be603c7e3ab3679af498a30cc510177c20514@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:32 +0100
-Subject: [PATCH] qemu: blockjob: Re-enable bitmaps after failed block-commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If a block-commit fails we should at least re-enable the bitmaps so that
-the operation can be re-tried.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 4a39b25c81d40d8d2b5d4e33c53b3660aa4c9fda)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <34dd58f94ac59b5ef970070c07a36ced6bbe77af.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.c | 42 ++++++++++++++++++++++++++++++++++++++--
- 1 file changed, 40 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 0b7e1403e6..21a043d369 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1345,6 +1345,40 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
- }
- 
- 
-+static void
-+qemuBlockJobProcessEventFailedCommitCommon(virDomainObjPtr vm,
-+                                           qemuBlockJobDataPtr job,
-+                                           qemuDomainAsyncJob asyncJob)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    g_autoptr(virJSONValue) actions = virJSONValueNewArray();
-+    char **disabledBitmaps = job->data.commit.disabledBitmapsBase;
-+
-+    if (!disabledBitmaps || !*disabledBitmaps)
-+        return;
-+
-+    for (; *disabledBitmaps; disabledBitmaps++) {
-+        qemuMonitorTransactionBitmapEnable(actions,
-+                                           job->data.commit.base->nodeformat,
-+                                           *disabledBitmaps);
-+    }
-+
-+    if (qemuBlockReopenReadWrite(vm, job->data.commit.base, asyncJob) < 0)
-+        return;
-+
-+    if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-+        return;
-+
-+    qemuMonitorTransaction(priv->mon, &actions);
-+
-+    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0)
-+        return;
-+
-+    if (qemuBlockReopenReadOnly(vm, job->data.commit.base, asyncJob) < 0)
-+        return;
-+}
-+
-+
- static void
- qemuBlockJobProcessEventConcludedCreate(virQEMUDriverPtr driver,
-                                         virDomainObjPtr vm,
-@@ -1452,13 +1486,17 @@ qemuBlockJobEventProcessConcludedTransition(qemuBlockJobDataPtr job,
-     case QEMU_BLOCKJOB_TYPE_COMMIT:
-         if (success)
-             qemuBlockJobProcessEventCompletedCommit(driver, vm, job, asyncJob);
-+        else
-+            qemuBlockJobProcessEventFailedCommitCommon(vm, job, asyncJob);
-         break;
- 
-     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
--        if (success)
-+        if (success) {
-             qemuBlockJobProcessEventCompletedActiveCommit(driver, vm, job, asyncJob);
--        else
-+        } else {
-             qemuBlockJobProcessEventFailedActiveCommit(driver, vm, job);
-+            qemuBlockJobProcessEventFailedCommitCommon(vm, job, asyncJob);
-+        }
-         break;
- 
-     case QEMU_BLOCKJOB_TYPE_CREATE:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Remove-disabledBitmapsBase-field-from-commit-job-private-data.patch b/SOURCES/libvirt-qemu-blockjob-Remove-disabledBitmapsBase-field-from-commit-job-private-data.patch
deleted file mode 100644
index fcf01f8..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Remove-disabledBitmapsBase-field-from-commit-job-private-data.patch
+++ /dev/null
@@ -1,219 +0,0 @@
-From c23ec1c095a13e1279660ea9b27290c9ae0f3849 Mon Sep 17 00:00:00 2001
-Message-Id: <c23ec1c095a13e1279660ea9b27290c9ae0f3849@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:03 +0200
-Subject: [PATCH] qemu: blockjob: Remove 'disabledBitmapsBase' field from
- commit job private data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-New semantics of the bitmap handling don't need this. Remove the field
-and all uses of it including the status XML.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 057e4bc591093a333624acb9ed065f8f796cca1e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <d003ac3f3f67fba9944e600cdf09f0aa4bb1001a.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.c                      | 39 -------------------
- src/qemu/qemu_blockjob.h                      |  3 --
- src/qemu/qemu_domain.c                        | 22 -----------
- src/qemu/qemu_driver.c                        |  3 +-
- .../blockjob-blockdev-in.xml                  |  4 --
- 5 files changed, 1 insertion(+), 70 deletions(-)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index c63a691a0e..d106165175 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -285,7 +285,6 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-                           virStorageSourcePtr topparent,
-                           virStorageSourcePtr top,
-                           virStorageSourcePtr base,
--                          char ***disabledBitmapsBase,
-                           bool delete_imgs,
-                           unsigned int jobflags)
- {
-@@ -311,7 +310,6 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-     job->data.commit.top = top;
-     job->data.commit.base = base;
-     job->data.commit.deleteCommittedImages = delete_imgs;
--    job->data.commit.disabledBitmapsBase = g_steal_pointer(disabledBitmapsBase);
-     job->jobflags = jobflags;
- 
-     if (qemuBlockJobRegister(job, vm, disk, true) < 0)
-@@ -1363,40 +1361,6 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriverPtr driver,
- }
- 
- 
--static void
--qemuBlockJobProcessEventFailedCommitCommon(virDomainObjPtr vm,
--                                           qemuBlockJobDataPtr job,
--                                           qemuDomainAsyncJob asyncJob)
--{
--    qemuDomainObjPrivatePtr priv = vm->privateData;
--    g_autoptr(virJSONValue) actions = virJSONValueNewArray();
--    char **disabledBitmaps = job->data.commit.disabledBitmapsBase;
--
--    if (!disabledBitmaps || !*disabledBitmaps)
--        return;
--
--    for (; *disabledBitmaps; disabledBitmaps++) {
--        qemuMonitorTransactionBitmapEnable(actions,
--                                           job->data.commit.base->nodeformat,
--                                           *disabledBitmaps);
--    }
--
--    if (qemuBlockReopenReadWrite(vm, job->data.commit.base, asyncJob) < 0)
--        return;
--
--    if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
--        return;
--
--    qemuMonitorTransaction(priv->mon, &actions);
--
--    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0)
--        return;
--
--    if (qemuBlockReopenReadOnly(vm, job->data.commit.base, asyncJob) < 0)
--        return;
--}
--
--
- static void
- qemuBlockJobProcessEventConcludedCreate(virQEMUDriverPtr driver,
-                                         virDomainObjPtr vm,
-@@ -1504,8 +1468,6 @@ qemuBlockJobEventProcessConcludedTransition(qemuBlockJobDataPtr job,
-     case QEMU_BLOCKJOB_TYPE_COMMIT:
-         if (success)
-             qemuBlockJobProcessEventCompletedCommit(driver, vm, job, asyncJob);
--        else
--            qemuBlockJobProcessEventFailedCommitCommon(vm, job, asyncJob);
-         break;
- 
-     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
-@@ -1513,7 +1475,6 @@ qemuBlockJobEventProcessConcludedTransition(qemuBlockJobDataPtr job,
-             qemuBlockJobProcessEventCompletedActiveCommit(driver, vm, job, asyncJob);
-         } else {
-             qemuBlockJobProcessEventFailedActiveCommit(driver, vm, job);
--            qemuBlockJobProcessEventFailedCommitCommon(vm, job, asyncJob);
-         }
-         break;
- 
-diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
-index ee83d318f3..4045878568 100644
---- a/src/qemu/qemu_blockjob.h
-+++ b/src/qemu/qemu_blockjob.h
-@@ -88,8 +88,6 @@ struct _qemuBlockJobCommitData {
-     virStorageSourcePtr top;
-     virStorageSourcePtr base;
-     bool deleteCommittedImages;
--    char **disabledBitmapsBase; /* a NULL-terminated list of bitmap names which
--                                   were disabled in @base for the commit job */
- };
- 
- 
-@@ -187,7 +185,6 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-                           virStorageSourcePtr topparent,
-                           virStorageSourcePtr top,
-                           virStorageSourcePtr base,
--                          char ***disabledBitmapsBase,
-                           bool delete_imgs,
-                           unsigned int jobflags);
- 
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index a92183334f..1e968368ae 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2594,7 +2594,6 @@ qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
-                                       virBufferPtr buf)
- {
-     g_auto(virBuffer) disabledBitmapsBuf = VIR_BUFFER_INIT_CHILD(buf);
--    char **bitmaps = job->data.commit.disabledBitmapsBase;
- 
-     if (job->data.commit.base)
-         virBufferAsprintf(buf, "<base node='%s'/>\n", job->data.commit.base->nodeformat);
-@@ -2608,9 +2607,6 @@ qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
-     if (job->data.commit.deleteCommittedImages)
-         virBufferAddLit(buf, "<deleteCommittedImages/>\n");
- 
--    while (bitmaps && *bitmaps)
--        virBufferEscapeString(&disabledBitmapsBuf, "<bitmap name='%s'/>\n", *(bitmaps++));
--
-     virXMLFormatElement(buf, "disabledBaseBitmaps", NULL, &disabledBitmapsBuf);
- }
- 
-@@ -3238,9 +3234,6 @@ static int
- qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
-                                                xmlXPathContextPtr ctxt)
- {
--    g_autofree xmlNodePtr *nodes = NULL;
--    ssize_t nnodes;
--
-     if (job->type == QEMU_BLOCKJOB_TYPE_COMMIT) {
-         qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-                                                      "string(./topparent/@node)",
-@@ -3267,21 +3260,6 @@ qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
-         !job->data.commit.base)
-         return -1;
- 
--    if ((nnodes = virXPathNodeSet("./disabledBaseBitmaps/bitmap", ctxt, &nodes)) > 0) {
--        size_t i;
--
--        job->data.commit.disabledBitmapsBase = g_new0(char *, nnodes + 1);
--
--        for (i = 0; i < nnodes; i++) {
--            char *tmp;
--
--            if (!(tmp = virXMLPropString(nodes[i], "name")))
--                return -1;
--
--            job->data.commit.disabledBitmapsBase[i] = g_steal_pointer(&tmp);
--        }
--    }
--
-     return 0;
- }
- 
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 983d4a04a8..ed5498d2bc 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18757,7 +18757,6 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     const char *nodebase = NULL;
-     bool persistjob = false;
-     bool blockdev = false;
--    VIR_AUTOSTRINGLIST bitmapDisableList = NULL;
- 
-     virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW |
-                   VIR_DOMAIN_BLOCK_COMMIT_ACTIVE |
-@@ -18919,7 +18918,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     }
- 
-     if (!(job = qemuBlockJobDiskNewCommit(vm, disk, top_parent, topSource,
--                                          baseSource, &bitmapDisableList,
-+                                          baseSource,
-                                           flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE,
-                                           flags)))
-         goto endjob;
-diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-index cc17a17ff4..ca6d110179 100644
---- a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-+++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-@@ -243,10 +243,6 @@
-       <base node='libvirt-19-format'/>
-       <top node='libvirt-17-format'/>
-       <deleteCommittedImages/>
--      <disabledBaseBitmaps>
--        <bitmap name='test'/>
--        <bitmap name='test1'/>
--      </disabledBaseBitmaps>
-     </blockjob>
-     <blockjob name='create-libvirt-1337-storage' type='create' state='running'>
-       <create mode='storage'/>
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Store-flags-for-all-the-block-job-types.patch b/SOURCES/libvirt-qemu-blockjob-Store-flags-for-all-the-block-job-types.patch
deleted file mode 100644
index c2fa9f9..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Store-flags-for-all-the-block-job-types.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-From 51688727a7278bdbc9cdb49ab6bc11f38995ab26 Mon Sep 17 00:00:00 2001
-Message-Id: <51688727a7278bdbc9cdb49ab6bc11f38995ab26@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:22 +0100
-Subject: [PATCH] qemu: blockjob: Store 'flags' for all the block job types
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The flags may control important aspects of the block job which may
-influence also the termination of the job. Store the 'flags' for all
-the block job types.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit ccd4228afff22214ea9b9199b2228d79a5cb5877)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <27c11423760ca65573e2539ac822e88d20ad2916.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.c | 13 ++++++++++---
- src/qemu/qemu_blockjob.h |  9 ++++++---
- src/qemu/qemu_driver.c   |  7 ++++---
- 3 files changed, 20 insertions(+), 9 deletions(-)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index 3dc9222a6f..6b59bbeb2c 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -252,7 +252,8 @@ qemuBlockJobDiskNew(virDomainObjPtr vm,
- qemuBlockJobDataPtr
- qemuBlockJobDiskNewPull(virDomainObjPtr vm,
-                         virDomainDiskDefPtr disk,
--                        virStorageSourcePtr base)
-+                        virStorageSourcePtr base,
-+                        unsigned int jobflags)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(qemuBlockJobData) job = NULL;
-@@ -269,6 +270,7 @@ qemuBlockJobDiskNewPull(virDomainObjPtr vm,
-         return NULL;
- 
-     job->data.pull.base = base;
-+    job->jobflags = jobflags;
- 
-     if (qemuBlockJobRegister(job, vm, disk, true) < 0)
-         return NULL;
-@@ -283,7 +285,8 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-                           virStorageSourcePtr topparent,
-                           virStorageSourcePtr top,
-                           virStorageSourcePtr base,
--                          bool delete_imgs)
-+                          bool delete_imgs,
-+                          unsigned int jobflags)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(qemuBlockJobData) job = NULL;
-@@ -307,6 +310,7 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-     job->data.commit.top = top;
-     job->data.commit.base = base;
-     job->data.commit.deleteCommittedImages = delete_imgs;
-+    job->jobflags = jobflags;
- 
-     if (qemuBlockJobRegister(job, vm, disk, true) < 0)
-         return NULL;
-@@ -350,7 +354,8 @@ qemuBlockJobDiskNewCopy(virDomainObjPtr vm,
-                         virDomainDiskDefPtr disk,
-                         virStorageSourcePtr mirror,
-                         bool shallow,
--                        bool reuse)
-+                        bool reuse,
-+                        unsigned int jobflags)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(qemuBlockJobData) job = NULL;
-@@ -371,6 +376,8 @@ qemuBlockJobDiskNewCopy(virDomainObjPtr vm,
-     if (shallow && !reuse)
-         job->data.copy.shallownew = true;
- 
-+    job->jobflags = jobflags;
-+
-     if (qemuBlockJobRegister(job, vm, disk, true) < 0)
-         return NULL;
- 
-diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
-index 53c495fa8a..4045878568 100644
---- a/src/qemu/qemu_blockjob.h
-+++ b/src/qemu/qemu_blockjob.h
-@@ -176,7 +176,8 @@ qemuBlockJobDiskNew(virDomainObjPtr vm,
- qemuBlockJobDataPtr
- qemuBlockJobDiskNewPull(virDomainObjPtr vm,
-                         virDomainDiskDefPtr disk,
--                        virStorageSourcePtr base);
-+                        virStorageSourcePtr base,
-+                        unsigned int jobflags);
- 
- qemuBlockJobDataPtr
- qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-@@ -184,7 +185,8 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-                           virStorageSourcePtr topparent,
-                           virStorageSourcePtr top,
-                           virStorageSourcePtr base,
--                          bool delete_imgs);
-+                          bool delete_imgs,
-+                          unsigned int jobflags);
- 
- qemuBlockJobDataPtr
- qemuBlockJobNewCreate(virDomainObjPtr vm,
-@@ -197,7 +199,8 @@ qemuBlockJobDiskNewCopy(virDomainObjPtr vm,
-                         virDomainDiskDefPtr disk,
-                         virStorageSourcePtr mirror,
-                         bool shallow,
--                        bool reuse);
-+                        bool reuse,
-+                        unsigned int jobflags);
- 
- qemuBlockJobDataPtr
- qemuBlockJobDiskNewBackup(virDomainObjPtr vm,
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 0667402ebb..71c75b25a6 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17686,7 +17686,7 @@ qemuDomainBlockPullCommon(virDomainObjPtr vm,
-         speed <<= 20;
-     }
- 
--    if (!(job = qemuBlockJobDiskNewPull(vm, disk, baseSource)))
-+    if (!(job = qemuBlockJobDiskNewPull(vm, disk, baseSource, flags)))
-         goto endjob;
- 
-     if (blockdev) {
-@@ -18373,7 +18373,7 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
-             goto endjob;
-     }
- 
--    if (!(job = qemuBlockJobDiskNewCopy(vm, disk, mirror, mirror_shallow, mirror_reuse)))
-+    if (!(job = qemuBlockJobDiskNewCopy(vm, disk, mirror, mirror_shallow, mirror_reuse, flags)))
-         goto endjob;
- 
-     disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_NONE;
-@@ -18794,7 +18794,8 @@ qemuDomainBlockCommit(virDomainPtr dom,
- 
-     if (!(job = qemuBlockJobDiskNewCommit(vm, disk, top_parent, topSource,
-                                           baseSource,
--                                          flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE)))
-+                                          flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE,
-+                                          flags)))
-         goto endjob;
- 
-     disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_NONE;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Store-jobflags-with-block-job-data.patch b/SOURCES/libvirt-qemu-blockjob-Store-jobflags-with-block-job-data.patch
deleted file mode 100644
index f074852..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Store-jobflags-with-block-job-data.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 5278c00147b0ac777d5ddd73062d0c6146da4908 Mon Sep 17 00:00:00 2001
-Message-Id: <5278c00147b0ac777d5ddd73062d0c6146da4908@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:21 +0100
-Subject: [PATCH] qemu: blockjob: Store 'jobflags' with block job data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a variable which will store the contents of the 'flags' variable as
-passed in by the individual block jobs. Since the flags may influence
-behaviour of the jobs it's important to preserve them to the
-finalization steps.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9ba804a1d16b12dac2ec2edbd0f384c21d4bc5c8)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <81db2d5e281716bf385d6d9c634136e36e8bd391.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.h                             | 3 +++
- src/qemu/qemu_domain.c                               | 7 +++++++
- tests/qemustatusxml2xmldata/backup-pull-in.xml       | 2 +-
- tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml | 8 ++++----
- 4 files changed, 15 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
-index 7d584a2980..53c495fa8a 100644
---- a/src/qemu/qemu_blockjob.h
-+++ b/src/qemu/qemu_blockjob.h
-@@ -129,6 +129,9 @@ struct _qemuBlockJobData {
-     virStorageSourcePtr chain; /* Reference to the chain the job operates on. */
-     virStorageSourcePtr mirrorChain; /* reference to 'mirror' part of the job */
- 
-+    unsigned int jobflags; /* per job flags */
-+    bool jobflagsmissing; /* job flags were not stored */
-+
-     union {
-         qemuBlockJobPullData pull;
-         qemuBlockJobCommitData commit;
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 94efcdf9b1..846d1ecb29 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2582,6 +2582,8 @@ qemuDomainObjPrivateXMLFormatBlockjobIterator(void *payload,
-     virBufferEscapeString(&attrBuf, " newstate='%s'", newstate);
-     if (job->brokentype != QEMU_BLOCKJOB_TYPE_NONE)
-         virBufferEscapeString(&attrBuf, " brokentype='%s'", qemuBlockjobTypeToString(job->brokentype));
-+    if (!job->jobflagsmissing)
-+        virBufferAsprintf(&attrBuf, " jobflags='0x%x'", job->jobflags);
-     virBufferEscapeString(&childBuf, "<errmsg>%s</errmsg>", job->errmsg);
- 
-     if (job->disk) {
-@@ -3294,6 +3296,7 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainObjPtr vm,
-     int newstate = -1;
-     bool invalidData = false;
-     xmlNodePtr tmp;
-+    unsigned long jobflags = 0;
- 
-     ctxt->node = node;
- 
-@@ -3333,6 +3336,9 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainObjPtr vm,
-         STRNEQ(mirror, "yes"))
-         invalidData = true;
- 
-+    if (virXPathULongHex("string(./@jobflags)", ctxt, &jobflags) != 0)
-+        job->jobflagsmissing = true;
-+
-     if (!disk && !invalidData) {
-         if ((tmp = virXPathNode("./chains/disk", ctxt)) &&
-             !(job->chain = qemuDomainObjPrivateXMLParseBlockjobChain(tmp, ctxt, xmlopt)))
-@@ -3352,6 +3358,7 @@ qemuDomainObjPrivateXMLParseBlockjobData(virDomainObjPtr vm,
- 
-     job->state = state;
-     job->newstate = newstate;
-+    job->jobflags = jobflags;
-     job->errmsg = virXPathString("string(./errmsg)", ctxt);
-     job->invalidData = invalidData;
-     job->disk = disk;
-diff --git a/tests/qemustatusxml2xmldata/backup-pull-in.xml b/tests/qemustatusxml2xmldata/backup-pull-in.xml
-index 3c69c41840..1db978a3ac 100644
---- a/tests/qemustatusxml2xmldata/backup-pull-in.xml
-+++ b/tests/qemustatusxml2xmldata/backup-pull-in.xml
-@@ -235,7 +235,7 @@
-   <allowReboot value='yes'/>
-   <nodename index='0'/>
-   <blockjobs active='yes'>
--    <blockjob name='backup-vda-libvirt-3-format' type='backup' state='running'>
-+    <blockjob name='backup-vda-libvirt-3-format' type='backup' state='running' jobflags='0x0'>
-       <disk dst='vda'/>
-       <bitmap name='bitmapname'/>
-       <store type='file' format='qcow2'>
-diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-index b5d62fd4ab..ca6d110179 100644
---- a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-+++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-@@ -261,19 +261,19 @@
-         </source>
-       </src>
-     </blockjob>
--    <blockjob name='copy-vdd-libvirt-4321-format' type='copy' state='ready' shallownew='yes'>
-+    <blockjob name='copy-vdd-libvirt-4321-format' type='copy' state='ready' jobflags='0x0' shallownew='yes'>
-       <disk dst='vdd'/>
-     </blockjob>
--    <blockjob name='commit-vdc-libvirt-9-format' type='commit' state='running'>
-+    <blockjob name='commit-vdc-libvirt-9-format' type='commit' state='running' jobflags='0x0'>
-       <disk dst='vdc'/>
-       <base node='libvirt-11-format'/>
-       <top node='libvirt-9-format'/>
-       <topparent node='libvirt-2-format'/>
-     </blockjob>
--    <blockjob name='drive-virtio-disk0' type='copy' state='ready'>
-+    <blockjob name='drive-virtio-disk0' type='copy' state='ready' jobflags='0x0'>
-       <disk dst='vda' mirror='yes'/>
-     </blockjob>
--    <blockjob name='create-libvirt-1338-format' type='create' state='running'>
-+    <blockjob name='create-libvirt-1338-format' type='create' state='running' jobflags='0xabcd'>
-       <chains>
-         <disk type='file' format='qcow2'>
-           <source file='/create/src1.qcow2' index='1339'>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-blockjob-Store-list-of-bitmaps-disabled-prior-to-commit.patch b/SOURCES/libvirt-qemu-blockjob-Store-list-of-bitmaps-disabled-prior-to-commit.patch
deleted file mode 100644
index 2a4d1ae..0000000
--- a/SOURCES/libvirt-qemu-blockjob-Store-list-of-bitmaps-disabled-prior-to-commit.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From 7322bb9f51c7c2c35d2e65734e03ff0056b5af22 Mon Sep 17 00:00:00 2001
-Message-Id: <7322bb9f51c7c2c35d2e65734e03ff0056b5af22@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:22 +0100
-Subject: [PATCH] qemu: blockjob: Store list of bitmaps disabled prior to
- commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Starting a commit job will require disabling bitmaps in the base image
-so that they are not dirtied by the commit job. We need to store a list
-of the bitmaps so that we can later re-enable them.
-
-Add a field and status XML handling code as well as a test.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 41de7230ab169e80237f3e3a29bfecd9baf1a578)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <f009cdda8b29df504d19bddffea5638913f8c931.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.h                      |  2 ++
- src/qemu/qemu_domain.c                        | 26 +++++++++++++++++++
- .../blockjob-blockdev-in.xml                  |  4 +++
- 3 files changed, 32 insertions(+)
-
-diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
-index 4045878568..c1d95ea3d8 100644
---- a/src/qemu/qemu_blockjob.h
-+++ b/src/qemu/qemu_blockjob.h
-@@ -88,6 +88,8 @@ struct _qemuBlockJobCommitData {
-     virStorageSourcePtr top;
-     virStorageSourcePtr base;
-     bool deleteCommittedImages;
-+    char **disabledBitmapsBase; /* a NULL-terminated list of bitmap names which
-+                                   were disabled in @base for the commit job */
- };
- 
- 
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 0faf042145..a273aefa6b 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2603,6 +2603,9 @@ static void
- qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
-                                       virBufferPtr buf)
- {
-+    g_auto(virBuffer) disabledBitmapsBuf = VIR_BUFFER_INIT_CHILD(buf);
-+    char **bitmaps = job->data.commit.disabledBitmapsBase;
-+
-     if (job->data.commit.base)
-         virBufferAsprintf(buf, "<base node='%s'/>\n", job->data.commit.base->nodeformat);
- 
-@@ -2614,6 +2617,11 @@ qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
- 
-     if (job->data.commit.deleteCommittedImages)
-         virBufferAddLit(buf, "<deleteCommittedImages/>\n");
-+
-+    while (bitmaps && *bitmaps)
-+        virBufferEscapeString(&disabledBitmapsBuf, "<bitmap name='%s'/>\n", *(bitmaps++));
-+
-+    virXMLFormatElement(buf, "disabledBaseBitmaps", NULL, &disabledBitmapsBuf);
- }
- 
- 
-@@ -3240,6 +3248,9 @@ static int
- qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
-                                                xmlXPathContextPtr ctxt)
- {
-+    g_autofree xmlNodePtr *nodes = NULL;
-+    ssize_t nnodes;
-+
-     if (job->type == QEMU_BLOCKJOB_TYPE_COMMIT) {
-         qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-                                                      "string(./topparent/@node)",
-@@ -3266,6 +3277,21 @@ qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
-         !job->data.commit.base)
-         return -1;
- 
-+    if ((nnodes = virXPathNodeSet("./disabledBaseBitmaps/bitmap", ctxt, &nodes)) > 0) {
-+        size_t i;
-+
-+        job->data.commit.disabledBitmapsBase = g_new0(char *, nnodes + 1);
-+
-+        for (i = 0; i < nnodes; i++) {
-+            char *tmp;
-+
-+            if (!(tmp = virXMLPropString(nodes[i], "name")))
-+                return -1;
-+
-+            job->data.commit.disabledBitmapsBase[i] = g_steal_pointer(&tmp);
-+        }
-+    }
-+
-     return 0;
- }
- 
-diff --git a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-index ca6d110179..cc17a17ff4 100644
---- a/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-+++ b/tests/qemustatusxml2xmldata/blockjob-blockdev-in.xml
-@@ -243,6 +243,10 @@
-       <base node='libvirt-19-format'/>
-       <top node='libvirt-17-format'/>
-       <deleteCommittedImages/>
-+      <disabledBaseBitmaps>
-+        <bitmap name='test'/>
-+        <bitmap name='test1'/>
-+      </disabledBaseBitmaps>
-     </blockjob>
-     <blockjob name='create-libvirt-1337-storage' type='create' state='running'>
-       <create mode='storage'/>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-build-vhost-user-fs-device-command-line.patch b/SOURCES/libvirt-qemu-build-vhost-user-fs-device-command-line.patch
deleted file mode 100644
index c6634f3..0000000
--- a/SOURCES/libvirt-qemu-build-vhost-user-fs-device-command-line.patch
+++ /dev/null
@@ -1,222 +0,0 @@
-From eb7fe047e08a536a6c888e61fbe5b149ecb6ce6a Mon Sep 17 00:00:00 2001
-Message-Id: <eb7fe047e08a536a6c888e61fbe5b149ecb6ce6a@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:49 +0100
-Subject: [PATCH] qemu: build vhost-user-fs device command line
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Format the 'vhost-user-fs' device on the QEMU command line.
-
-This device provides shared file system access using the FUSE protocol
-carried over virtio.
-The actual file server is implemented in an external vhost-user-fs device
-backend process.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 0627150a56fd53841918d558d8466feceb18552a)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <2df3adbe3991cb97a06707e818c30dfcb1f6de26.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_command.c                       | 46 +++++++++++++++++-
- ...vhost-user-fs-fd-memory.x86_64-latest.args | 39 +++++++++++++++
- ...vhost-user-fs-hugepages.x86_64-latest.args | 47 +++++++++++++++++++
- tests/qemuxml2argvtest.c                      |  3 ++
- 4 files changed, 133 insertions(+), 2 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-fd-memory.x86_64-latest.args
- create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-hugepages.x86_64-latest.args
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 7fdf58f067..fc5366d88d 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -2589,6 +2589,46 @@ qemuBuildDisksCommandLine(virCommandPtr cmd,
- }
- 
- 
-+static int
-+qemuBuildVHostUserFsCommandLine(virCommandPtr cmd,
-+                                virDomainFSDef *fs,
-+                                const virDomainDef *def,
-+                                qemuDomainObjPrivatePtr priv)
-+{
-+    g_autofree char *chardev_alias = NULL;
-+    g_auto(virBuffer) opt = VIR_BUFFER_INITIALIZER;
-+
-+    chardev_alias = g_strdup_printf("chr-vu-%s", fs->info.alias);
-+
-+    virCommandAddArg(cmd, "-chardev");
-+    virBufferAddLit(&opt, "socket");
-+    virBufferAsprintf(&opt, ",id=%s", chardev_alias);
-+    virBufferAddLit(&opt, ",path=");
-+    virQEMUBuildBufferEscapeComma(&opt, QEMU_DOMAIN_FS_PRIVATE(fs)->vhostuser_fs_sock);
-+    virCommandAddArgBuffer(cmd, &opt);
-+
-+    virCommandAddArg(cmd, "-device");
-+
-+    if (qemuBuildVirtioDevStr(&opt, "vhost-user-fs", priv->qemuCaps,
-+                              VIR_DOMAIN_DEVICE_FS, fs) < 0)
-+        return -1;
-+
-+    virBufferAsprintf(&opt, ",chardev=%s", chardev_alias);
-+    if (fs->queue_size)
-+        virBufferAsprintf(&opt, ",queue-size=%llu", fs->queue_size);
-+    virBufferAddLit(&opt, ",tag=");
-+    virQEMUBuildBufferEscapeComma(&opt, fs->dst);
-+    if (qemuBuildVirtioOptionsStr(&opt, fs->virtio, priv->qemuCaps) < 0)
-+        return -1;
-+
-+    if (qemuBuildDeviceAddressStr(&opt, def, &fs->info, priv->qemuCaps) < 0)
-+        return -1;
-+
-+    virCommandAddArgBuffer(cmd, &opt);
-+    return 0;
-+}
-+
-+
- static char *
- qemuBuildFSStr(virDomainFSDefPtr fs)
- {
-@@ -2681,7 +2721,7 @@ static int
- qemuBuildFilesystemCommandLine(virCommandPtr cmd,
-                                const virDomainDef *def,
-                                virQEMUCapsPtr qemuCaps,
--                               qemuDomainObjPrivatePtr priv G_GNUC_UNUSED)
-+                               qemuDomainObjPrivatePtr priv)
- {
-     size_t i;
- 
-@@ -2696,7 +2736,9 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd,
-             break;
- 
-         case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
--            /* TODO: vhost-user-fs-pci */
-+            /* vhost-user-fs-pci */
-+            if (qemuBuildVHostUserFsCommandLine(cmd, def->fss[i], def, priv) < 0)
-+                return -1;
-             break;
- 
-         case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
-diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.x86_64-latest.args b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.x86_64-latest.args
-new file mode 100644
-index 0000000000..a7df45a7f0
---- /dev/null
-+++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.x86_64-latest.args
-@@ -0,0 +1,39 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-guest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-name guest=guest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-guest/master-key.aes \
-+-machine pc,accel=kvm,usb=off,dump-guest-core=off \
-+-cpu qemu64 \
-+-m 14336 \
-+-overcommit mem-lock=off \
-+-smp 2,sockets=2,cores=1,threads=1 \
-+-object memory-backend-file,id=ram-node0,\
-+mem-path=/var/lib/libvirt/qemu/ram/libvirt/qemu/-1-guest/ram-node0,share=yes,\
-+size=15032385536 \
-+-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
-+-uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
-+-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 \
-+-chardev socket,id=chr-vu-fs0,path=/tmp/lib/domain--1-guest/fs0.vhost-fs.sock \
-+-device vhost-user-fs-pci,chardev=chr-vu-fs0,queue-size=1024,tag=mount_tag,\
-+bus=pci.0,addr=0x2 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/vhost-user-fs-hugepages.x86_64-latest.args b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.x86_64-latest.args
-new file mode 100644
-index 0000000000..39190b8d3e
---- /dev/null
-+++ b/tests/qemuxml2argvdata/vhost-user-fs-hugepages.x86_64-latest.args
-@@ -0,0 +1,47 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-guest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-name guest=guest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-guest/master-key.aes \
-+-machine q35,accel=tcg,usb=off,dump-guest-core=off \
-+-cpu qemu64 \
-+-m 2048 \
-+-overcommit mem-lock=off \
-+-smp 2,sockets=2,cores=1,threads=1 \
-+-object memory-backend-file,id=ram-node0,prealloc=yes,\
-+mem-path=/dev/hugepages2M/libvirt/qemu/-1-guest,share=yes,size=2147483648 \
-+-numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
-+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
-+-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 \
-+-boot strict=on \
-+-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
-+addr=0x1 \
-+-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
-+-device pcie-root-port,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
-+-device pcie-root-port,port=0xb,chassis=4,id=pci.4,bus=pcie.0,addr=0x1.0x3 \
-+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/guest.qcow2",\
-+"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2",\
-+"file":"libvirt-1-storage"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.4,addr=0x0,drive=libvirt-1-format,\
-+id=virtio-disk0,bootindex=1 \
-+-chardev socket,id=chr-vu-fs0,path=/tmp/lib/domain--1-guest/fs0.vhost-fs.sock \
-+-device vhost-user-fs-pci,chardev=chr-vu-fs0,tag=mount_tag,bus=pci.1,addr=0x0 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index a391823090..265ffce465 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -3053,6 +3053,9 @@ mymain(void)
- 
-     DO_TEST_CAPS_VER("launch-security-sev", "2.12.0");
- 
-+    DO_TEST_CAPS_LATEST("vhost-user-fs-fd-memory");
-+    DO_TEST_CAPS_LATEST("vhost-user-fs-hugepages");
-+
-     DO_TEST("riscv64-virt",
-             QEMU_CAPS_DEVICE_VIRTIO_MMIO);
-     DO_TEST("riscv64-virt-pci",
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-capabilities-Add-QEMU_CAPS_BLOCKDEV_REOPEN.patch b/SOURCES/libvirt-qemu-capabilities-Add-QEMU_CAPS_BLOCKDEV_REOPEN.patch
deleted file mode 100644
index 808eade..0000000
--- a/SOURCES/libvirt-qemu-capabilities-Add-QEMU_CAPS_BLOCKDEV_REOPEN.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From e76712462c74fad141b5d63563c554447fdc497a Mon Sep 17 00:00:00 2001
-Message-Id: <e76712462c74fad141b5d63563c554447fdc497a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:14 +0100
-Subject: [PATCH] qemu: capabilities: Add QEMU_CAPS_BLOCKDEV_REOPEN
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This capability will be asserted once qemu stabilizes 'blockdev-reopen'.
-For now we just add the capability so that we can introduce some code
-that will use the reopening call. This will show our willingness to
-adopt use of reopen and help qemu developers stabilize it.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit ecdd92976144ba9caeae3ce781e39b5e9cc08807)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <f3d864a179b997038d3c06e7de54c6ba77fff3d7.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_capabilities.c | 1 +
- src/qemu/qemu_capabilities.h | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 663017157b..a4046b09d6 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -560,6 +560,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "cpu.kvm-no-adjvtime",
-               "vhost-user-fs",
-               "blockdev-snapshot.allow-write-only-overlay",
-+              "blockdev-reopen",
-     );
- 
- 
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 2eb8599525..8fdbe05638 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -541,6 +541,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_CPU_KVM_NO_ADJVTIME, /* cpu.kvm-no-adjvtime */
-     QEMU_CAPS_DEVICE_VHOST_USER_FS, /* -device vhost-user-fs */
-     QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY, /* blockdev-snapshot has the 'allow-write-only-overlay' feature */
-+    QEMU_CAPS_BLOCKDEV_REOPEN, /* 'blockdev-reopen' qmp command is supported */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-capabilities-Introduce-QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY.patch b/SOURCES/libvirt-qemu-capabilities-Introduce-QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY.patch
deleted file mode 100644
index cfd1e2b..0000000
--- a/SOURCES/libvirt-qemu-capabilities-Introduce-QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From b28ebb2480fb205ff10059a04745ff989d4f04b0 Mon Sep 17 00:00:00 2001
-Message-Id: <b28ebb2480fb205ff10059a04745ff989d4f04b0@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:38 +0100
-Subject: [PATCH] qemu: capabilities: Introduce
- QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The capability is based on qemu's support of using blockdev-snapshot to
-install backing chain also for images which are in use by a block-copy
-job.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit d6498be16565f23750f7e906050bdbc30678101f)
-
- Conflicts:
-	src/qemu/qemu_capabilities.c
-	src/qemu/qemu_capabilities.h
-
-        QEMU_CAPS_QMP_QUERY_NAMED_BLOCK_NODES_FLAT not backported
-
-	tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-
-        Capability file update not backported
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1803092
-Message-Id: <8240acbad794e65a4e3c61be3fa6713e0cb181ae.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@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 34df4d89b3..663017157b 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -559,6 +559,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "virtio-net.failover",
-               "cpu.kvm-no-adjvtime",
-               "vhost-user-fs",
-+              "blockdev-snapshot.allow-write-only-overlay",
-     );
- 
- 
-@@ -1432,6 +1433,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
-     { "blockdev-add/arg-type/+file/$dynamic-auto-read-only", QEMU_CAPS_BLOCK_FILE_AUTO_READONLY_DYNAMIC },
-     { "human-monitor-command/$savevm-monitor-nodes", QEMU_CAPS_SAVEVM_MONITOR_NODES },
-     { "blockdev-add/arg-type/+nvme", QEMU_CAPS_DRIVE_NVME },
-+    { "blockdev-snapshot/$allow-write-only-overlay", QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY },
- };
- 
- typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps;
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index e3449a9ca3..2eb8599525 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -540,6 +540,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_VIRTIO_NET_FAILOVER, /* virtio-net-*.failover */
-     QEMU_CAPS_CPU_KVM_NO_ADJVTIME, /* cpu.kvm-no-adjvtime */
-     QEMU_CAPS_DEVICE_VHOST_USER_FS, /* -device vhost-user-fs */
-+    QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY, /* blockdev-snapshot has the 'allow-write-only-overlay' feature */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Allow-checkpoint-redefine-for-offline-VMs.patch b/SOURCES/libvirt-qemu-checkpoint-Allow-checkpoint-redefine-for-offline-VMs.patch
deleted file mode 100644
index e09952b..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Allow-checkpoint-redefine-for-offline-VMs.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 3d1a4ab1ce9fce88a759e11532b6891903f86a4a Mon Sep 17 00:00:00 2001
-Message-Id: <3d1a4ab1ce9fce88a759e11532b6891903f86a4a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 3 Apr 2020 14:32:57 +0200
-Subject: [PATCH] qemu: checkpoint: Allow checkpoint redefine for offline VMs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Skip the liveness and capability checks when redefining checkpoints as
-we don't need qemu interactions to update the metadata.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 135a0b3f7142a8d4f591bb24b3ae7d0f36877bf7)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1819755
-
-Message-Id: <f1d392d78abde1ffbe1c0244d442bc0ec6aa18a6.1585916255.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 20 +++++++++++---------
- 1 file changed, 11 insertions(+), 9 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 16480518fa..34cf122eb3 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -649,16 +649,18 @@ qemuCheckpointCreateXML(virDomainPtr domain,
-         update_current = false;
-     }
- 
--    if (!virDomainObjIsActive(vm)) {
--        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
--                       _("cannot create checkpoint for inactive domain"));
--        return NULL;
--    }
-+    if (!redefine) {
-+        if (!virDomainObjIsActive(vm)) {
-+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                           _("cannot create checkpoint for inactive domain"));
-+            return NULL;
-+        }
- 
--    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP)) {
--        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
--                       _("incremental backup is not supported yet"));
--        return NULL;
-+        if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP)) {
-+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                           _("incremental backup is not supported yet"));
-+            return NULL;
-+        }
-     }
- 
-     if (!(def = virDomainCheckpointDefParseString(xmlDesc, driver->xmlopt,
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Don-t-chain-bitmaps-for-checkpoints.patch b/SOURCES/libvirt-qemu-checkpoint-Don-t-chain-bitmaps-for-checkpoints.patch
deleted file mode 100644
index 0362acc..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Don-t-chain-bitmaps-for-checkpoints.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 6c139a45537d021f6fd4287bd3c74cba06e6a264 Mon Sep 17 00:00:00 2001
-Message-Id: <6c139a45537d021f6fd4287bd3c74cba06e6a264@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:47 +0200
-Subject: [PATCH] qemu: checkpoint: Don't chain bitmaps for checkpoints
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Chaining bitmaps for checkpoints (disabling the active one and creating
-a new) severely overcomplicated all operations in regards to bitmaps.
-
-Specifically it requires us re-matching the on-disk state to the
-internal metadata and in case of merging during block jobs it makes it
-almost impossible to cover all corner cases.
-
-Since the checkpoints and incremental backups were not yet enabled,
-let's change the design to keep one bitmap per checkpoint. In case of
-layered snapshots this will be filled in by using dirty-bitmap-populate.
-
-Finally the main reason for this unnecessary complexity was the fear
-that qemu's performance could degrade. In the end I think that
-addressing the performance issue will be better done in qemu (e.g by
-keeping an internal bitmap updated with changes and merging it
-periodically back to the real bitmaps. QEMU writes out changes to disk
-at shutdown so consistency is not a problem).
-
-Removing the relationships between bitmaps frees us from complex
-handling and also makes all the surrounding code more robust as one
-broken bitmap doesn't necessarily invalidate whole chains of backups.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 1f92aa454aa3b04ece9f7479d517bf08ba547f0a)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <a863b2015f72690ebd90fd518e8163e194909214.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 21 +--------------------
- 1 file changed, 1 insertion(+), 20 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 34cf122eb3..9762a3eb9d 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -460,7 +460,6 @@ qemuCheckpointPrepare(virQEMUDriverPtr driver,
- static int
- qemuCheckpointAddActions(virDomainObjPtr vm,
-                          virJSONValuePtr actions,
--                         virDomainMomentObjPtr old_current,
-                          virDomainCheckpointDefPtr def)
- {
-     size_t i;
-@@ -468,7 +467,6 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-     for (i = 0; i < def->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &def->disks[i];
-         virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
--        virDomainCheckpointDiskDef *parentchkdisk = NULL;
- 
-         /* checkpoint definition validator mandates that the corresponding
-          * domdisk should exist */
-@@ -479,23 +477,6 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-         if (qemuMonitorTransactionBitmapAdd(actions, domdisk->src->nodeformat,
-                                             chkdisk->bitmap, true, false, 0) < 0)
-             return -1;
--
--        /* We only want one active bitmap for a disk along the
--         * checkpoint chain, then later differential backups will
--         * merge the bitmaps (only one active) between the bounding
--         * checkpoint and the leaf checkpoint.  If the same disks are
--         * involved in each checkpoint, this search terminates in one
--         * iteration; but it is also possible to have to search
--         * further than the immediate parent to find another
--         * checkpoint with a bitmap on the same disk.  */
--        if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, old_current,
--                                                                  chkdisk->name))) {
--
--            if (qemuMonitorTransactionBitmapDisable(actions,
--                                                    domdisk->src->nodeformat,
--                                                    parentchkdisk->bitmap) < 0)
--                return -1;
--        }
-     }
-     return 0;
- }
-@@ -544,7 +525,7 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
- 
-     tmpactions = virJSONValueNewArray();
- 
--    if (qemuCheckpointAddActions(vm, tmpactions, parent, *def) < 0)
-+    if (qemuCheckpointAddActions(vm, tmpactions, *def) < 0)
-         return -1;
- 
-     if (!(*chk = virDomainCheckpointAssignDef(vm->checkpoints, *def)))
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Don-t-merge-checkpoints-during-deletion.patch b/SOURCES/libvirt-qemu-checkpoint-Don-t-merge-checkpoints-during-deletion.patch
deleted file mode 100644
index 13e9be6..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Don-t-merge-checkpoints-during-deletion.patch
+++ /dev/null
@@ -1,312 +0,0 @@
-From e7b1604c5848861db0896b3c7869c0ad1d971084 Mon Sep 17 00:00:00 2001
-Message-Id: <e7b1604c5848861db0896b3c7869c0ad1d971084@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:53 +0200
-Subject: [PATCH] qemu: checkpoint: Don't merge checkpoints during deletion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Now that we've switched to the simple handling, the first thing that can
-be massively simplified is checkpoint deletion. We now need to only go
-through the backing chain and find the appropriately named bitmaps and
-delete them, no complex lookups or merging.
-
-Note that compared to other functions this deletes the bitmap in all
-layers compared to others where we expect only exactly 1 bitmap of a
-name in the backing chain to prevent potential problems.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 4c33c5568c3ee3c5952e5f3b217d78df95683b71)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <aa99845392d5d5141672bf8d50655034e6783794.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 153 ++++++-------------------------------
- src/qemu/qemu_checkpoint.h |   1 -
- tests/qemublocktest.c      |   7 +-
- 3 files changed, 25 insertions(+), 136 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 9762a3eb9d..b44ff05c32 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -105,140 +105,41 @@ qemuCheckpointWriteMetadata(virDomainObjPtr vm,
- }
- 
- 
--/**
-- * qemuCheckpointFindActiveDiskInParent:
-- * @vm: domain object
-- * @from: starting moment object
-- * @diskname: name (target) of the disk to find
-- *
-- * Find the first checkpoint starting from @from continuing through parents
-- * of the checkpoint which describes disk @diskname. Return the pointer to the
-- * definition of the disk.
-- */
--static virDomainCheckpointDiskDef *
--qemuCheckpointFindActiveDiskInParent(virDomainObjPtr vm,
--                                     virDomainMomentObjPtr from,
--                                     const char *diskname)
--{
--    virDomainMomentObjPtr parent = from;
--    virDomainCheckpointDefPtr parentdef = NULL;
--    size_t i;
--
--    while (parent) {
--        parentdef = virDomainCheckpointObjGetDef(parent);
--
--        for (i = 0; i < parentdef->ndisks; i++) {
--            virDomainCheckpointDiskDef *chkdisk = &parentdef->disks[i];
--
--            if (STRNEQ(chkdisk->name, diskname))
--                continue;
--
--            /* currently inspected checkpoint doesn't describe the disk,
--             * continue into parent checkpoint */
--            if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
--                break;
--
--            return chkdisk;
--        }
--
--        parent = virDomainCheckpointFindByName(vm->checkpoints,
--                                               parentdef->parent.parent_name);
--    }
--
--    return NULL;
--}
--
--
- int
- qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-                                  virHashTablePtr blockNamedNodeData,
-                                  const char *delbitmap,
--                                 const char *parentbitmap,
-                                  virJSONValuePtr actions,
-                                  const char *diskdst,
-                                  GSList **reopenimages)
- {
--    virStorageSourcePtr n = src;
-+    virStorageSourcePtr n;
-+    bool found = false;
- 
-     /* find the backing chain entry with bitmap named '@delbitmap' */
--    while (n) {
--        qemuBlockNamedNodeDataBitmapPtr tmp;
--
--        if ((tmp = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                         n, delbitmap))) {
--            break;
--        }
--
--        n = n->backingStore;
--    }
--
--    if (!n) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("bitmap '%s' not found in backing chain of '%s'"),
--                       delbitmap, diskdst);
--        return -1;
--    }
--
--    while (n) {
--        qemuBlockNamedNodeDataBitmapPtr srcbitmap;
--
--        if (!(srcbitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                                n, delbitmap)))
--            break;
--
--        /* For the actual checkpoint deletion we will merge any bitmap into the
--         * bitmap of the parent checkpoint (@parentbitmap) or for any image
--         * where the parent checkpoint bitmap is not present we must rename
--         * the bitmap of the deleted checkpoint into the bitmap of the parent
--         * checkpoint as qemu can't currently take the allocation map and turn
--         * it into a bitmap and thus we wouldn't be able to do a backup. */
--        if (parentbitmap) {
--            qemuBlockNamedNodeDataBitmapPtr dstbitmap;
--            g_autoptr(virJSONValue) arr = NULL;
--
--            dstbitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
--                                                              n, parentbitmap);
--
--            if (dstbitmap) {
--                if (srcbitmap->recording && !dstbitmap->recording) {
--                    if (qemuMonitorTransactionBitmapEnable(actions,
--                                                           n->nodeformat,
--                                                           dstbitmap->name) < 0)
--                        return -1;
--                }
--
--            } else {
--                if (qemuMonitorTransactionBitmapAdd(actions,
--                                                    n->nodeformat,
--                                                    parentbitmap,
--                                                    true,
--                                                    !srcbitmap->recording,
--                                                    srcbitmap->granularity) < 0)
--                    return -1;
--            }
-+    for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
-+        qemuBlockNamedNodeDataBitmapPtr bitmapdata;
- 
--            arr = virJSONValueNewArray();
--
--            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
--                                                                 n->nodeformat,
--                                                                 srcbitmap->name) < 0)
--                return -1;
-+        if (!(bitmapdata = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                                 n, delbitmap)))
-+            continue;
- 
--            if (qemuMonitorTransactionBitmapMerge(actions,
--                                                  n->nodeformat,
--                                                  parentbitmap, &arr) < 0)
--                return -1;
--        }
-+        found = true;
- 
-         if (qemuMonitorTransactionBitmapRemove(actions,
-                                                n->nodeformat,
--                                               srcbitmap->name) < 0)
-+                                               bitmapdata->name) < 0)
-             return -1;
- 
-         if (n != src)
-             *reopenimages = g_slist_prepend(*reopenimages, n);
-+    }
- 
--        n = n->backingStore;
-+    if (!found) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("bitmap '%s' not found in backing chain of '%s'"),
-+                       delbitmap, diskdst);
-+        return -1;
-     }
- 
-     return 0;
-@@ -247,8 +148,7 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
- 
- static int
- qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
--                             virDomainCheckpointDefPtr chkdef,
--                             virDomainMomentObjPtr parent)
-+                             virDomainCheckpointDefPtr chkdef)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     virQEMUDriverPtr driver = priv->driver;
-@@ -270,8 +170,6 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     for (i = 0; i < chkdef->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &chkdef->disks[i];
-         virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
--        virDomainCheckpointDiskDef *parentchkdisk = NULL;
--        const char *parentbitmap = NULL;
- 
-         /* domdisk can be missing e.g. when it was unplugged */
-         if (!domdisk)
-@@ -280,15 +178,8 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-         if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-             continue;
- 
--        /* If any ancestor checkpoint has a bitmap for the same
--         * disk, then this bitmap must be merged to the
--         * ancestor. */
--        if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, parent,
--                                                                  chkdisk->name)))
--            parentbitmap = parentchkdisk->bitmap;
--
-         if (qemuCheckpointDiscardDiskBitmaps(domdisk->src, blockNamedNodeData,
--                                             chkdisk->bitmap, parentbitmap,
-+                                             chkdisk->bitmap,
-                                              actions, domdisk->dst,
-                                              &reopenimages) < 0)
-             return -1;
-@@ -336,7 +227,6 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-                       bool update_parent,
-                       bool metadata_only)
- {
--    virDomainMomentObjPtr parent = NULL;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     g_autofree char *chkFile = NULL;
-     bool chkcurrent = chk == virDomainCheckpointGetCurrent(vm->checkpoints);
-@@ -352,14 +242,17 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
- 
-     if (!metadata_only) {
-         virDomainCheckpointDefPtr chkdef = virDomainCheckpointObjGetDef(chk);
--        parent = virDomainCheckpointFindByName(vm->checkpoints,
--                                               chk->def->parent_name);
--        if (qemuCheckpointDiscardBitmaps(vm, chkdef, parent) < 0)
-+        if (qemuCheckpointDiscardBitmaps(vm, chkdef) < 0)
-             return -1;
-     }
- 
-     if (chkcurrent) {
-+        virDomainMomentObjPtr parent = NULL;
-+
-         virDomainCheckpointSetCurrent(vm->checkpoints, NULL);
-+        parent = virDomainCheckpointFindByName(vm->checkpoints,
-+                                               chk->def->parent_name);
-+
-         if (update_parent && parent) {
-             virDomainCheckpointSetCurrent(vm->checkpoints, parent);
-             if (qemuCheckpointWriteMetadata(vm, parent,
-diff --git a/src/qemu/qemu_checkpoint.h b/src/qemu/qemu_checkpoint.h
-index cf1e9e46cb..0d267a188c 100644
---- a/src/qemu/qemu_checkpoint.h
-+++ b/src/qemu/qemu_checkpoint.h
-@@ -76,7 +76,6 @@ int
- qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-                                  virHashTablePtr blockNamedNodeData,
-                                  const char *delbitmap,
--                                 const char *parentbitmap,
-                                  virJSONValuePtr actions,
-                                  const char *diskdst,
-                                  GSList **reopenimages);
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 2f675d7e03..201e5df6b4 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -830,7 +830,6 @@ struct testQemuCheckpointDeleteMergeData {
-     const char *name;
-     virStorageSourcePtr chain;
-     const char *deletebitmap;
--    const char *parentbitmap;
-     const char *nodedatafile;
- };
- 
-@@ -864,7 +863,6 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-     if (qemuCheckpointDiscardDiskBitmaps(data->chain,
-                                          nodedata,
-                                          data->deletebitmap,
--                                         data->parentbitmap,
-                                          actions,
-                                          "testdisk",
-                                          &reopenimages) >= 0) {
-@@ -1318,19 +1316,18 @@ mymain(void)
- 
-     TEST_BACKUP_BITMAP_CALCULATE("empty", bitmapSourceChain, "a", "empty");
- 
--#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, parbmp, named) \
-+#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, named) \
-     do { \
-         checkpointdeletedata.name = testname; \
-         checkpointdeletedata.chain = bitmapSourceChain; \
-         checkpointdeletedata.deletebitmap = delbmp; \
--        checkpointdeletedata.parentbitmap = parbmp; \
-         checkpointdeletedata.nodedatafile = named; \
-         if (virTestRun("checkpoint delete " testname, \
-                        testQemuCheckpointDeleteMerge, &checkpointdeletedata) < 0) \
-         ret = -1; \
-     } while (0)
- 
--    TEST_CHECKPOINT_DELETE_MERGE("empty", "a", NULL, "empty");
-+    TEST_CHECKPOINT_DELETE_MERGE("empty", "a", "empty");
- 
- #define TEST_BITMAP_VALIDATE(testname, bitmap, rc) \
-     do { \
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Extract-calculation-of-bitmap-merging-for-checkpoint-deletion.patch b/SOURCES/libvirt-qemu-checkpoint-Extract-calculation-of-bitmap-merging-for-checkpoint-deletion.patch
deleted file mode 100644
index 6bf6c32..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Extract-calculation-of-bitmap-merging-for-checkpoint-deletion.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 2de41b514449c5ab85a7a0943456a44909122874 Mon Sep 17 00:00:00 2001
-Message-Id: <2de41b514449c5ab85a7a0943456a44909122874@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:57 +0100
-Subject: [PATCH] qemu: checkpoint: Extract calculation of bitmap merging for
- checkpoint deletion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This will allow some testing before refactoring.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit d9dfc1f7de2e54c015504e0a0370e8a89b5e971a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <2b3c69597aa8f99af55e30f71d4496b6ae620d31.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 72 ++++++++++++++++++++++++--------------
- src/qemu/qemu_checkpoint.h |  7 ++++
- 2 files changed, 53 insertions(+), 26 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 1100f6e744..e75cdd0458 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -148,6 +148,46 @@ qemuCheckpointFindActiveDiskInParent(virDomainObjPtr vm,
- }
- 
- 
-+int
-+qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-+                                 const char *delbitmap,
-+                                 const char *parentbitmap,
-+                                 bool chkcurrent,
-+                                 virJSONValuePtr actions)
-+{
-+    if (parentbitmap) {
-+        g_autoptr(virJSONValue) arr = NULL;
-+
-+        if (!(arr = virJSONValueNewArray()))
-+            return -1;
-+
-+        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
-+                                                             src->nodeformat,
-+                                                             delbitmap) < 0)
-+            return -1;
-+
-+        if (chkcurrent) {
-+            if (qemuMonitorTransactionBitmapEnable(actions,
-+                                                   src->nodeformat,
-+                                                   parentbitmap) < 0)
-+                return -1;
-+        }
-+
-+        if (qemuMonitorTransactionBitmapMerge(actions,
-+                                              src->nodeformat,
-+                                              parentbitmap, &arr) < 0)
-+            return -1;
-+    }
-+
-+    if (qemuMonitorTransactionBitmapRemove(actions,
-+                                           src->nodeformat,
-+                                           delbitmap) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
- static int
- qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                              virDomainCheckpointDefPtr chkdef,
-@@ -167,6 +207,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-         virDomainCheckpointDiskDef *chkdisk = &chkdef->disks[i];
-         virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
-         virDomainCheckpointDiskDef *parentchkdisk = NULL;
-+        const char *parentbitmap = NULL;
- 
-         /* domdisk can be missing e.g. when it was unplugged */
-         if (!domdisk)
-@@ -178,33 +219,12 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-         /* If any ancestor checkpoint has a bitmap for the same
-          * disk, then this bitmap must be merged to the
-          * ancestor. */
--        if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, parent, chkdisk->name))) {
--            g_autoptr(virJSONValue) arr = NULL;
-+        if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, parent,
-+                                                                  chkdisk->name)))
-+            parentbitmap = parentchkdisk->name;
- 
--            if (!(arr = virJSONValueNewArray()))
--                return -1;
--
--            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
--                                                                 domdisk->src->nodeformat,
--                                                                 chkdisk->bitmap) < 0)
--                return -1;
--
--            if (chkcurrent) {
--                if (qemuMonitorTransactionBitmapEnable(actions,
--                                                       domdisk->src->nodeformat,
--                                                       parentchkdisk->bitmap) < 0)
--                    return -1;
--            }
--
--            if (qemuMonitorTransactionBitmapMerge(actions,
--                                                  domdisk->src->nodeformat,
--                                                  parentchkdisk->bitmap, &arr) < 0)
--                return -1;
--        }
--
--        if (qemuMonitorTransactionBitmapRemove(actions,
--                                               domdisk->src->nodeformat,
--                                               chkdisk->bitmap) < 0)
-+        if (qemuCheckpointDiscardDiskBitmaps(domdisk->src, chkdisk->bitmap,
-+                                             parentbitmap, chkcurrent, actions) < 0)
-             return -1;
-     }
- 
-diff --git a/src/qemu/qemu_checkpoint.h b/src/qemu/qemu_checkpoint.h
-index eb85611ea6..85fd453d50 100644
---- a/src/qemu/qemu_checkpoint.h
-+++ b/src/qemu/qemu_checkpoint.h
-@@ -71,3 +71,10 @@ qemuCheckpointCreateFinalize(virQEMUDriverPtr driver,
- void
- qemuCheckpointRollbackMetadata(virDomainObjPtr vm,
-                                virDomainMomentObjPtr chk);
-+
-+int
-+qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-+                                 const char *delbitmap,
-+                                 const char *parentbitmap,
-+                                 bool chkcurrent,
-+                                 virJSONValuePtr actions);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Introduce-helper-to-find-checkpoint-disk-definition-in-parents.patch b/SOURCES/libvirt-qemu-checkpoint-Introduce-helper-to-find-checkpoint-disk-definition-in-parents.patch
deleted file mode 100644
index c1357b6..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Introduce-helper-to-find-checkpoint-disk-definition-in-parents.patch
+++ /dev/null
@@ -1,215 +0,0 @@
-From a7a774b357e4f56ef4860dbc04065197e3dd9640 Mon Sep 17 00:00:00 2001
-Message-Id: <a7a774b357e4f56ef4860dbc04065197e3dd9640@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:56 +0100
-Subject: [PATCH] qemu: checkpoint: Introduce helper to find checkpoint disk
- definition in parents
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The algorithm is used in two places to find the parent checkpoint object
-which contains given disk and then uses data from the disk. Additionally
-the code is written in a very non-obvious way. Factor out the lookup of
-the disk into a function which also simplifies the callers.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 6796194a28bd42bcbb237ffae6faea262fcce660)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <4b9ca38d8272158c6d254cb1d3dad21cc736ad9f.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 127 ++++++++++++++++++++-----------------
- 1 file changed, 70 insertions(+), 57 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 326707e098..1100f6e744 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -104,6 +104,50 @@ qemuCheckpointWriteMetadata(virDomainObjPtr vm,
- }
- 
- 
-+/**
-+ * qemuCheckpointFindActiveDiskInParent:
-+ * @vm: domain object
-+ * @from: starting moment object
-+ * @diskname: name (target) of the disk to find
-+ *
-+ * Find the first checkpoint starting from @from continuing through parents
-+ * of the checkpoint which describes disk @diskname. Return the pointer to the
-+ * definition of the disk.
-+ */
-+static virDomainCheckpointDiskDef *
-+qemuCheckpointFindActiveDiskInParent(virDomainObjPtr vm,
-+                                     virDomainMomentObjPtr from,
-+                                     const char *diskname)
-+{
-+    virDomainMomentObjPtr parent = from;
-+    virDomainCheckpointDefPtr parentdef = NULL;
-+    size_t i;
-+
-+    while (parent) {
-+        parentdef = virDomainCheckpointObjGetDef(parent);
-+
-+        for (i = 0; i < parentdef->ndisks; i++) {
-+            virDomainCheckpointDiskDef *chkdisk = &parentdef->disks[i];
-+
-+            if (STRNEQ(chkdisk->name, diskname))
-+                continue;
-+
-+            /* currently inspected checkpoint doesn't describe the disk,
-+             * continue into parent checkpoint */
-+            if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+                break;
-+
-+            return chkdisk;
-+        }
-+
-+        parent = virDomainCheckpointFindByName(vm->checkpoints,
-+                                               parentdef->parent.parent_name);
-+    }
-+
-+    return NULL;
-+}
-+
-+
- static int
- qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                              virDomainCheckpointDefPtr chkdef,
-@@ -112,13 +156,9 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     virQEMUDriverPtr driver = priv->driver;
--    virDomainMomentObjPtr moment;
--    virDomainCheckpointDefPtr parentdef = NULL;
--    bool search_parents;
-     int rc;
-     g_autoptr(virJSONValue) actions = NULL;
-     size_t i;
--    size_t j;
- 
-     if (!(actions = virJSONValueNewArray()))
-         return -1;
-@@ -126,6 +166,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     for (i = 0; i < chkdef->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &chkdef->disks[i];
-         virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
-+        virDomainCheckpointDiskDef *parentchkdisk = NULL;
- 
-         /* domdisk can be missing e.g. when it was unplugged */
-         if (!domdisk)
-@@ -137,42 +178,28 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-         /* If any ancestor checkpoint has a bitmap for the same
-          * disk, then this bitmap must be merged to the
-          * ancestor. */
--        search_parents = true;
--        for (moment = parent;
--             search_parents && moment;
--             moment = virDomainCheckpointFindByName(vm->checkpoints,
--                                                    parentdef->parent.parent_name)) {
--            parentdef = virDomainCheckpointObjGetDef(moment);
--            for (j = 0; j < parentdef->ndisks; j++) {
--                virDomainCheckpointDiskDef *disk2;
--                g_autoptr(virJSONValue) arr = NULL;
-+        if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, parent, chkdisk->name))) {
-+            g_autoptr(virJSONValue) arr = NULL;
- 
--                disk2 = &parentdef->disks[j];
--                if (STRNEQ(chkdisk->name, disk2->name) ||
--                    disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
--                    continue;
--                search_parents = false;
-+            if (!(arr = virJSONValueNewArray()))
-+                return -1;
- 
--                if (!(arr = virJSONValueNewArray()))
--                    return -1;
-+            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
-+                                                                 domdisk->src->nodeformat,
-+                                                                 chkdisk->bitmap) < 0)
-+                return -1;
- 
--                if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
--                                                                     domdisk->src->nodeformat,
--                                                                     chkdisk->bitmap) < 0)
--                    return -1;
--
--                if (chkcurrent) {
--                    if (qemuMonitorTransactionBitmapEnable(actions,
--                                                           domdisk->src->nodeformat,
--                                                           disk2->bitmap) < 0)
--                        return -1;
--                }
--
--                if (qemuMonitorTransactionBitmapMerge(actions,
--                                                      domdisk->src->nodeformat,
--                                                      disk2->bitmap, &arr) < 0)
-+            if (chkcurrent) {
-+                if (qemuMonitorTransactionBitmapEnable(actions,
-+                                                       domdisk->src->nodeformat,
-+                                                       parentchkdisk->bitmap) < 0)
-                     return -1;
-             }
-+
-+            if (qemuMonitorTransactionBitmapMerge(actions,
-+                                                  domdisk->src->nodeformat,
-+                                                  parentchkdisk->bitmap, &arr) < 0)
-+                return -1;
-         }
- 
-         if (qemuMonitorTransactionBitmapRemove(actions,
-@@ -324,14 +351,12 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-                          virDomainMomentObjPtr old_current,
-                          virDomainCheckpointDefPtr def)
- {
--    size_t i, j;
--    virDomainCheckpointDefPtr olddef;
--    virDomainMomentObjPtr parent;
--    bool search_parents;
-+    size_t i;
- 
-     for (i = 0; i < def->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &def->disks[i];
-         virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
-+        virDomainCheckpointDiskDef *parentchkdisk = NULL;
- 
-         /* checkpoint definition validator mandates that the corresponding
-          * domdisk should exist */
-@@ -351,25 +376,13 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-          * iteration; but it is also possible to have to search
-          * further than the immediate parent to find another
-          * checkpoint with a bitmap on the same disk.  */
--        search_parents = true;
--        for (parent = old_current; search_parents && parent;
--             parent = virDomainCheckpointFindByName(vm->checkpoints,
--                                                    olddef->parent.parent_name)) {
--            olddef = virDomainCheckpointObjGetDef(parent);
--            for (j = 0; j < olddef->ndisks; j++) {
--                virDomainCheckpointDiskDef *disk2;
-+        if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, old_current,
-+                                                                  chkdisk->name))) {
- 
--                disk2 = &olddef->disks[j];
--                if (STRNEQ(chkdisk->name, disk2->name) ||
--                    disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
--                    continue;
--                if (qemuMonitorTransactionBitmapDisable(actions,
--                                                        domdisk->src->nodeformat,
--                                                        disk2->bitmap) < 0)
--                    return -1;
--                search_parents = false;
--                break;
--            }
-+            if (qemuMonitorTransactionBitmapDisable(actions,
-+                                                    domdisk->src->nodeformat,
-+                                                    parentchkdisk->bitmap) < 0)
-+                return -1;
-         }
-     }
-     return 0;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Introduce-support-for-deleting-checkpoints-accross-snapshots.patch b/SOURCES/libvirt-qemu-checkpoint-Introduce-support-for-deleting-checkpoints-accross-snapshots.patch
deleted file mode 100644
index b62d94f..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Introduce-support-for-deleting-checkpoints-accross-snapshots.patch
+++ /dev/null
@@ -1,298 +0,0 @@
-From 30377cd627a919e51cc4bb60a8a57e94e73f016c Mon Sep 17 00:00:00 2001
-Message-Id: <30377cd627a919e51cc4bb60a8a57e94e73f016c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:12 +0100
-Subject: [PATCH] qemu: checkpoint: Introduce support for deleting checkpoints
- accross snapshots
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow deleting of checkpoints when snapshots were created along. The
-code tracks and modifies the checkpoint list so that backups can still
-be taken with such a backing chain. This unfortunately requires to
-rename few bitmaps (by copying and deleting them) in some cases.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 30bc426071c0f5957af01181c063cd68ade97899)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <e9f416811658b2ba03968ae5fca783b7fb7649f7.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 112 ++++++++++++++++++++++++++++---------
- src/qemu/qemu_checkpoint.h |   5 +-
- tests/qemublocktest.c      |  34 +++++++----
- 3 files changed, 111 insertions(+), 40 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index e75cdd0458..55061bbf76 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -24,6 +24,7 @@
- #include "qemu_capabilities.h"
- #include "qemu_monitor.h"
- #include "qemu_domain.h"
-+#include "qemu_block.h"
- 
- #include "virerror.h"
- #include "virlog.h"
-@@ -150,39 +151,92 @@ qemuCheckpointFindActiveDiskInParent(virDomainObjPtr vm,
- 
- int
- qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-+                                 virHashTablePtr blockNamedNodeData,
-                                  const char *delbitmap,
-                                  const char *parentbitmap,
--                                 bool chkcurrent,
--                                 virJSONValuePtr actions)
-+                                 virJSONValuePtr actions,
-+                                 const char *diskdst)
- {
--    if (parentbitmap) {
--        g_autoptr(virJSONValue) arr = NULL;
-+    virStorageSourcePtr n = src;
- 
--        if (!(arr = virJSONValueNewArray()))
--            return -1;
-+    /* find the backing chain entry with bitmap named '@delbitmap' */
-+    while (n) {
-+        qemuBlockNamedNodeDataBitmapPtr tmp;
- 
--        if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
--                                                             src->nodeformat,
--                                                             delbitmap) < 0)
--            return -1;
-+        if ((tmp = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                         n, delbitmap))) {
-+            break;
-+        }
- 
--        if (chkcurrent) {
--            if (qemuMonitorTransactionBitmapEnable(actions,
--                                                   src->nodeformat,
--                                                   parentbitmap) < 0)
-+        n = n->backingStore;
-+    }
-+
-+    if (!n) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("bitmap '%s' not found in backing chain of '%s'"),
-+                       delbitmap, diskdst);
-+        return -1;
-+    }
-+
-+    while (n) {
-+        qemuBlockNamedNodeDataBitmapPtr srcbitmap;
-+
-+        if (!(srcbitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                                n, delbitmap)))
-+            break;
-+
-+        /* For the actual checkpoint deletion we will merge any bitmap into the
-+         * bitmap of the parent checkpoint (@parentbitmap) or for any image
-+         * where the parent checkpoint bitmap is not present we must rename
-+         * the bitmap of the deleted checkpoint into the bitmap of the parent
-+         * checkpoint as qemu can't currently take the allocation map and turn
-+         * it into a bitmap and thus we wouldn't be able to do a backup. */
-+        if (parentbitmap) {
-+            qemuBlockNamedNodeDataBitmapPtr dstbitmap;
-+            g_autoptr(virJSONValue) arr = NULL;
-+
-+            dstbitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                              n, parentbitmap);
-+
-+            if (dstbitmap) {
-+                if (srcbitmap->recording && !dstbitmap->recording) {
-+                    if (qemuMonitorTransactionBitmapEnable(actions,
-+                                                           n->nodeformat,
-+                                                           dstbitmap->name) < 0)
-+                        return -1;
-+                }
-+
-+            } else {
-+                if (qemuMonitorTransactionBitmapAdd(actions,
-+                                                    n->nodeformat,
-+                                                    parentbitmap,
-+                                                    true,
-+                                                    !srcbitmap->recording,
-+                                                    srcbitmap->granularity) < 0)
-+                    return -1;
-+            }
-+
-+            if (!(arr = virJSONValueNewArray()))
-+                return -1;
-+
-+            if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
-+                                                                 n->nodeformat,
-+                                                                 srcbitmap->name) < 0)
-+                return -1;
-+
-+            if (qemuMonitorTransactionBitmapMerge(actions,
-+                                                  n->nodeformat,
-+                                                  parentbitmap, &arr) < 0)
-                 return -1;
-         }
- 
--        if (qemuMonitorTransactionBitmapMerge(actions,
--                                              src->nodeformat,
--                                              parentbitmap, &arr) < 0)
-+        if (qemuMonitorTransactionBitmapRemove(actions,
-+                                               n->nodeformat,
-+                                               srcbitmap->name) < 0)
-             return -1;
--    }
- 
--    if (qemuMonitorTransactionBitmapRemove(actions,
--                                           src->nodeformat,
--                                           delbitmap) < 0)
--        return -1;
-+        n = n->backingStore;
-+    }
- 
-     return 0;
- }
-@@ -191,11 +245,11 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
- static int
- qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                              virDomainCheckpointDefPtr chkdef,
--                             bool chkcurrent,
-                              virDomainMomentObjPtr parent)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     virQEMUDriverPtr driver = priv->driver;
-+    g_autoptr(virHashTable) blockNamedNodeData = NULL;
-     int rc;
-     g_autoptr(virJSONValue) actions = NULL;
-     size_t i;
-@@ -203,6 +257,11 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     if (!(actions = virJSONValueNewArray()))
-         return -1;
- 
-+    qemuDomainObjEnterMonitor(driver, vm);
-+    blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
-+    if (qemuDomainObjExitMonitor(priv->driver, vm) < 0 || !blockNamedNodeData)
-+        return -1;
-+
-     for (i = 0; i < chkdef->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &chkdef->disks[i];
-         virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
-@@ -223,8 +282,9 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                                                                   chkdisk->name)))
-             parentbitmap = parentchkdisk->name;
- 
--        if (qemuCheckpointDiscardDiskBitmaps(domdisk->src, chkdisk->bitmap,
--                                             parentbitmap, chkcurrent, actions) < 0)
-+        if (qemuCheckpointDiscardDiskBitmaps(domdisk->src, blockNamedNodeData,
-+                                             chkdisk->bitmap, parentbitmap,
-+                                             actions, domdisk->dst) < 0)
-             return -1;
-     }
- 
-@@ -262,7 +322,7 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-         virDomainCheckpointDefPtr chkdef = virDomainCheckpointObjGetDef(chk);
-         parent = virDomainCheckpointFindByName(vm->checkpoints,
-                                                chk->def->parent_name);
--        if (qemuCheckpointDiscardBitmaps(vm, chkdef, chkcurrent, parent) < 0)
-+        if (qemuCheckpointDiscardBitmaps(vm, chkdef, parent) < 0)
-             return -1;
-     }
- 
-diff --git a/src/qemu/qemu_checkpoint.h b/src/qemu/qemu_checkpoint.h
-index 85fd453d50..976b1eed0f 100644
---- a/src/qemu/qemu_checkpoint.h
-+++ b/src/qemu/qemu_checkpoint.h
-@@ -74,7 +74,8 @@ qemuCheckpointRollbackMetadata(virDomainObjPtr vm,
- 
- int
- qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-+                                 virHashTablePtr blockNamedNodeData,
-                                  const char *delbitmap,
-                                  const char *parentbitmap,
--                                 bool chkcurrent,
--                                 virJSONValuePtr actions);
-+                                 virJSONValuePtr actions,
-+                                 const char *diskdst);
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index edaf82053d..e56f813424 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -704,6 +704,7 @@ struct testQemuCheckpointDeleteMergeData {
-     virStorageSourcePtr chain;
-     const char *deletebitmap;
-     const char *parentbitmap;
-+    const char *nodedatafile;
- };
- 
- 
-@@ -714,22 +715,30 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-     g_autofree char *actual = NULL;
-     g_autofree char *expectpath = NULL;
-     g_autoptr(virJSONValue) actions = NULL;
--    bool currentcheckpoint;
-+    g_autoptr(virJSONValue) nodedatajson = NULL;
-+    g_autoptr(virHashTable) nodedata = NULL;
- 
-     expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
-                                  checkpointDeletePrefix, data->name);
- 
-+    if (!(nodedatajson = virTestLoadFileJSON(bitmapDetectPrefix, data->nodedatafile,
-+                                             ".json", NULL)))
-+        return -1;
-+
-+    if (!(nodedata = qemuMonitorJSONBlockGetNamedNodeDataJSON(nodedatajson))) {
-+        VIR_TEST_VERBOSE("failed to load nodedata JSON\n");
-+        return -1;
-+    }
-+
-     if (!(actions = virJSONValueNewArray()))
-         return -1;
- 
--    /* hack to get the 'current' state until the function stops accepting it */
--    currentcheckpoint = STREQ("current", data->deletebitmap);
--
-     if (qemuCheckpointDiscardDiskBitmaps(data->chain,
-+                                         nodedata,
-                                          data->deletebitmap,
-                                          data->parentbitmap,
--                                         currentcheckpoint,
--                                         actions) < 0) {
-+                                         actions,
-+                                         "testdisk") < 0) {
-         VIR_TEST_VERBOSE("failed to generate checkpoint delete transaction\n");
-         return -1;
-     }
-@@ -988,22 +997,23 @@ mymain(void)
-     TEST_BACKUP_BITMAP_CALCULATE("snapshot-intermediate", bitmapSourceChain, "d", "snapshots");
-     TEST_BACKUP_BITMAP_CALCULATE("snapshot-deep", bitmapSourceChain, "a", "snapshots");
- 
--#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, parbmp) \
-+#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, parbmp, named) \
-     do { \
-         checkpointdeletedata.name = testname; \
-         checkpointdeletedata.chain = bitmapSourceChain; \
-         checkpointdeletedata.deletebitmap = delbmp; \
-         checkpointdeletedata.parentbitmap = parbmp; \
-+        checkpointdeletedata.nodedatafile = named; \
-         if (virTestRun("checkpoint delete " testname, \
-                        testQemuCheckpointDeleteMerge, &checkpointdeletedata) < 0) \
-         ret = -1; \
-     } while (0)
- 
--    TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL);
--    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate1", "b", "a");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate2", "c", "b");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate3", "d", "c");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-current", "current", "d");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL, "basic");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate1", "b", "a", "basic");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate2", "c", "b", "basic");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate3", "d", "c", "basic");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-current", "current", "d", "basic");
- 
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Store-whether-deleted-checkpoint-is-current-in-a-variable.patch b/SOURCES/libvirt-qemu-checkpoint-Store-whether-deleted-checkpoint-is-current-in-a-variable.patch
deleted file mode 100644
index 5941741..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Store-whether-deleted-checkpoint-is-current-in-a-variable.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From f259cc67ba390d0d88f2db616514503714462742 Mon Sep 17 00:00:00 2001
-Message-Id: <f259cc67ba390d0d88f2db616514503714462742@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:49 +0100
-Subject: [PATCH] qemu: checkpoint: Store whether deleted checkpoint is current
- in a variable
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Avoid two computations by using a boolean.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 606dc66b0958fe3545a318ae9bc6a62a67786378)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <d2da4b96b189a8ac30f8be642d854a8a71e35083.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 2fa5c1ae00..d13d4c2a37 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -117,6 +117,7 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-     size_t i, j;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     g_autofree char *chkFile = NULL;
-+    bool chkcurrent = chk == virDomainCheckpointGetCurrent(vm->checkpoints);
- 
-     if (!metadata_only && !virDomainObjIsActive(vm)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-@@ -172,7 +173,7 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-                     if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr, node, disk->bitmap) < 0)
-                         return -1;
- 
--                    if (chk == virDomainCheckpointGetCurrent(vm->checkpoints)) {
-+                    if (chkcurrent) {
-                         if (qemuMonitorTransactionBitmapEnable(actions, node, disk2->bitmap) < 0)
-                             return -1;
-                     }
-@@ -192,7 +193,7 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-             return -1;
-     }
- 
--    if (chk == virDomainCheckpointGetCurrent(vm->checkpoints)) {
-+    if (chkcurrent) {
-         virDomainCheckpointSetCurrent(vm->checkpoints, NULL);
-         if (update_parent && parent) {
-             virDomainCheckpointSetCurrent(vm->checkpoints, parent);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Track-and-relabel-images-for-bitmap-merging.patch b/SOURCES/libvirt-qemu-checkpoint-Track-and-relabel-images-for-bitmap-merging.patch
deleted file mode 100644
index a591845..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Track-and-relabel-images-for-bitmap-merging.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From eee9a7173898212632d42ef74777d6726ce29d5f Mon Sep 17 00:00:00 2001
-Message-Id: <eee9a7173898212632d42ef74777d6726ce29d5f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:15 +0100
-Subject: [PATCH] qemu: checkpoint: Track and relabel images for bitmap merging
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow qemu access to modify backing files in case when we want to delete
-a checkpoint.
-
-This patch adds tracking of which images need to be relabelled when
-calculating the transaction, the code to relabel them and rollback.
-
-To verify that stuff works we also output the list of images to relabel
-into the test case output files in qemublocktest.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8e94e290104ffb5d9db051ab0b0ff36f58dbc943)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <36c2dc7f5d0d59aac90b2e272983f72476b00661.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c                    | 35 ++++++++++++++++---
- src/qemu/qemu_checkpoint.h                    |  3 +-
- tests/qemublocktest.c                         | 19 ++++++++--
- .../snapshots-intermediate1-out.json          |  2 ++
- .../snapshots-intermediate2-out.json          |  3 ++
- .../snapshots-intermediate3-out.json          |  2 ++
- .../snapshots-noparent-out.json               |  4 +++
- ...ynthetic-checkpoint-intermediate1-out.json |  2 ++
- ...ynthetic-checkpoint-intermediate2-out.json |  2 ++
- ...ynthetic-checkpoint-intermediate3-out.json |  2 ++
- ...ots-synthetic-checkpoint-noparent-out.json |  4 +++
- 11 files changed, 70 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 55061bbf76..59b7f63fdc 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -155,7 +155,8 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-                                  const char *delbitmap,
-                                  const char *parentbitmap,
-                                  virJSONValuePtr actions,
--                                 const char *diskdst)
-+                                 const char *diskdst,
-+                                 GSList **reopenimages)
- {
-     virStorageSourcePtr n = src;
- 
-@@ -235,6 +236,9 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-                                                srcbitmap->name) < 0)
-             return -1;
- 
-+        if (n != src)
-+            *reopenimages = g_slist_prepend(*reopenimages, n);
-+
-         n = n->backingStore;
-     }
- 
-@@ -250,9 +254,12 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     virQEMUDriverPtr driver = priv->driver;
-     g_autoptr(virHashTable) blockNamedNodeData = NULL;
--    int rc;
-+    int rc = -1;
-     g_autoptr(virJSONValue) actions = NULL;
-     size_t i;
-+    g_autoptr(GSList) reopenimages = NULL;
-+    g_autoptr(GSList) relabelimages = NULL;
-+    GSList *next;
- 
-     if (!(actions = virJSONValueNewArray()))
-         return -1;
-@@ -284,16 +291,34 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
- 
-         if (qemuCheckpointDiscardDiskBitmaps(domdisk->src, blockNamedNodeData,
-                                              chkdisk->bitmap, parentbitmap,
--                                             actions, domdisk->dst) < 0)
-+                                             actions, domdisk->dst,
-+                                             &reopenimages) < 0)
-             return -1;
-     }
- 
-+    /* label any non-top images for read-write access */
-+    for (next = reopenimages; next; next = next->next) {
-+        virStorageSourcePtr src = next->data;
-+
-+        if (qemuDomainStorageSourceAccessAllow(driver, vm, src, false, false) < 0)
-+            goto relabel;
-+
-+        relabelimages = g_slist_prepend(relabelimages, src);
-+    }
-+
-     qemuDomainObjEnterMonitor(driver, vm);
-     rc = qemuMonitorTransaction(priv->mon, &actions);
--    if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-+    if (qemuDomainObjExitMonitor(driver, vm) < 0)
-         return -1;
- 
--    return 0;
-+ relabel:
-+    for (next = relabelimages; next; next = next->next) {
-+        virStorageSourcePtr src = next->data;
-+
-+        ignore_value(qemuDomainStorageSourceAccessAllow(driver, vm, src, true, false));
-+    }
-+
-+    return rc;
- }
- 
- 
-diff --git a/src/qemu/qemu_checkpoint.h b/src/qemu/qemu_checkpoint.h
-index 976b1eed0f..cf1e9e46cb 100644
---- a/src/qemu/qemu_checkpoint.h
-+++ b/src/qemu/qemu_checkpoint.h
-@@ -78,4 +78,5 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-                                  const char *delbitmap,
-                                  const char *parentbitmap,
-                                  virJSONValuePtr actions,
--                                 const char *diskdst);
-+                                 const char *diskdst,
-+                                 GSList **reopenimages);
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 2e5927f3c1..ed8b061e2e 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -717,6 +717,9 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-     g_autoptr(virJSONValue) actions = NULL;
-     g_autoptr(virJSONValue) nodedatajson = NULL;
-     g_autoptr(virHashTable) nodedata = NULL;
-+    g_autoptr(GSList) reopenimages = NULL;
-+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-+    GSList *tmp;
- 
-     expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
-                                  checkpointDeletePrefix, data->name);
-@@ -738,14 +741,26 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-                                          data->deletebitmap,
-                                          data->parentbitmap,
-                                          actions,
--                                         "testdisk") < 0) {
-+                                         "testdisk",
-+                                         &reopenimages) < 0) {
-         VIR_TEST_VERBOSE("failed to generate checkpoint delete transaction\n");
-         return -1;
-     }
- 
--    if (!(actual = virJSONValueToString(actions, true)))
-+    if (virJSONValueToBuffer(actions, &buf, true) < 0)
-         return -1;
- 
-+    if (reopenimages) {
-+        virBufferAddLit(&buf, "reopen nodes:\n");
-+
-+        for (tmp = reopenimages; tmp; tmp = tmp->next) {
-+            virStorageSourcePtr src = tmp->data;
-+            virBufferAsprintf(&buf, "%s\n", src->nodeformat);
-+        }
-+    }
-+
-+    actual = virBufferContentAndReset(&buf);
-+
-     return virTestCompareToFile(actual, expectpath);
- }
- 
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-index 29fefeea63..c9bda3a17a 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-@@ -20,3 +20,5 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-index 4da21a9df7..8a0e3f2cff 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-@@ -57,3 +57,6 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-3-format
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-index dc87dd60b8..211bc40baf 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-@@ -57,3 +57,5 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-index 45a84b47c2..f750f44da2 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-@@ -21,3 +21,7 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-5-format
-+libvirt-4-format
-+libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-index e979691e6f..d7e6d18637 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-@@ -27,3 +27,5 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-index e82098918a..cfbff010c2 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-@@ -30,3 +30,5 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-index dc87dd60b8..211bc40baf 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-@@ -57,3 +57,5 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-index 45a84b47c2..f750f44da2 100644
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-@@ -21,3 +21,7 @@
-     }
-   }
- ]
-+reopen nodes:
-+libvirt-5-format
-+libvirt-4-format
-+libvirt-3-format
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-Use-disk-definition-directly-when-creating-checkpoint.patch b/SOURCES/libvirt-qemu-checkpoint-Use-disk-definition-directly-when-creating-checkpoint.patch
deleted file mode 100644
index 5185ed5..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-Use-disk-definition-directly-when-creating-checkpoint.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From dc4997ee498486135e46ca0e121835935bbf26db Mon Sep 17 00:00:00 2001
-Message-Id: <dc4997ee498486135e46ca0e121835935bbf26db@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:53 +0100
-Subject: [PATCH] qemu: checkpoint: Use disk definition directly when creating
- checkpoint
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Lookup the whole disk definition rather than just the node name.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 7973f7d7926ac9dbc5464e6be6eb2aaacecc2251)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <d4ad0d55d36cfc8c1af9a997930936364e94648c.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 16 +++++++++++-----
- 1 file changed, 11 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 0aa854324b..03a8321135 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -320,12 +320,16 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
- 
-     for (i = 0; i < def->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &def->disks[i];
--        const char *node;
-+        virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
- 
--        if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+        /* checkpoint definition validator mandates that the corresponding
-+         * domdisk should exist */
-+        if (!domdisk ||
-+            chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-             continue;
--        node = qemuDomainDiskNodeFormatLookup(vm, chkdisk->name);
--        if (qemuMonitorTransactionBitmapAdd(actions, node, chkdisk->bitmap, true, false, 0) < 0)
-+
-+        if (qemuMonitorTransactionBitmapAdd(actions, domdisk->src->nodeformat,
-+                                            chkdisk->bitmap, true, false, 0) < 0)
-             return -1;
- 
-         /* We only want one active bitmap for a disk along the
-@@ -348,7 +352,9 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-                 if (STRNEQ(chkdisk->name, disk2->name) ||
-                     disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-                     continue;
--                if (qemuMonitorTransactionBitmapDisable(actions, node, disk2->bitmap) < 0)
-+                if (qemuMonitorTransactionBitmapDisable(actions,
-+                                                        domdisk->src->nodeformat,
-+                                                        disk2->bitmap) < 0)
-                     return -1;
-                 search_parents = false;
-                 break;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointAddActions.patch b/SOURCES/libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointAddActions.patch
deleted file mode 100644
index d407d7d..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointAddActions.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 7a23710e912348efb55a98e7c6e6d1cc7f452b1f Mon Sep 17 00:00:00 2001
-Message-Id: <7a23710e912348efb55a98e7c6e6d1cc7f452b1f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:52 +0100
-Subject: [PATCH] qemu: checkpoint: rename disk->chkdisk in
- qemuCheckpointAddActions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upcoming patches will also use the domain disk definition. Rename disk
-to chkdisk for clarity.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit f3e0a45a00465a6f19f510f7806ade1764a7e162)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <ef78ad0aa581d70c4f007665cd00988796c02c8f.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index d347b8fc6c..0aa854324b 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -319,13 +319,13 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-     bool search_parents;
- 
-     for (i = 0; i < def->ndisks; i++) {
--        virDomainCheckpointDiskDef *disk = &def->disks[i];
-+        virDomainCheckpointDiskDef *chkdisk = &def->disks[i];
-         const char *node;
- 
--        if (disk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+        if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-             continue;
--        node = qemuDomainDiskNodeFormatLookup(vm, disk->name);
--        if (qemuMonitorTransactionBitmapAdd(actions, node, disk->bitmap, true, false, 0) < 0)
-+        node = qemuDomainDiskNodeFormatLookup(vm, chkdisk->name);
-+        if (qemuMonitorTransactionBitmapAdd(actions, node, chkdisk->bitmap, true, false, 0) < 0)
-             return -1;
- 
-         /* We only want one active bitmap for a disk along the
-@@ -345,7 +345,7 @@ qemuCheckpointAddActions(virDomainObjPtr vm,
-                 virDomainCheckpointDiskDef *disk2;
- 
-                 disk2 = &olddef->disks[j];
--                if (STRNEQ(disk->name, disk2->name) ||
-+                if (STRNEQ(chkdisk->name, disk2->name) ||
-                     disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-                     continue;
-                 if (qemuMonitorTransactionBitmapDisable(actions, node, disk2->bitmap) < 0)
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointDiscardBitmaps.patch b/SOURCES/libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointDiscardBitmaps.patch
deleted file mode 100644
index 8ea84ba..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointDiscardBitmaps.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 4a0a0c37c0f3ea2c8eb6b96b07c990d7a4ce1c8b Mon Sep 17 00:00:00 2001
-Message-Id: <4a0a0c37c0f3ea2c8eb6b96b07c990d7a4ce1c8b@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:51 +0100
-Subject: [PATCH] qemu: checkpoint: rename disk->chkdisk in
- qemuCheckpointDiscardBitmaps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upcoming patches will also use the domain disk definition. Rename disk
-to chkdisk for clarity.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit a303e8ea47c9a2caa39ae744c0bf9a2f724a6137)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <0799859ad288a747f1d12dd07bbb403053d78457.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 9ff3129570..d347b8fc6c 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -124,13 +124,13 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-         return -1;
- 
-     for (i = 0; i < chkdef->ndisks; i++) {
--        virDomainCheckpointDiskDef *disk = &chkdef->disks[i];
-+        virDomainCheckpointDiskDef *chkdisk = &chkdef->disks[i];
-         const char *node;
- 
--        if (disk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+        if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-             continue;
- 
--        node = qemuDomainDiskNodeFormatLookup(vm, disk->name);
-+        node = qemuDomainDiskNodeFormatLookup(vm, chkdisk->name);
-         /* If any ancestor checkpoint has a bitmap for the same
-          * disk, then this bitmap must be merged to the
-          * ancestor. */
-@@ -145,7 +145,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                 g_autoptr(virJSONValue) arr = NULL;
- 
-                 disk2 = &parentdef->disks[j];
--                if (STRNEQ(disk->name, disk2->name) ||
-+                if (STRNEQ(chkdisk->name, disk2->name) ||
-                     disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-                     continue;
-                 search_parents = false;
-@@ -153,7 +153,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                 if (!(arr = virJSONValueNewArray()))
-                     return -1;
- 
--                if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr, node, disk->bitmap) < 0)
-+                if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr, node, chkdisk->bitmap) < 0)
-                     return -1;
- 
-                 if (chkcurrent) {
-@@ -166,7 +166,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-             }
-         }
- 
--        if (qemuMonitorTransactionBitmapRemove(actions, node, disk->bitmap) < 0)
-+        if (qemuMonitorTransactionBitmapRemove(actions, node, chkdisk->bitmap) < 0)
-             return -1;
-     }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-split-out-checkpoint-deletion-bitmaps.patch b/SOURCES/libvirt-qemu-checkpoint-split-out-checkpoint-deletion-bitmaps.patch
deleted file mode 100644
index 6beba43..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-split-out-checkpoint-deletion-bitmaps.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-From 628b1f392c5fb2e3a492640a9069edd244a7b150 Mon Sep 17 00:00:00 2001
-Message-Id: <628b1f392c5fb2e3a492640a9069edd244a7b150@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:50 +0100
-Subject: [PATCH] qemu: checkpoint: split out checkpoint deletion bitmaps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-qemuCheckpointDiscard is a massive function that can be separated into
-smaller bits. Extract the part that actually modifies the disk from the
-metadata handling.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 44e1b85717b9a4e6df24f9cbf846627e4f29b859)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <b6cdc7883d1f3b16e8a496dac6e9ec046ec2c4ea.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 137 ++++++++++++++++++++-----------------
- 1 file changed, 76 insertions(+), 61 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index d13d4c2a37..9ff3129570 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -104,6 +104,81 @@ qemuCheckpointWriteMetadata(virDomainObjPtr vm,
- }
- 
- 
-+static int
-+qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-+                             virDomainCheckpointDefPtr chkdef,
-+                             bool chkcurrent,
-+                             virDomainMomentObjPtr parent)
-+{
-+    qemuDomainObjPrivatePtr priv = vm->privateData;
-+    virQEMUDriverPtr driver = priv->driver;
-+    virDomainMomentObjPtr moment;
-+    virDomainCheckpointDefPtr parentdef = NULL;
-+    bool search_parents;
-+    int rc;
-+    g_autoptr(virJSONValue) actions = NULL;
-+    size_t i;
-+    size_t j;
-+
-+    if (!(actions = virJSONValueNewArray()))
-+        return -1;
-+
-+    for (i = 0; i < chkdef->ndisks; i++) {
-+        virDomainCheckpointDiskDef *disk = &chkdef->disks[i];
-+        const char *node;
-+
-+        if (disk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+            continue;
-+
-+        node = qemuDomainDiskNodeFormatLookup(vm, disk->name);
-+        /* If any ancestor checkpoint has a bitmap for the same
-+         * disk, then this bitmap must be merged to the
-+         * ancestor. */
-+        search_parents = true;
-+        for (moment = parent;
-+             search_parents && moment;
-+             moment = virDomainCheckpointFindByName(vm->checkpoints,
-+                                                    parentdef->parent.parent_name)) {
-+            parentdef = virDomainCheckpointObjGetDef(moment);
-+            for (j = 0; j < parentdef->ndisks; j++) {
-+                virDomainCheckpointDiskDef *disk2;
-+                g_autoptr(virJSONValue) arr = NULL;
-+
-+                disk2 = &parentdef->disks[j];
-+                if (STRNEQ(disk->name, disk2->name) ||
-+                    disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-+                    continue;
-+                search_parents = false;
-+
-+                if (!(arr = virJSONValueNewArray()))
-+                    return -1;
-+
-+                if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr, node, disk->bitmap) < 0)
-+                    return -1;
-+
-+                if (chkcurrent) {
-+                    if (qemuMonitorTransactionBitmapEnable(actions, node, disk2->bitmap) < 0)
-+                        return -1;
-+                }
-+
-+                if (qemuMonitorTransactionBitmapMerge(actions, node, disk2->bitmap, &arr) < 0)
-+                    return -1;
-+            }
-+        }
-+
-+        if (qemuMonitorTransactionBitmapRemove(actions, node, disk->bitmap) < 0)
-+            return -1;
-+    }
-+
-+    qemuDomainObjEnterMonitor(driver, vm);
-+    rc = qemuMonitorTransaction(priv->mon, &actions);
-+    if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
- static int
- qemuCheckpointDiscard(virQEMUDriverPtr driver,
-                       virDomainObjPtr vm,
-@@ -112,9 +187,6 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-                       bool metadata_only)
- {
-     virDomainMomentObjPtr parent = NULL;
--    virDomainMomentObjPtr moment;
--    virDomainCheckpointDefPtr parentdef = NULL;
--    size_t i, j;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     g_autofree char *chkFile = NULL;
-     bool chkcurrent = chk == virDomainCheckpointGetCurrent(vm->checkpoints);
-@@ -129,67 +201,10 @@ qemuCheckpointDiscard(virQEMUDriverPtr driver,
-                               chk->def->name);
- 
-     if (!metadata_only) {
--        qemuDomainObjPrivatePtr priv = vm->privateData;
--        bool search_parents;
-         virDomainCheckpointDefPtr chkdef = virDomainCheckpointObjGetDef(chk);
--        int rc;
--        g_autoptr(virJSONValue) actions = NULL;
--
--        if (!(actions = virJSONValueNewArray()))
--            return -1;
--
-         parent = virDomainCheckpointFindByName(vm->checkpoints,
-                                                chk->def->parent_name);
--        for (i = 0; i < chkdef->ndisks; i++) {
--            virDomainCheckpointDiskDef *disk = &chkdef->disks[i];
--            const char *node;
--
--            if (disk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
--                continue;
--
--            node = qemuDomainDiskNodeFormatLookup(vm, disk->name);
--            /* If any ancestor checkpoint has a bitmap for the same
--             * disk, then this bitmap must be merged to the
--             * ancestor. */
--            search_parents = true;
--            for (moment = parent;
--                 search_parents && moment;
--                 moment = virDomainCheckpointFindByName(vm->checkpoints,
--                                                        parentdef->parent.parent_name)) {
--                parentdef = virDomainCheckpointObjGetDef(moment);
--                for (j = 0; j < parentdef->ndisks; j++) {
--                    virDomainCheckpointDiskDef *disk2;
--                    g_autoptr(virJSONValue) arr = NULL;
--
--                    disk2 = &parentdef->disks[j];
--                    if (STRNEQ(disk->name, disk2->name) ||
--                        disk2->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
--                        continue;
--                    search_parents = false;
--
--                    if (!(arr = virJSONValueNewArray()))
--                        return -1;
--
--                    if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr, node, disk->bitmap) < 0)
--                        return -1;
--
--                    if (chkcurrent) {
--                        if (qemuMonitorTransactionBitmapEnable(actions, node, disk2->bitmap) < 0)
--                            return -1;
--                    }
--
--                    if (qemuMonitorTransactionBitmapMerge(actions, node, disk2->bitmap, &arr) < 0)
--                        return -1;
--                }
--            }
--
--            if (qemuMonitorTransactionBitmapRemove(actions, node, disk->bitmap) < 0)
--                return -1;
--        }
--
--        qemuDomainObjEnterMonitor(driver, vm);
--        rc = qemuMonitorTransaction(priv->mon, &actions);
--        if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-+        if (qemuCheckpointDiscardBitmaps(vm, chkdef, chkcurrent, parent) < 0)
-             return -1;
-     }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-checkpoint-tolerate-missing-disks-on-checkpoint-deletion.patch b/SOURCES/libvirt-qemu-checkpoint-tolerate-missing-disks-on-checkpoint-deletion.patch
deleted file mode 100644
index d638b92..0000000
--- a/SOURCES/libvirt-qemu-checkpoint-tolerate-missing-disks-on-checkpoint-deletion.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From d59261d209da6f3dd4dfef7fab327de7cbb6e7ff Mon Sep 17 00:00:00 2001
-Message-Id: <d59261d209da6f3dd4dfef7fab327de7cbb6e7ff@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:54 +0100
-Subject: [PATCH] qemu: checkpoint: tolerate missing disks on checkpoint
- deletion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If a disk is unplugged and then the user tries to delete a checkpoint
-the code would try to use NULL node name as it was not checked.
-
-Fix this by fetching the whole disk definition object and verifying it
-was found.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit f19248a1395e59abbd68ac31af3d9bd1273555bf)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <bab5a0f3d17855a657a6b7de4699a72e176780d6.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 23 +++++++++++++++++------
- 1 file changed, 17 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 03a8321135..326707e098 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -125,12 +125,15 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
- 
-     for (i = 0; i < chkdef->ndisks; i++) {
-         virDomainCheckpointDiskDef *chkdisk = &chkdef->disks[i];
--        const char *node;
-+        virDomainDiskDefPtr domdisk = virDomainDiskByTarget(vm->def, chkdisk->name);
-+
-+        /* domdisk can be missing e.g. when it was unplugged */
-+        if (!domdisk)
-+            continue;
- 
-         if (chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
-             continue;
- 
--        node = qemuDomainDiskNodeFormatLookup(vm, chkdisk->name);
-         /* If any ancestor checkpoint has a bitmap for the same
-          * disk, then this bitmap must be merged to the
-          * ancestor. */
-@@ -153,20 +156,28 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                 if (!(arr = virJSONValueNewArray()))
-                     return -1;
- 
--                if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr, node, chkdisk->bitmap) < 0)
-+                if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
-+                                                                     domdisk->src->nodeformat,
-+                                                                     chkdisk->bitmap) < 0)
-                     return -1;
- 
-                 if (chkcurrent) {
--                    if (qemuMonitorTransactionBitmapEnable(actions, node, disk2->bitmap) < 0)
-+                    if (qemuMonitorTransactionBitmapEnable(actions,
-+                                                           domdisk->src->nodeformat,
-+                                                           disk2->bitmap) < 0)
-                         return -1;
-                 }
- 
--                if (qemuMonitorTransactionBitmapMerge(actions, node, disk2->bitmap, &arr) < 0)
-+                if (qemuMonitorTransactionBitmapMerge(actions,
-+                                                      domdisk->src->nodeformat,
-+                                                      disk2->bitmap, &arr) < 0)
-                     return -1;
-             }
-         }
- 
--        if (qemuMonitorTransactionBitmapRemove(actions, node, chkdisk->bitmap) < 0)
-+        if (qemuMonitorTransactionBitmapRemove(actions,
-+                                               domdisk->src->nodeformat,
-+                                               chkdisk->bitmap) < 0)
-             return -1;
-     }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-conf-set-HOTPLUGGABLE-connect-flag-during-PCI-address-set-init.patch b/SOURCES/libvirt-qemu-conf-set-HOTPLUGGABLE-connect-flag-during-PCI-address-set-init.patch
deleted file mode 100644
index ae5307f..0000000
--- a/SOURCES/libvirt-qemu-conf-set-HOTPLUGGABLE-connect-flag-during-PCI-address-set-init.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-From 351bb3a04c1eb6de11efad54f809a6f3e3a868c8 Mon Sep 17 00:00:00 2001
-Message-Id: <351bb3a04c1eb6de11efad54f809a6f3e3a868c8@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:17:01 -0400
-Subject: [PATCH] qemu/conf: set HOTPLUGGABLE connect flag during PCI address
- set init
-
-virDomainPCIAddressBusSetModel() is called for each PCI controller
-when building an address set prior to assiging PCI addresses to
-devices.
-
-This patch adds a new argument, allowHotplug, to that function that
-can be set to false if we know for certain that a particular
-controller won't support hotplug
-
-The most interesting case is in qemuDomainPCIAddressSetCreate(), where
-the config of each existing controller is available while building the
-address set, so we can appropriately set allowHotplug = false when the
-user has "hotplug='off'" in the config of a controller that normally
-would support hotplug. In all other cases, it is set to true or false
-in accordance with the capability of the controller model.
-
-So far we aren't doing anything with this bus flag in the address set.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit aa15e9259f1f246e69fb9742581ced720c88695d)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426171703.18808-1-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_addr.c         | 31 +++++++++++++++++++++----------
- src/conf/domain_addr.h         |  3 ++-
- src/qemu/qemu_domain_address.c | 10 +++++++---
- 3 files changed, 30 insertions(+), 14 deletions(-)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index 05f036e3e6..cc45a0bbf1 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -495,31 +495,40 @@ virDomainPCIAddressValidate(virDomainPCIAddressSetPtr addrs,
- 
- int
- virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
--                               virDomainControllerModelPCI model)
-+                               virDomainControllerModelPCI model,
-+                               bool allowHotplug)
- {
-     /* set flags for what can be connected *downstream* from each
-      * bus.
-      */
-+    virDomainPCIConnectFlags hotplugFlag = 0;
-+
-+    if (allowHotplug)
-+        hotplugFlag = VIR_PCI_CONNECT_HOTPLUGGABLE;
-+
-     switch (model) {
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
-         bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
--                      VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS);
-+                      VIR_PCI_CONNECT_TYPE_PCI_EXPANDER_BUS |
-+                      hotplugFlag);
-         bus->minSlot = 1;
-         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
-         break;
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
-         bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
--                      VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
-+                      VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
-+                      hotplugFlag);
-         bus->minSlot = 1;
-         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
-         break;
-     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
-         bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
--                      VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
-+                      VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
-+                      hotplugFlag);
-         bus->minSlot = 0;
-         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
-         break;
-@@ -550,7 +559,8 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
-          * the first of which is not usable because of the SHPC */
-         bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCI_DEVICE |
--                      VIR_PCI_CONNECT_TYPE_PCI_BRIDGE);
-+                      VIR_PCI_CONNECT_TYPE_PCI_BRIDGE |
-+                      hotplugFlag);
-         bus->minSlot = 1;
-         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
-         break;
-@@ -562,7 +572,8 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
-         bus->flags = (VIR_PCI_CONNECT_AUTOASSIGN |
-                       VIR_PCI_CONNECT_TYPE_PCIE_DEVICE |
-                       VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT |
--                      VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE);
-+                      VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE |
-+                      hotplugFlag);
-         bus->minSlot = 0;
-         bus->maxSlot = 0;
-         break;
-@@ -759,7 +770,7 @@ virDomainPCIAddressSetGrow(virDomainPCIAddressSetPtr addrs,
-          * rest are of the requested type
-          */
-         if (virDomainPCIAddressBusSetModel(&addrs->buses[i++],
--                                           VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE) < 0) {
-+                                           VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE, false) < 0) {
-             return -1;
-         }
-     }
-@@ -776,20 +787,20 @@ virDomainPCIAddressSetGrow(virDomainPCIAddressSetPtr addrs,
-          * will be allocated for the dummy PCIe device later on.
-          */
-         if (virDomainPCIAddressBusSetModel(&addrs->buses[i],
--                                           VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT) < 0) {
-+                                           VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT, true) < 0) {
-             return -1;
-         }
-         addrs->buses[i].flags = VIR_PCI_CONNECT_TYPE_PCIE_TO_PCI_BRIDGE;
-         i++;
- 
-         if (virDomainPCIAddressBusSetModel(&addrs->buses[i++],
--                                           VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE) < 0) {
-+                                           VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE, true) < 0) {
-             return -1;
-         }
-     }
- 
-     for (; i < addrs->nbuses; i++) {
--        if (virDomainPCIAddressBusSetModel(&addrs->buses[i], model) < 0)
-+        if (virDomainPCIAddressBusSetModel(&addrs->buses[i], model, true) < 0)
-             return -1;
-     }
- 
-diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h
-index 40738ddb72..c1363c1490 100644
---- a/src/conf/domain_addr.h
-+++ b/src/conf/domain_addr.h
-@@ -148,7 +148,8 @@ bool virDomainPCIAddressValidate(virDomainPCIAddressSetPtr addrs,
- 
- 
- int virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
--                                   virDomainControllerModelPCI model)
-+                                   virDomainControllerModelPCI model,
-+                                   bool allowHotplug)
-     ATTRIBUTE_NONNULL(1);
- 
- bool virDomainPCIAddressBusIsFullyReserved(virDomainPCIAddressBusPtr bus)
-diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
-index e81585bc6c..2ae1724696 100644
---- a/src/qemu/qemu_domain_address.c
-+++ b/src/qemu/qemu_domain_address.c
-@@ -1645,6 +1645,7 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
-     for (i = 0; i < def->ncontrollers; i++) {
-         virDomainControllerDefPtr cont = def->controllers[i];
-         size_t idx = cont->idx;
-+        bool allowHotplug = false;
- 
-         if (cont->type != VIR_DOMAIN_CONTROLLER_TYPE_PCI)
-             continue;
-@@ -1656,7 +1657,10 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
-             goto error;
-         }
- 
--        if (virDomainPCIAddressBusSetModel(&addrs->buses[idx], cont->model) < 0)
-+        if (cont->opts.pciopts.hotplug != VIR_TRISTATE_SWITCH_OFF)
-+            allowHotplug = true;
-+
-+        if (virDomainPCIAddressBusSetModel(&addrs->buses[idx], cont->model, allowHotplug) < 0)
-             goto error;
- 
-         /* Forward the information about isolation groups */
-@@ -1674,7 +1678,7 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
-          * assigning addresses to devices.
-          */
-         if (virDomainPCIAddressBusSetModel(&addrs->buses[0],
--                                           VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) < 0)
-+                                           VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT, true) < 0)
-             goto error;
-     }
- 
-@@ -1696,7 +1700,7 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
-         if (addrs->buses[i].model)
-             continue;
- 
--        if (virDomainPCIAddressBusSetModel(&addrs->buses[i], defaultModel) < 0)
-+        if (virDomainPCIAddressBusSetModel(&addrs->buses[i], defaultModel, true) < 0)
-             goto error;
- 
-         VIR_DEBUG("Auto-adding <controller type='pci' model='%s' index='%zu'/>",
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-do-not-revert-to-NULL-bandwidth.patch b/SOURCES/libvirt-qemu-do-not-revert-to-NULL-bandwidth.patch
deleted file mode 100644
index 370f87d..0000000
--- a/SOURCES/libvirt-qemu-do-not-revert-to-NULL-bandwidth.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From ce01c67e13d27e578d13192bb20b585f1707f672 Mon Sep 17 00:00:00 2001
-Message-Id: <ce01c67e13d27e578d13192bb20b585f1707f672@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Mon, 10 Feb 2020 17:05:53 +0100
-Subject: [PATCH] qemu: do not revert to NULL bandwidth
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Otherwise an attempt to set an invalid value:
-  virsh domiftune rhel8.2 vnet0 --outbound 4294968
-on an interface with no bandwidth set crashes.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Fixes: f02e21cb3379a41cd42f2d8116f2d10dabace83b
-https://bugzilla.redhat.com/show_bug.cgi?id=1800505
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit bd622e2a211aad449b54683e2ebd5e980418dd7c)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <6096c4347521d1493728cc7842f6ad455665b744.1581350626.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_driver.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index caeb76a20c..08f492fa24 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -11646,8 +11646,10 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
-                                                net->bandwidth,
-                                                false,
-                                                !virDomainNetTypeSharesHostView(net)));
--            ignore_value(virDomainNetBandwidthUpdate(net,
--                                                     net->bandwidth));
-+            if (net->bandwidth) {
-+                ignore_value(virDomainNetBandwidthUpdate(net,
-+                                                         net->bandwidth));
-+            }
-             goto endjob;
-         }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-domain-Convert-detected-iso-image-format-into-raw.patch b/SOURCES/libvirt-qemu-domain-Convert-detected-iso-image-format-into-raw.patch
deleted file mode 100644
index 94191ec..0000000
--- a/SOURCES/libvirt-qemu-domain-Convert-detected-iso-image-format-into-raw.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 627b980c628dd06fb9995e83130fbaa858d4087f Mon Sep 17 00:00:00 2001
-Message-Id: <627b980c628dd06fb9995e83130fbaa858d4087f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:42 +0100
-Subject: [PATCH] qemu: domain: Convert detected 'iso' image format into 'raw'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-While our code can detect ISO as a separate format, qemu does not use it
-as such and just passes it through as raw. Add conversion for detected
-parts of the backing chain so that the validation code does not reject
-it right away.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 3c6e6f55a5ded357c39b92629cd523e51f6ca8f9)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <2c6cfa942acf0d7fe56046122b23780ee5c0d777.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index f037f0812e..ed35260712 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -11598,6 +11598,10 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
-         return -1;
- 
-     for (n = src->backingStore; virStorageSourceIsBacking(n); n = n->backingStore) {
-+        /* convert detected ISO format to 'raw' as qemu would not understand it */
-+        if (n->format == VIR_STORAGE_FILE_ISO)
-+            n->format = VIR_STORAGE_FILE_RAW;
-+
-         if (qemuDomainValidateStorageSource(n, priv->qemuCaps) < 0)
-             return -1;
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-domain-Extract-code-to-determine-topmost-nodename-to-qemuDomainDiskGetTopNodename.patch b/SOURCES/libvirt-qemu-domain-Extract-code-to-determine-topmost-nodename-to-qemuDomainDiskGetTopNodename.patch
deleted file mode 100644
index 7687f0f..0000000
--- a/SOURCES/libvirt-qemu-domain-Extract-code-to-determine-topmost-nodename-to-qemuDomainDiskGetTopNodename.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 4ad02094b6166037a04310dbf9a3eb2dcc21ca61 Mon Sep 17 00:00:00 2001
-Message-Id: <4ad02094b6166037a04310dbf9a3eb2dcc21ca61@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:37 +0100
-Subject: [PATCH] qemu: domain: Extract code to determine topmost nodename to
- qemuDomainDiskGetTopNodename
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are more places which require getting the topmost nodename to be
-passed to qemu. Separate it out into a new function.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 0b0f389335e5d11150fa60561cae960f20d5ca44)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1792195
-Message-Id: <b3c89cd0893677d101bc8f491bbd323db6133b19.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 38 ++++++++++++++++++++++++++------------
- src/qemu/qemu_domain.h |  4 ++++
- 2 files changed, 30 insertions(+), 12 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index e37404340f..be9de75909 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -11598,6 +11598,31 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
- }
- 
- 
-+/**
-+ * qemuDomainDiskGetTopNodename:
-+ *
-+ * @disk: disk definition object
-+ *
-+ * Returns the pointer to the node-name of the topmost layer used by @disk as
-+ * backend. Currently returns the nodename of the copy-on-read filter if enabled
-+ * or the nodename of the top image's format driver. Empty disks return NULL.
-+ * This must be used only when VIR_QEMU_CAPS_BLOCKDEV is enabled.
-+ */
-+const char *
-+qemuDomainDiskGetTopNodename(virDomainDiskDefPtr disk)
-+{
-+    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK_PRIVATE(disk);
-+
-+    if (virStorageSourceIsEmpty(disk->src))
-+        return NULL;
-+
-+    if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON)
-+        return priv->nodeCopyOnRead;
-+
-+    return disk->src->nodeformat;
-+}
-+
-+
- /**
-  * qemuDomainDiskGetBackendAlias:
-  * @disk: disk definition
-@@ -11617,8 +11642,6 @@ qemuDomainDiskGetBackendAlias(virDomainDiskDefPtr disk,
-                               virQEMUCapsPtr qemuCaps,
-                               char **backendAlias)
- {
--    qemuDomainDiskPrivatePtr priv = QEMU_DOMAIN_DISK_PRIVATE(disk);
--    const char *nodename = NULL;
-     *backendAlias = NULL;
- 
-     if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-@@ -11628,16 +11651,7 @@ qemuDomainDiskGetBackendAlias(virDomainDiskDefPtr disk,
-         return 0;
-     }
- 
--    if (virStorageSourceIsEmpty(disk->src))
--        return 0;
--
--    if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON)
--        nodename = priv->nodeCopyOnRead;
--    else
--        nodename = disk->src->nodeformat;
--
--    *backendAlias = g_strdup(nodename);
--
-+    *backendAlias = g_strdup(qemuDomainDiskGetTopNodename(disk));
-     return 0;
- }
- 
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index 60b80297fa..d1ab5da2c7 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -881,6 +881,10 @@ int qemuDomainStorageFileInit(virQEMUDriverPtr driver,
-                               virStorageSourcePtr parent);
- char *qemuDomainStorageAlias(const char *device, int depth);
- 
-+const char *
-+qemuDomainDiskGetTopNodename(virDomainDiskDefPtr disk)
-+    ATTRIBUTE_NONNULL(1);
-+
- int qemuDomainDiskGetBackendAlias(virDomainDiskDefPtr disk,
-                                   virQEMUCapsPtr qemuCaps,
-                                   char **backendAlias)
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-domain-Extract-formatting-of-commit-blockjob-data-into-a-function.patch b/SOURCES/libvirt-qemu-domain-Extract-formatting-of-commit-blockjob-data-into-a-function.patch
deleted file mode 100644
index 607dc57..0000000
--- a/SOURCES/libvirt-qemu-domain-Extract-formatting-of-commit-blockjob-data-into-a-function.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From f306de1577b94e303cc6e6d50e48459751dfa02a Mon Sep 17 00:00:00 2001
-Message-Id: <f306de1577b94e303cc6e6d50e48459751dfa02a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:20 +0100
-Subject: [PATCH] qemu: domain: Extract formatting of 'commit' blockjob data
- into a function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-I'll be adding more fields to care about so splitting the code out will
-be better long-term.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Pavel Mores <pmores@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit c72e9064ce2fd114aa5ac046f935d2a5661c8d20)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <98f3090755fcdb4b54deb37a004c9f0d0e40db31.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 27 +++++++++++++++++++--------
- 1 file changed, 19 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index cc47e7a2f0..a8ac68af92 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2599,6 +2599,24 @@ qemuDomainObjPrivateXMLFormatBlockjobFormatSource(virBufferPtr buf,
- }
- 
- 
-+static void
-+qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job,
-+                                      virBufferPtr buf)
-+{
-+    if (job->data.commit.base)
-+        virBufferAsprintf(buf, "<base node='%s'/>\n", job->data.commit.base->nodeformat);
-+
-+    if (job->data.commit.top)
-+        virBufferAsprintf(buf, "<top node='%s'/>\n", job->data.commit.top->nodeformat);
-+
-+    if (job->data.commit.topparent)
-+        virBufferAsprintf(buf, "<topparent node='%s'/>\n", job->data.commit.topparent->nodeformat);
-+
-+    if (job->data.commit.deleteCommittedImages)
-+        virBufferAddLit(buf, "<deleteCommittedImages/>\n");
-+}
-+
-+
- static int
- qemuDomainObjPrivateXMLFormatBlockjobIterator(void *payload,
-                                               const void *name G_GNUC_UNUSED,
-@@ -2658,14 +2676,7 @@ qemuDomainObjPrivateXMLFormatBlockjobIterator(void *payload,
- 
-         case QEMU_BLOCKJOB_TYPE_COMMIT:
-         case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
--            if (job->data.commit.base)
--                virBufferAsprintf(&childBuf, "<base node='%s'/>\n", job->data.commit.base->nodeformat);
--            if (job->data.commit.top)
--                virBufferAsprintf(&childBuf, "<top node='%s'/>\n", job->data.commit.top->nodeformat);
--            if (job->data.commit.topparent)
--                virBufferAsprintf(&childBuf, "<topparent node='%s'/>\n", job->data.commit.topparent->nodeformat);
--            if (job->data.commit.deleteCommittedImages)
--                virBufferAddLit(&childBuf, "<deleteCommittedImages/>\n");
-+            qemuDomainPrivateBlockJobFormatCommit(job, &childBuf);
-             break;
- 
-         case QEMU_BLOCKJOB_TYPE_CREATE:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-domain-Extract-parsing-of-commit-blockjob-data-into-a-function.patch b/SOURCES/libvirt-qemu-domain-Extract-parsing-of-commit-blockjob-data-into-a-function.patch
deleted file mode 100644
index 0dddbe1..0000000
--- a/SOURCES/libvirt-qemu-domain-Extract-parsing-of-commit-blockjob-data-into-a-function.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From 4cbdc7ecefe8351e9e354c1906aba46869f220fd Mon Sep 17 00:00:00 2001
-Message-Id: <4cbdc7ecefe8351e9e354c1906aba46869f220fd@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:21 +0100
-Subject: [PATCH] qemu: domain: Extract parsing of 'commit' blockjob data into
- a function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-I'll be adding more fields to care about so splitting the code out will
-be better long-term.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Pavel Mores <pmores@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 38d0dd08d61446455ff54e0a7b97b1a48054b7c5)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <9689f027815d6fc799bae46ce9c12c3d55d9c728.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 57 ++++++++++++++++++++++++++----------------
- 1 file changed, 36 insertions(+), 21 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index a8ac68af92..0faf042145 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -3236,6 +3236,40 @@ qemuDomainObjPrivateXMLParseBlockjobNodename(qemuBlockJobDataPtr job,
- }
- 
- 
-+static int
-+qemuDomainObjPrivateXMLParseBlockjobDataCommit(qemuBlockJobDataPtr job,
-+                                               xmlXPathContextPtr ctxt)
-+{
-+    if (job->type == QEMU_BLOCKJOB_TYPE_COMMIT) {
-+        qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-+                                                     "string(./topparent/@node)",
-+                                                     &job->data.commit.topparent,
-+                                                     ctxt);
-+
-+        if (!job->data.commit.topparent)
-+            return -1;
-+    }
-+
-+    qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-+                                                 "string(./top/@node)",
-+                                                 &job->data.commit.top,
-+                                                 ctxt);
-+    qemuDomainObjPrivateXMLParseBlockjobNodename(job,
-+                                                 "string(./base/@node)",
-+                                                 &job->data.commit.base,
-+                                                 ctxt);
-+
-+    if (virXPathNode("./deleteCommittedImages", ctxt))
-+        job->data.commit.deleteCommittedImages = true;
-+
-+    if (!job->data.commit.top ||
-+        !job->data.commit.base)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
- static void
- qemuDomainObjPrivateXMLParseBlockjobDataSpecific(qemuBlockJobDataPtr job,
-                                                  xmlXPathContextPtr ctxt,
-@@ -3255,29 +3289,10 @@ qemuDomainObjPrivateXMLParseBlockjobDataSpecific(qemuBlockJobDataPtr job,
-             break;
- 
-         case QEMU_BLOCKJOB_TYPE_COMMIT:
--            qemuDomainObjPrivateXMLParseBlockjobNodename(job,
--                                                         "string(./topparent/@node)",
--                                                         &job->data.commit.topparent,
--                                                         ctxt);
--
--            if (!job->data.commit.topparent)
--                goto broken;
--
--            G_GNUC_FALLTHROUGH;
-         case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
--            qemuDomainObjPrivateXMLParseBlockjobNodename(job,
--                                                         "string(./top/@node)",
--                                                         &job->data.commit.top,
--                                                         ctxt);
--            qemuDomainObjPrivateXMLParseBlockjobNodename(job,
--                                                         "string(./base/@node)",
--                                                         &job->data.commit.base,
--                                                         ctxt);
--            if (virXPathNode("./deleteCommittedImages", ctxt))
--                job->data.commit.deleteCommittedImages = true;
--            if (!job->data.commit.top ||
--                !job->data.commit.base)
-+            if (qemuDomainObjPrivateXMLParseBlockjobDataCommit(job, ctxt) < 0)
-                 goto broken;
-+
-             break;
- 
-         case QEMU_BLOCKJOB_TYPE_CREATE:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-domain-Refactor-formatting-of-node-names-into-status-XML.patch b/SOURCES/libvirt-qemu-domain-Refactor-formatting-of-node-names-into-status-XML.patch
deleted file mode 100644
index 6b8c059..0000000
--- a/SOURCES/libvirt-qemu-domain-Refactor-formatting-of-node-names-into-status-XML.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 3559a27948b48c93295867ff5c8390aad0456a34 Mon Sep 17 00:00:00 2001
-Message-Id: <3559a27948b48c93295867ff5c8390aad0456a34@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:12 +0100
-Subject: [PATCH] qemu: domain: Refactor formatting of node names into status
- XML
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use virXMLFormatElement to simplify the logic.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9fb7ccb3cfc13fc58d9575813f276fa049368cd9)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <772d21f8bcf6d76ceec0d4dc0dc2c507cab70912.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 13 +++++--------
- 1 file changed, 5 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 8e0e919f9a..cf069e2b79 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2402,15 +2402,12 @@ qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src,
- {
-     g_auto(virBuffer) tmp = VIR_BUFFER_INIT_CHILD(buf);
-     qemuDomainStorageSourcePrivatePtr srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
-+    g_auto(virBuffer) nodenamesChildBuf = VIR_BUFFER_INIT_CHILD(buf);
- 
--    if (src->nodestorage || src->nodeformat) {
--        virBufferAddLit(buf, "<nodenames>\n");
--        virBufferAdjustIndent(buf, 2);
--        virBufferEscapeString(buf, "<nodename type='storage' name='%s'/>\n", src->nodestorage);
--        virBufferEscapeString(buf, "<nodename type='format' name='%s'/>\n", src->nodeformat);
--        virBufferAdjustIndent(buf, -2);
--        virBufferAddLit(buf, "</nodenames>\n");
--    }
-+    virBufferEscapeString(&nodenamesChildBuf, "<nodename type='storage' name='%s'/>\n", src->nodestorage);
-+    virBufferEscapeString(&nodenamesChildBuf, "<nodename type='format' name='%s'/>\n", src->nodeformat);
-+
-+    virXMLFormatElement(buf, "nodenames", NULL, &nodenamesChildBuf);
- 
-     if (src->pr)
-         virBufferAsprintf(buf, "<reservations mgralias='%s'/>\n", src->pr->mgralias);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-domain-Remove-unused-qemuDomainDiskNodeFormatLookup.patch b/SOURCES/libvirt-qemu-domain-Remove-unused-qemuDomainDiskNodeFormatLookup.patch
deleted file mode 100644
index 404af1c..0000000
--- a/SOURCES/libvirt-qemu-domain-Remove-unused-qemuDomainDiskNodeFormatLookup.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 448ed3bee3e5b3a12a7bd0acd40ca0729214fba3 Mon Sep 17 00:00:00 2001
-Message-Id: <448ed3bee3e5b3a12a7bd0acd40ca0729214fba3@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:55 +0100
-Subject: [PATCH] qemu: domain: Remove unused qemuDomainDiskNodeFormatLookup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function has no users now and there's no need for it as the common
-pattern is to look up the whole disk object anyways.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 180b3422e9a3391a0ee59d0076730ba85778fc7a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <b6ab98ea54aced2d9aeb9abdca30fc4669b92bbe.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 14 --------------
- src/qemu/qemu_domain.h |  3 ---
- 2 files changed, 17 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index be9de75909..94efcdf9b1 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -12092,20 +12092,6 @@ qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
- }
- 
- 
--/* Return the format node name for a given disk of an online guest */
--const char *
--qemuDomainDiskNodeFormatLookup(virDomainObjPtr vm,
--                               const char *disk)
--{
--    size_t i;
--
--    for (i = 0; i < vm->def->ndisks; i++) {
--        if (STREQ(vm->def->disks[i]->dst, disk))
--            return vm->def->disks[i]->src->nodeformat;
--    }
--    return NULL;
--}
--
- bool
- qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk)
- {
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index d1ab5da2c7..cdcb6ecc7a 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -865,9 +865,6 @@ int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
- bool qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
-                                    virDomainDiskDefPtr orig_disk);
- 
--const char *qemuDomainDiskNodeFormatLookup(virDomainObjPtr vm,
--                                           const char *disk);
--
- void qemuDomainGetImageIds(virQEMUDriverConfigPtr cfg,
-                            virDomainObjPtr vm,
-                            virStorageSourcePtr src,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-domain-Store-data-for-secret-object-representing-http-cookies.patch b/SOURCES/libvirt-qemu-domain-Store-data-for-secret-object-representing-http-cookies.patch
deleted file mode 100644
index cb10075..0000000
--- a/SOURCES/libvirt-qemu-domain-Store-data-for-secret-object-representing-http-cookies.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From 270be96a2730304de8f5dd1d24dd367c9ed52b22 Mon Sep 17 00:00:00 2001
-Message-Id: <270be96a2730304de8f5dd1d24dd367c9ed52b22@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:02 +0100
-Subject: [PATCH] qemu: domain: Store data for 'secret' object representing
- http cookies
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The http cookies can have potentially sensitive values and thus should
-not be leaked into the command line. This means that we'll need to
-instantiate a 'secret' object in qemu to pass the value encrypted.
-
-This patch adds infrastructure for storing of the alias in the status
-XML.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4e8faa5cdc54ce637f760ad4513753e17d2b9a4f)
-
- Conflicts:
-	src/qemu/qemu_domain.c:
-        Context conflict with missing backport of cleanups. (mentioned
-                                                             earlier)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <b51659e22b0840ca6c5431c4e212445bdeb4c12d.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c                    | 8 +++++++-
- src/qemu/qemu_domain.h                    | 3 +++
- tests/qemustatusxml2xmldata/modern-in.xml | 1 +
- 3 files changed, 11 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 2920e699f6..9391bc37e0 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2341,6 +2341,7 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
-     char *authalias = NULL;
-     char *encalias = NULL;
-     int ret = -1;
-+    g_autofree char *httpcookiealias = NULL;
- 
-     src->nodestorage = virXPathString("string(./nodenames/nodename[@type='storage']/@name)", ctxt);
-     src->nodeformat = virXPathString("string(./nodenames/nodename[@type='format']/@name)", ctxt);
-@@ -2354,8 +2355,9 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
- 
-     authalias = virXPathString("string(./objects/secret[@type='auth']/@alias)", ctxt);
-     encalias = virXPathString("string(./objects/secret[@type='encryption']/@alias)", ctxt);
-+    httpcookiealias = virXPathString("string(./objects/secret[@type='httpcookie']/@alias)", ctxt);
- 
--    if (authalias || encalias) {
-+    if (authalias || encalias || httpcookiealias) {
-         if (!src->privateData &&
-             !(src->privateData = qemuDomainStorageSourcePrivateNew()))
-             goto cleanup;
-@@ -2367,6 +2369,9 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
- 
-         if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
-             goto cleanup;
-+
-+        if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->httpcookie, &httpcookiealias) < 0)
-+            goto cleanup;
-     }
- 
-     if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0)
-@@ -2423,6 +2428,7 @@ qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src,
-     if (srcPriv) {
-         qemuStorageSourcePrivateDataFormatSecinfo(&tmp, srcPriv->secinfo, "auth");
-         qemuStorageSourcePrivateDataFormatSecinfo(&tmp, srcPriv->encinfo, "encryption");
-+        qemuStorageSourcePrivateDataFormatSecinfo(&tmp, srcPriv->httpcookie, "httpcookie");
-     }
- 
-     if (src->tlsAlias)
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index bd9ac85ae2..5733954679 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -460,6 +460,9 @@ struct _qemuDomainStorageSourcePrivate {
- 
-     /* data required for decryption of encrypted storage source */
-     qemuDomainSecretInfoPtr encinfo;
-+
-+    /* secure passthrough of the http cookie */
-+    qemuDomainSecretInfoPtr httpcookie;
- };
- 
- virObjectPtr qemuDomainStorageSourcePrivateNew(void);
-diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxml2xmldata/modern-in.xml
-index c8d21ceada..cb56cdcef9 100644
---- a/tests/qemustatusxml2xmldata/modern-in.xml
-+++ b/tests/qemustatusxml2xmldata/modern-in.xml
-@@ -332,6 +332,7 @@
-               <objects>
-                 <secret type='auth' alias='test-auth-alias'/>
-                 <secret type='encryption' alias='test-encryption-alias'/>
-+                <secret type='httpcookie' alias='http-cookie-alias'/>
-                 <TLSx509 alias='transport-alias'/>
-               </objects>
-             </privateData>
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-domain-Store-nodenames-of-slice-in-status-XML.patch b/SOURCES/libvirt-qemu-domain-Store-nodenames-of-slice-in-status-XML.patch
deleted file mode 100644
index d754855..0000000
--- a/SOURCES/libvirt-qemu-domain-Store-nodenames-of-slice-in-status-XML.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 32e26f3aff542e642641c32d9fa65577c891e337 Mon Sep 17 00:00:00 2001
-Message-Id: <32e26f3aff542e642641c32d9fa65577c891e337@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:21 +0100
-Subject: [PATCH] qemu: domain: Store nodenames of slice in status XML
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The storage slice will require a specific node name in cases when the
-image format is not raw. Store and format them in the status XML.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit f36d751fa6d091af5f1c2331f607e0ec3d8993fb)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <83b00663d313ed032a6b7723b8427c3224f2c9c8.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c                    | 7 +++++++
- tests/qemustatusxml2xmldata/modern-in.xml | 4 ++++
- 2 files changed, 11 insertions(+)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 7b414b79c7..948bf3011c 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -2348,6 +2348,9 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt,
-     src->nodeformat = virXPathString("string(./nodenames/nodename[@type='format']/@name)", ctxt);
-     src->tlsAlias = virXPathString("string(./objects/TLSx509/@alias)", ctxt);
- 
-+    if (src->sliceStorage)
-+        src->sliceStorage->nodename = virXPathString("string(./nodenames/nodename[@type='slice-storage']/@name)", ctxt);
-+
-     if (src->pr)
-         src->pr->mgralias = virXPathString("string(./reservations/@mgralias)", ctxt);
- 
-@@ -2407,6 +2410,10 @@ qemuStorageSourcePrivateDataFormat(virStorageSourcePtr src,
-     virBufferEscapeString(&nodenamesChildBuf, "<nodename type='storage' name='%s'/>\n", src->nodestorage);
-     virBufferEscapeString(&nodenamesChildBuf, "<nodename type='format' name='%s'/>\n", src->nodeformat);
- 
-+    if (src->sliceStorage)
-+        virBufferEscapeString(&nodenamesChildBuf, "<nodename type='slice-storage' name='%s'/>\n",
-+                              src->sliceStorage->nodename);
-+
-     virXMLFormatElement(buf, "nodenames", NULL, &nodenamesChildBuf);
- 
-     if (src->pr)
-diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxml2xmldata/modern-in.xml
-index 8a2718293f..c8d21ceada 100644
---- a/tests/qemustatusxml2xmldata/modern-in.xml
-+++ b/tests/qemustatusxml2xmldata/modern-in.xml
-@@ -312,6 +312,9 @@
-         <backingStore type='file' index='1'>
-           <format type='qcow2'/>
-           <source file='/var/lib/libvirt/images/base.qcow2'>
-+            <slices>
-+              <slice type='storage' offset='1234' size='3456'/>
-+            </slices>
-             <seclabel model='dac' relabel='yes'>
-               <label>qemu:qemu</label>
-             </seclabel>
-@@ -322,6 +325,7 @@
-               <nodenames>
-                 <nodename type='storage' name='test-storage'/>
-                 <nodename type='format' name='test-format'/>
-+                <nodename type='slice-storage' name='test-slice-storage'/>
-               </nodenames>
-               <reservations mgralias='test-alias'/>
-               <relPath>base.qcow2</relPath>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-don-t-access-vmdef-within-qemu_agent.c.patch b/SOURCES/libvirt-qemu-don-t-access-vmdef-within-qemu_agent.c.patch
deleted file mode 100644
index 23a3544..0000000
--- a/SOURCES/libvirt-qemu-don-t-access-vmdef-within-qemu_agent.c.patch
+++ /dev/null
@@ -1,947 +0,0 @@
-From 314e0b35249ff662cb76d9b03f33aeb700c6a43a Mon Sep 17 00:00:00 2001
-Message-Id: <314e0b35249ff662cb76d9b03f33aeb700c6a43a@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Thu, 20 Feb 2020 10:52:26 -0600
-Subject: [PATCH] qemu: don't access vmdef within qemu_agent.c
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In order to avoid holding an agent job and a normal job at the same
-time, we want to avoid accessing the domain's definition while holding
-the agent job. To achieve this, qemuAgentGetFSInfo() only returns the
-raw information from the agent query to the caller. The caller can then
-release the agent job and then proceed to look up the disk alias from
-the vm definition. This necessitates moving a few helper functions to
-qemu_driver.c and exposing the agent data structure (qemuAgentFSInfo) in
-the header.
-
-In addition, because the agent function no longer returns the looked-up
-disk alias, we can't test the alias within qemuagenttest.  Instead we
-simply test that we parse and return the raw agent data correctly.
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 599ae372d8cf0923757c5a3792acb07dcf3e8802)
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1759566
-Message-Id: <20200220165227.11491-5-jjongsma@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_agent.c  | 219 +----------------------------------
- src/qemu/qemu_agent.h  |  33 ++++--
- src/qemu/qemu_driver.c | 255 ++++++++++++++++++++++++++++++++++++++---
- tests/qemuagenttest.c  | 196 +++++--------------------------
- 4 files changed, 299 insertions(+), 404 deletions(-)
-
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index 4739faeed8..ef2d2c500b 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -1844,30 +1844,6 @@ qemuAgentSetTime(qemuAgentPtr mon,
-     return ret;
- }
- 
--typedef struct _qemuAgentDiskInfo qemuAgentDiskInfo;
--typedef qemuAgentDiskInfo *qemuAgentDiskInfoPtr;
--struct _qemuAgentDiskInfo {
--    char *serial;
--    virPCIDeviceAddress pci_controller;
--    char *bus_type;
--    unsigned int bus;
--    unsigned int target;
--    unsigned int unit;
--    char *devnode;
--};
--
--typedef struct _qemuAgentFSInfo qemuAgentFSInfo;
--typedef qemuAgentFSInfo *qemuAgentFSInfoPtr;
--struct _qemuAgentFSInfo {
--    char *mountpoint; /* path to mount point */
--    char *name;       /* device name in the guest (e.g. "sda1") */
--    char *fstype;     /* filesystem type */
--    long long total_bytes;
--    long long used_bytes;
--    size_t ndisks;
--    qemuAgentDiskInfoPtr *disks;
--};
--
- static void
- qemuAgentDiskInfoFree(qemuAgentDiskInfoPtr info)
- {
-@@ -1880,7 +1856,7 @@ qemuAgentDiskInfoFree(qemuAgentDiskInfoPtr info)
-     VIR_FREE(info);
- }
- 
--static void
-+void
- qemuAgentFSInfoFree(qemuAgentFSInfoPtr info)
- {
-     size_t i;
-@@ -1899,47 +1875,6 @@ qemuAgentFSInfoFree(qemuAgentFSInfoPtr info)
-     VIR_FREE(info);
- }
- 
--static virDomainFSInfoPtr
--qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent,
--                        virDomainDefPtr vmdef)
--{
--    virDomainFSInfoPtr ret = NULL;
--    size_t i;
--
--    if (VIR_ALLOC(ret) < 0)
--        goto error;
--
--    ret->mountpoint = g_strdup(agent->mountpoint);
--    ret->name = g_strdup(agent->name);
--    ret->fstype = g_strdup(agent->fstype);
--
--    if (agent->disks &&
--        VIR_ALLOC_N(ret->devAlias, agent->ndisks) < 0)
--        goto error;
--
--    ret->ndevAlias = agent->ndisks;
--
--    for (i = 0; i < ret->ndevAlias; i++) {
--        qemuAgentDiskInfoPtr agentdisk = agent->disks[i];
--        virDomainDiskDefPtr diskDef;
--
--        if (!(diskDef = virDomainDiskByAddress(vmdef,
--                                               &agentdisk->pci_controller,
--                                               agentdisk->bus,
--                                               agentdisk->target,
--                                               agentdisk->unit)))
--            continue;
--
--        ret->devAlias[i] = g_strdup(diskDef->dst);
--    }
--
--    return ret;
--
-- error:
--    virDomainFSInfoFree(ret);
--    return NULL;
--}
--
- static int
- qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-                             qemuAgentFSInfoPtr fsinfo)
-@@ -2013,7 +1948,6 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-         GET_DISK_ADDR(pci, &disk->pci_controller.bus, "bus");
-         GET_DISK_ADDR(pci, &disk->pci_controller.slot, "slot");
-         GET_DISK_ADDR(pci, &disk->pci_controller.function, "function");
--
- #undef GET_DISK_ADDR
-     }
- 
-@@ -2024,9 +1958,9 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-  *          -2 when agent command is not supported by the agent
-  *          -1 otherwise
-  */
--static int
--qemuAgentGetFSInfoInternal(qemuAgentPtr mon,
--                           qemuAgentFSInfoPtr **info)
-+int
-+qemuAgentGetFSInfo(qemuAgentPtr mon,
-+                   qemuAgentFSInfoPtr **info)
- {
-     size_t i;
-     int ret = -1;
-@@ -2158,151 +2092,6 @@ qemuAgentGetFSInfoInternal(qemuAgentPtr mon,
-     return ret;
- }
- 
--/* Returns: 0 on success
-- *          -1 otherwise
-- */
--int
--qemuAgentGetFSInfo(qemuAgentPtr mon,
--                   virDomainFSInfoPtr **info,
--                   virDomainDefPtr vmdef)
--{
--    int ret = -1;
--    qemuAgentFSInfoPtr *agentinfo = NULL;
--    virDomainFSInfoPtr *info_ret = NULL;
--    size_t i;
--    int nfs;
--
--    nfs = qemuAgentGetFSInfoInternal(mon, &agentinfo);
--    if (nfs < 0)
--        return ret;
--    if (VIR_ALLOC_N(info_ret, nfs) < 0)
--        goto cleanup;
--
--    for (i = 0; i < nfs; i++) {
--        if (!(info_ret[i] = qemuAgentFSInfoToPublic(agentinfo[i], vmdef)))
--            goto cleanup;
--    }
--
--    *info = g_steal_pointer(&info_ret);
--    ret = nfs;
--
-- cleanup:
--    for (i = 0; i < nfs; i++) {
--        qemuAgentFSInfoFree(agentinfo[i]);
--        /* if there was an error, free any memory we've allocated for the
--         * return value */
--        if (info_ret)
--            virDomainFSInfoFree(info_ret[i]);
--    }
--    VIR_FREE(agentinfo);
--    VIR_FREE(info_ret);
--    return ret;
--}
--
--/* Returns: 0 on success
-- *          -2 when agent command is not supported by the agent
-- *          -1 otherwise
-- */
--int
--qemuAgentGetFSInfoParams(qemuAgentPtr mon,
--                         virTypedParameterPtr *params,
--                         int *nparams, int *maxparams,
--                         virDomainDefPtr vmdef)
--{
--    int ret = -1;
--    qemuAgentFSInfoPtr *fsinfo = NULL;
--    size_t i, j;
--    int nfs;
--
--    if ((nfs = qemuAgentGetFSInfoInternal(mon, &fsinfo)) < 0)
--        return nfs;
--
--    if (virTypedParamsAddUInt(params, nparams, maxparams,
--                              "fs.count", nfs) < 0)
--        goto cleanup;
--
--    for (i = 0; i < nfs; i++) {
--        char param_name[VIR_TYPED_PARAM_FIELD_LENGTH];
--        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                   "fs.%zu.name", i);
--        if (virTypedParamsAddString(params, nparams, maxparams,
--                                    param_name, fsinfo[i]->name) < 0)
--            goto cleanup;
--        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                   "fs.%zu.mountpoint", i);
--        if (virTypedParamsAddString(params, nparams, maxparams,
--                                    param_name, fsinfo[i]->mountpoint) < 0)
--            goto cleanup;
--        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                   "fs.%zu.fstype", i);
--        if (virTypedParamsAddString(params, nparams, maxparams,
--                                    param_name, fsinfo[i]->fstype) < 0)
--            goto cleanup;
--
--        /* disk usage values are not returned by older guest agents, so
--         * only add the params if the value is set */
--        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                   "fs.%zu.total-bytes", i);
--        if (fsinfo[i]->total_bytes != -1 &&
--            virTypedParamsAddULLong(params, nparams, maxparams,
--                                    param_name, fsinfo[i]->total_bytes) < 0)
--            goto cleanup;
--
--        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                   "fs.%zu.used-bytes", i);
--        if (fsinfo[i]->used_bytes != -1 &&
--            virTypedParamsAddULLong(params, nparams, maxparams,
--                                    param_name, fsinfo[i]->used_bytes) < 0)
--            goto cleanup;
--
--        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                   "fs.%zu.disk.count", i);
--        if (virTypedParamsAddUInt(params, nparams, maxparams,
--                                  param_name, fsinfo[i]->ndisks) < 0)
--            goto cleanup;
--        for (j = 0; j < fsinfo[i]->ndisks; j++) {
--            virDomainDiskDefPtr diskdef = NULL;
--            qemuAgentDiskInfoPtr d = fsinfo[i]->disks[j];
--            /* match the disk to the target in the vm definition */
--            diskdef = virDomainDiskByAddress(vmdef,
--                                             &d->pci_controller,
--                                             d->bus,
--                                             d->target,
--                                             d->unit);
--            if (diskdef) {
--                g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                           "fs.%zu.disk.%zu.alias", i, j);
--                if (diskdef->dst &&
--                    virTypedParamsAddString(params, nparams, maxparams,
--                                            param_name, diskdef->dst) < 0)
--                    goto cleanup;
--            }
--
--            g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                       "fs.%zu.disk.%zu.serial", i, j);
--            if (d->serial &&
--                virTypedParamsAddString(params, nparams, maxparams,
--                                        param_name, d->serial) < 0)
--                goto cleanup;
--
--            g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
--                       "fs.%zu.disk.%zu.device", i, j);
--            if (d->devnode &&
--                virTypedParamsAddString(params, nparams, maxparams,
--                                        param_name, d->devnode) < 0)
--                goto cleanup;
--        }
--    }
--    ret = nfs;
--
-- cleanup:
--    for (i = 0; i < nfs; i++)
--        qemuAgentFSInfoFree(fsinfo[i]);
--    VIR_FREE(fsinfo);
--
--    return ret;
--}
--
- /*
-  * qemuAgentGetInterfaces:
-  * @mon: Agent monitor
-diff --git a/src/qemu/qemu_agent.h b/src/qemu/qemu_agent.h
-index 85e436cf68..5656fe60ff 100644
---- a/src/qemu/qemu_agent.h
-+++ b/src/qemu/qemu_agent.h
-@@ -65,19 +65,38 @@ typedef enum {
-     QEMU_AGENT_SHUTDOWN_LAST,
- } qemuAgentShutdownMode;
- 
-+typedef struct _qemuAgentDiskInfo qemuAgentDiskInfo;
-+typedef qemuAgentDiskInfo *qemuAgentDiskInfoPtr;
-+struct _qemuAgentDiskInfo {
-+    char *serial;
-+    virPCIDeviceAddress pci_controller;
-+    char *bus_type;
-+    unsigned int bus;
-+    unsigned int target;
-+    unsigned int unit;
-+    char *devnode;
-+};
-+
-+typedef struct _qemuAgentFSInfo qemuAgentFSInfo;
-+typedef qemuAgentFSInfo *qemuAgentFSInfoPtr;
-+struct _qemuAgentFSInfo {
-+    char *mountpoint; /* path to mount point */
-+    char *name;       /* device name in the guest (e.g. "sda1") */
-+    char *fstype;     /* filesystem type */
-+    long long total_bytes;
-+    long long used_bytes;
-+    size_t ndisks;
-+    qemuAgentDiskInfoPtr *disks;
-+};
-+void qemuAgentFSInfoFree(qemuAgentFSInfoPtr info);
-+
- int qemuAgentShutdown(qemuAgentPtr mon,
-                       qemuAgentShutdownMode mode);
- 
- int qemuAgentFSFreeze(qemuAgentPtr mon,
-                       const char **mountpoints, unsigned int nmountpoints);
- int qemuAgentFSThaw(qemuAgentPtr mon);
--int qemuAgentGetFSInfo(qemuAgentPtr mon, virDomainFSInfoPtr **info,
--                       virDomainDefPtr vmdef);
--
--int qemuAgentGetFSInfoParams(qemuAgentPtr mon,
--                             virTypedParameterPtr *params,
--                             int *nparams, int *maxparams,
--                             virDomainDefPtr vmdef);
-+int qemuAgentGetFSInfo(qemuAgentPtr mon, qemuAgentFSInfoPtr **info);
- 
- int qemuAgentSuspend(qemuAgentPtr mon,
-                      unsigned int target);
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 69e4f7264b..ac3a7ad282 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -21839,6 +21839,111 @@ qemuNodeAllocPages(virConnectPtr conn,
-                                 startCell, cellCount, add);
- }
- 
-+static int
-+qemuDomainGetFSInfoAgent(virQEMUDriverPtr driver,
-+                         virDomainObjPtr vm,
-+                         qemuAgentFSInfoPtr **info)
-+{
-+    int ret = -1;
-+    qemuAgentPtr agent;
-+
-+    if (qemuDomainObjBeginAgentJob(driver, vm,
-+                                   QEMU_AGENT_JOB_QUERY) < 0)
-+        return ret;
-+
-+    if (virDomainObjCheckActive(vm) < 0)
-+        goto endjob;
-+
-+    if (!qemuDomainAgentAvailable(vm, true))
-+        goto endjob;
-+
-+    agent = qemuDomainObjEnterAgent(vm);
-+    ret = qemuAgentGetFSInfo(agent, info);
-+    qemuDomainObjExitAgent(vm, agent);
-+
-+ endjob:
-+    qemuDomainObjEndAgentJob(vm);
-+    return ret;
-+}
-+
-+static virDomainFSInfoPtr
-+qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent,
-+                        virDomainDefPtr vmdef)
-+{
-+    virDomainFSInfoPtr ret = NULL;
-+    size_t i;
-+
-+    if (VIR_ALLOC(ret) < 0)
-+        goto error;
-+
-+    ret->mountpoint = g_strdup(agent->mountpoint);
-+    ret->name = g_strdup(agent->name);
-+    ret->fstype = g_strdup(agent->fstype);
-+
-+    if (agent->disks &&
-+        VIR_ALLOC_N(ret->devAlias, agent->ndisks) < 0)
-+        goto error;
-+
-+    ret->ndevAlias = agent->ndisks;
-+
-+    for (i = 0; i < ret->ndevAlias; i++) {
-+        qemuAgentDiskInfoPtr agentdisk = agent->disks[i];
-+        virDomainDiskDefPtr diskDef;
-+
-+        if (!(diskDef = virDomainDiskByAddress(vmdef,
-+                                               &agentdisk->pci_controller,
-+                                               agentdisk->bus,
-+                                               agentdisk->target,
-+                                               agentdisk->unit)))
-+            continue;
-+
-+        ret->devAlias[i] = g_strdup(diskDef->dst);
-+    }
-+
-+    return ret;
-+
-+ error:
-+    virDomainFSInfoFree(ret);
-+    return NULL;
-+}
-+
-+/* Returns: 0 on success
-+ *          -1 otherwise
-+ */
-+static int
-+virDomainFSInfoFormat(qemuAgentFSInfoPtr *agentinfo,
-+                      int nagentinfo,
-+                      virDomainDefPtr vmdef,
-+                      virDomainFSInfoPtr **info)
-+{
-+    int ret = -1;
-+    virDomainFSInfoPtr *info_ret = NULL;
-+    size_t i;
-+
-+    if (nagentinfo < 0)
-+        return ret;
-+    if (VIR_ALLOC_N(info_ret, nagentinfo) < 0)
-+        goto cleanup;
-+
-+    for (i = 0; i < nagentinfo; i++) {
-+        if (!(info_ret[i] = qemuAgentFSInfoToPublic(agentinfo[i], vmdef)))
-+            goto cleanup;
-+    }
-+
-+    *info = g_steal_pointer(&info_ret);
-+    ret = nagentinfo;
-+
-+ cleanup:
-+    for (i = 0; i < nagentinfo; i++) {
-+        qemuAgentFSInfoFree(agentinfo[i]);
-+        /* if there was an error, free any memory we've allocated for the
-+         * return value */
-+        if (info_ret)
-+            virDomainFSInfoFree(info_ret[i]);
-+    }
-+    VIR_FREE(info_ret);
-+    return ret;
-+}
- 
- static int
- qemuDomainGetFSInfo(virDomainPtr dom,
-@@ -21847,8 +21952,9 @@ qemuDomainGetFSInfo(virDomainPtr dom,
- {
-     virQEMUDriverPtr driver = dom->conn->privateData;
-     virDomainObjPtr vm;
--    qemuAgentPtr agent;
-+    qemuAgentFSInfoPtr *agentinfo = NULL;
-     int ret = -1;
-+    int nfs;
- 
-     virCheckFlags(0, ret);
- 
-@@ -21858,25 +21964,22 @@ qemuDomainGetFSInfo(virDomainPtr dom,
-     if (virDomainGetFSInfoEnsureACL(dom->conn, vm->def) < 0)
-         goto cleanup;
- 
--    if (qemuDomainObjBeginJobWithAgent(driver, vm,
--                                       QEMU_JOB_QUERY,
--                                       QEMU_AGENT_JOB_QUERY) < 0)
-+    if ((nfs = qemuDomainGetFSInfoAgent(driver, vm, &agentinfo)) < 0)
-+        goto cleanup;
-+
-+    if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
-         goto cleanup;
- 
-     if (virDomainObjCheckActive(vm) < 0)
-         goto endjob;
- 
--    if (!qemuDomainAgentAvailable(vm, true))
--        goto endjob;
--
--    agent = qemuDomainObjEnterAgent(vm);
--    ret = qemuAgentGetFSInfo(agent, info, vm->def);
--    qemuDomainObjExitAgent(vm, agent);
-+    ret = virDomainFSInfoFormat(agentinfo, nfs, vm->def, info);
- 
-  endjob:
--    qemuDomainObjEndJobWithAgent(driver, vm);
-+    qemuDomainObjEndJob(driver, vm);
- 
-  cleanup:
-+    g_free(agentinfo);
-     virDomainObjEndAPI(&vm);
-     return ret;
- }
-@@ -22882,6 +22985,103 @@ qemuDomainGetGuestInfoCheckSupport(unsigned int *types)
-     *types = *types & supportedGuestInfoTypes;
- }
- 
-+/* Returns: 0 on success
-+ *          -1 otherwise
-+ */
-+static int
-+qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo,
-+                            int nfs,
-+                            virDomainDefPtr vmdef,
-+                            virTypedParameterPtr *params,
-+                            int *nparams, int *maxparams)
-+{
-+    int ret = -1;
-+    size_t i, j;
-+
-+    /* FIXME: get disk target */
-+
-+    if (virTypedParamsAddUInt(params, nparams, maxparams,
-+                              "fs.count", nfs) < 0)
-+        goto cleanup;
-+
-+    for (i = 0; i < nfs; i++) {
-+        char param_name[VIR_TYPED_PARAM_FIELD_LENGTH];
-+        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                   "fs.%zu.name", i);
-+        if (virTypedParamsAddString(params, nparams, maxparams,
-+                                    param_name, fsinfo[i]->name) < 0)
-+            goto cleanup;
-+        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                   "fs.%zu.mountpoint", i);
-+        if (virTypedParamsAddString(params, nparams, maxparams,
-+                                    param_name, fsinfo[i]->mountpoint) < 0)
-+            goto cleanup;
-+        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                   "fs.%zu.fstype", i);
-+        if (virTypedParamsAddString(params, nparams, maxparams,
-+                                    param_name, fsinfo[i]->fstype) < 0)
-+            goto cleanup;
-+
-+        /* disk usage values are not returned by older guest agents, so
-+         * only add the params if the value is set */
-+        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                   "fs.%zu.total-bytes", i);
-+        if (fsinfo[i]->total_bytes != -1 &&
-+            virTypedParamsAddULLong(params, nparams, maxparams,
-+                                    param_name, fsinfo[i]->total_bytes) < 0)
-+            goto cleanup;
-+
-+        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                   "fs.%zu.used-bytes", i);
-+        if (fsinfo[i]->used_bytes != -1 &&
-+            virTypedParamsAddULLong(params, nparams, maxparams,
-+                                    param_name, fsinfo[i]->used_bytes) < 0)
-+            goto cleanup;
-+
-+        g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                   "fs.%zu.disk.count", i);
-+        if (virTypedParamsAddUInt(params, nparams, maxparams,
-+                                  param_name, fsinfo[i]->ndisks) < 0)
-+            goto cleanup;
-+        for (j = 0; j < fsinfo[i]->ndisks; j++) {
-+            virDomainDiskDefPtr diskdef = NULL;
-+            qemuAgentDiskInfoPtr d = fsinfo[i]->disks[j];
-+            /* match the disk to the target in the vm definition */
-+            diskdef = virDomainDiskByAddress(vmdef,
-+                                             &d->pci_controller,
-+                                             d->bus,
-+                                             d->target,
-+                                             d->unit);
-+            if (diskdef) {
-+                g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                           "fs.%zu.disk.%zu.alias", i, j);
-+                if (diskdef->dst &&
-+                    virTypedParamsAddString(params, nparams, maxparams,
-+                                            param_name, diskdef->dst) < 0)
-+                    goto cleanup;
-+            }
-+
-+            g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                       "fs.%zu.disk.%zu.serial", i, j);
-+            if (d->serial &&
-+                virTypedParamsAddString(params, nparams, maxparams,
-+                                        param_name, d->serial) < 0)
-+                goto cleanup;
-+
-+            g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-+                       "fs.%zu.disk.%zu.device", i, j);
-+            if (d->devnode &&
-+                virTypedParamsAddString(params, nparams, maxparams,
-+                                        param_name, d->devnode) < 0)
-+                goto cleanup;
-+        }
-+    }
-+    ret = nfs;
-+
-+ cleanup:
-+    return ret;
-+}
-+
- static int
- qemuDomainGetGuestInfo(virDomainPtr dom,
-                        unsigned int types,
-@@ -22897,6 +23097,9 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-     g_autofree char *hostname = NULL;
-     unsigned int supportedTypes = types;
-     int rc;
-+    int nfs = 0;
-+    qemuAgentFSInfoPtr *agentfsinfo = NULL;
-+    size_t i;
- 
-     virCheckFlags(0, -1);
-     qemuDomainGetGuestInfoCheckSupport(&supportedTypes);
-@@ -22907,13 +23110,12 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-     if (virDomainGetGuestInfoEnsureACL(dom->conn, vm->def) < 0)
-         goto cleanup;
- 
--    if (qemuDomainObjBeginJobWithAgent(driver, vm,
--                                       QEMU_JOB_QUERY,
--                                       QEMU_AGENT_JOB_QUERY) < 0)
-+    if (qemuDomainObjBeginAgentJob(driver, vm,
-+                                   QEMU_AGENT_JOB_QUERY) < 0)
-         goto cleanup;
- 
-     if (!qemuDomainAgentAvailable(vm, true))
--        goto endjob;
-+        goto endagentjob;
- 
-     agent = qemuDomainObjEnterAgent(vm);
- 
-@@ -22948,7 +23150,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-         }
-     }
-     if (supportedTypes & VIR_DOMAIN_GUEST_INFO_FILESYSTEM) {
--        rc = qemuAgentGetFSInfoParams(agent, params, nparams, &maxparams, vm->def);
-+        rc = nfs = qemuAgentGetFSInfo(agent, &agentfsinfo);
-         if (rc < 0 && !(rc == -2 && types == 0))
-             goto exitagent;
-     }
-@@ -22958,10 +23160,29 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-  exitagent:
-     qemuDomainObjExitAgent(vm, agent);
- 
-+ endagentjob:
-+    qemuDomainObjEndAgentJob(vm);
-+
-+    if (nfs > 0) {
-+        if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
-+            goto cleanup;
-+
-+        if (virDomainObjCheckActive(vm) < 0)
-+            goto endjob;
-+
-+        /* we need to convert the agent fsinfo struct to parameters and match
-+         * it to the vm disk target */
-+        qemuAgentFSInfoFormatParams(agentfsinfo, nfs, vm->def, params, nparams, &maxparams);
-+
-  endjob:
--    qemuDomainObjEndJobWithAgent(driver, vm);
-+        qemuDomainObjEndJob(driver, vm);
-+    }
- 
-  cleanup:
-+    for (i = 0; i < nfs; i++)
-+        qemuAgentFSInfoFree(agentfsinfo[i]);
-+    VIR_FREE(agentfsinfo);
-+
-     virDomainObjEndAPI(&vm);
-     return ret;
- }
-diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
-index 644dc9d08b..a45ce4f44a 100644
---- a/tests/qemuagenttest.c
-+++ b/tests/qemuagenttest.c
-@@ -247,14 +247,14 @@ testQemuAgentGetFSInfo(const void *data)
-     virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
-     qemuMonitorTestPtr test = NULL;
-     virDomainDefPtr def = NULL;
--    virDomainFSInfoPtr *info = NULL;
-+    qemuAgentFSInfoPtr *info = NULL;
-     int ret = -1, ninfo = 0, i;
- 
-     if (testQemuAgentGetFSInfoCommon(xmlopt, &test, &def) < 0)
-         goto cleanup;
- 
-     if ((ninfo = qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test),
--                                    &info, def)) < 0)
-+                                    &info)) < 0)
-         goto cleanup;
- 
-     if (ninfo != 3) {
-@@ -266,35 +266,48 @@ testQemuAgentGetFSInfo(const void *data)
-     if (STRNEQ(info[2]->name, "sda1") ||
-         STRNEQ(info[2]->mountpoint, "/") ||
-         STRNEQ(info[2]->fstype, "ext4") ||
--        info[2]->ndevAlias != 1 ||
--        !info[2]->devAlias || !info[2]->devAlias[0] ||
--        STRNEQ(info[2]->devAlias[0], "hdc")) {
-+        info[2]->ndisks != 1 ||
-+        !info[2]->disks || !info[2]->disks[0]) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
--            "unexpected filesystems information returned for sda1 (%s,%s)",
--            info[2]->name, info[2]->devAlias ? info[2]->devAlias[0] : "null");
-+            "unexpected filesystems information returned for sda1 (%s)",
-+            info[2]->name);
-         ret = -1;
-         goto cleanup;
-     }
-     if (STRNEQ(info[1]->name, "dm-1") ||
-         STRNEQ(info[1]->mountpoint, "/opt") ||
-         STRNEQ(info[1]->fstype, "vfat") ||
--        info[1]->ndevAlias != 2 ||
--        !info[1]->devAlias || !info[1]->devAlias[0] || !info[1]->devAlias[1] ||
--        STRNEQ(info[1]->devAlias[0], "vda") ||
--        STRNEQ(info[1]->devAlias[1], "vdb")) {
-+        info[1]->ndisks != 2 ||
-+        !info[1]->disks || !info[1]->disks[0] || !info[1]->disks[1] ||
-+        STRNEQ(info[1]->disks[0]->bus_type, "virtio") ||
-+        info[1]->disks[0]->bus != 0 ||
-+        info[1]->disks[0]->target != 0 ||
-+        info[1]->disks[0]->unit != 0 ||
-+        info[1]->disks[0]->pci_controller.domain != 0 ||
-+        info[1]->disks[0]->pci_controller.bus != 0 ||
-+        info[1]->disks[0]->pci_controller.slot != 6 ||
-+        info[1]->disks[0]->pci_controller.function != 0 ||
-+        STRNEQ(info[1]->disks[1]->bus_type, "virtio") ||
-+        info[1]->disks[1]->bus != 0 ||
-+        info[1]->disks[1]->target != 0 ||
-+        info[1]->disks[1]->unit != 0 ||
-+        info[1]->disks[1]->pci_controller.domain != 0 ||
-+        info[1]->disks[1]->pci_controller.bus != 0 ||
-+        info[1]->disks[1]->pci_controller.slot != 7 ||
-+        info[1]->disks[1]->pci_controller.function != 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
--            "unexpected filesystems information returned for dm-1 (%s,%s)",
--            info[0]->name, info[0]->devAlias ? info[0]->devAlias[0] : "null");
-+            "unexpected filesystems information returned for dm-1 (%s)",
-+            info[0]->name);
-         ret = -1;
-         goto cleanup;
-     }
-     if (STRNEQ(info[0]->name, "sdb1") ||
-         STRNEQ(info[0]->mountpoint, "/mnt/disk") ||
-         STRNEQ(info[0]->fstype, "xfs") ||
--        info[0]->ndevAlias != 0 || info[0]->devAlias) {
-+        info[0]->ndisks != 0 || info[0]->disks) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
--            "unexpected filesystems information returned for sdb1 (%s,%s)",
--            info[0]->name, info[0]->devAlias ? info[0]->devAlias[0] : "null");
-+            "unexpected filesystems information returned for sdb1 (%s)",
-+            info[0]->name);
-         ret = -1;
-         goto cleanup;
-     }
-@@ -313,7 +326,7 @@ testQemuAgentGetFSInfo(const void *data)
-                                "}") < 0)
-         goto cleanup;
- 
--    if (qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test), &info, def) != -1) {
-+    if (qemuAgentGetFSInfo(qemuMonitorTestGetAgent(test), &info) >= 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                        "agent get-fsinfo command should have failed");
-         goto cleanup;
-@@ -323,159 +336,13 @@ testQemuAgentGetFSInfo(const void *data)
- 
-  cleanup:
-     for (i = 0; i < ninfo; i++)
--        virDomainFSInfoFree(info[i]);
-+        qemuAgentFSInfoFree(info[i]);
-     VIR_FREE(info);
-     virDomainDefFree(def);
-     qemuMonitorTestFree(test);
-     return ret;
- }
- 
--static int
--testQemuAgentGetFSInfoParams(const void *data)
--{
--    virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
--    qemuMonitorTestPtr test = NULL;
--    virDomainDefPtr def = NULL;
--    virTypedParameterPtr params = NULL;
--    int nparams = 0, maxparams = 0;
--    int ret = -1;
--    unsigned int count;
--    const char *name, *mountpoint, *fstype, *alias, *serial;
--    unsigned int diskcount;
--    unsigned long long bytesused, bytestotal;
--    const char *alias2;
--
--    if (testQemuAgentGetFSInfoCommon(xmlopt, &test, &def) < 0)
--        goto cleanup;
--
--    if (qemuAgentGetFSInfoParams(qemuMonitorTestGetAgent(test),
--                                 &params, &nparams, &maxparams, def) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
--                       "Failed to execute qemuAgentGetFSInfoParams()");
--        goto cleanup;
--    }
--
--    if (virTypedParamsGetUInt(params, nparams, "fs.count", &count) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
--                       "expected filesystem count");
--        goto cleanup;
--    }
--
--    if (count != 3) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       "expected 3 filesystems information, got %d", count);
--        goto cleanup;
--    }
--
--    if (virTypedParamsGetString(params, nparams, "fs.2.name", &name) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.2.mountpoint", &mountpoint) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.2.fstype", &fstype) < 0 ||
--        virTypedParamsGetULLong(params, nparams, "fs.2.used-bytes", &bytesused) <= 0 ||
--        virTypedParamsGetULLong(params, nparams, "fs.2.total-bytes", &bytestotal) <= 0 ||
--        virTypedParamsGetUInt(params, nparams, "fs.2.disk.count", &diskcount) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.2.disk.0.alias", &alias) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.2.disk.0.serial", &serial) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--            "Missing an expected parameter for sda1 (%s,%s)",
--            name, alias);
--        goto cleanup;
--    }
--
--    if (STRNEQ(name, "sda1") ||
--        STRNEQ(mountpoint, "/") ||
--        STRNEQ(fstype, "ext4") ||
--        bytesused != 229019648 ||
--        bytestotal != 952840192 ||
--        diskcount != 1 ||
--        STRNEQ(alias, "hdc") ||
--        STRNEQ(serial, "ARBITRARYSTRING")) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--            "unexpected filesystems information returned for sda1 (%s,%s)",
--            name, alias);
--        goto cleanup;
--    }
--
--    if (virTypedParamsGetString(params, nparams, "fs.1.name", &name) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.1.mountpoint", &mountpoint) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.1.fstype", &fstype) < 0 ||
--        virTypedParamsGetULLong(params, nparams, "fs.1.used-bytes", &bytesused) == 1 ||
--        virTypedParamsGetULLong(params, nparams, "fs.1.total-bytes", &bytestotal) == 1 ||
--        virTypedParamsGetUInt(params, nparams, "fs.1.disk.count", &diskcount) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.1.disk.0.alias", &alias) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.1.disk.1.alias", &alias2) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--            "Incorrect parameters for dm-1 (%s,%s)",
--            name, alias);
--        goto cleanup;
--    }
--    if (STRNEQ(name, "dm-1") ||
--        STRNEQ(mountpoint, "/opt") ||
--        STRNEQ(fstype, "vfat") ||
--        diskcount != 2 ||
--        STRNEQ(alias, "vda") ||
--        STRNEQ(alias2, "vdb")) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--            "unexpected filesystems information returned for dm-1 (%s,%s)",
--            name, alias);
--        goto cleanup;
--    }
--
--    alias = NULL;
--    if (virTypedParamsGetString(params, nparams, "fs.0.name", &name) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.0.mountpoint", &mountpoint) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.0.fstype", &fstype) < 0 ||
--        virTypedParamsGetULLong(params, nparams, "fs.0.used-bytes", &bytesused) == 1 ||
--        virTypedParamsGetULLong(params, nparams, "fs.0.total-bytes", &bytestotal) == 1 ||
--        virTypedParamsGetUInt(params, nparams, "fs.0.disk.count", &diskcount) < 0 ||
--        virTypedParamsGetString(params, nparams, "fs.0.disk.0.alias", &alias) == 1) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--            "Incorrect parameters for sdb1 (%s,%s)",
--            name, alias);
--        goto cleanup;
--    }
--
--    if (STRNEQ(name, "sdb1") ||
--        STRNEQ(mountpoint, "/mnt/disk") ||
--        STRNEQ(fstype, "xfs") ||
--        diskcount != 0 ||
--        alias != NULL) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--            "unexpected filesystems information returned for sdb1 (%s,%s)",
--            name, alias);
--        goto cleanup;
--    }
--
--    if (qemuMonitorTestAddAgentSyncResponse(test) < 0)
--        goto cleanup;
--
--    if (qemuMonitorTestAddItem(test, "guest-get-fsinfo",
--                               "{\"error\":"
--                               "    {\"class\":\"CommandDisabled\","
--                               "     \"desc\":\"The command guest-get-fsinfo "
--                                               "has been disabled for "
--                                               "this instance\","
--                               "     \"data\":{\"name\":\"guest-get-fsinfo\"}"
--                               "    }"
--                               "}") < 0)
--        goto cleanup;
--
--    if (qemuAgentGetFSInfoParams(qemuMonitorTestGetAgent(test), &params,
--                                 &nparams, &maxparams, def) != -2) {
--        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
--                       "agent get-fsinfo command should have failed");
--        goto cleanup;
--    }
--
--    ret = 0;
--
-- cleanup:
--    virTypedParamsFree(params, nparams);
--    virDomainDefFree(def);
--    qemuMonitorTestFree(test);
--    return ret;
--}
--
--
- static int
- testQemuAgentSuspend(const void *data)
- {
-@@ -1438,7 +1305,6 @@ mymain(void)
-     DO_TEST(FSFreeze);
-     DO_TEST(FSThaw);
-     DO_TEST(FSTrim);
--    DO_TEST(GetFSInfoParams);
-     DO_TEST(GetFSInfo);
-     DO_TEST(Suspend);
-     DO_TEST(Shutdown);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-eliminate-ret-in-qemuExtDevicesStart.patch b/SOURCES/libvirt-qemu-eliminate-ret-in-qemuExtDevicesStart.patch
deleted file mode 100644
index 21efa97..0000000
--- a/SOURCES/libvirt-qemu-eliminate-ret-in-qemuExtDevicesStart.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 9c51a4657bf446bf2ccaba65b2f76d29e5b14f22 Mon Sep 17 00:00:00 2001
-Message-Id: <9c51a4657bf446bf2ccaba65b2f76d29e5b14f22@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:31 +0100
-Subject: [PATCH] qemu: eliminate ret in qemuExtDevicesStart
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-All the callees return either 0 or -1 so there is no need
-for propagating the value. And we bail on the first error.
-
-Remove the variable to make the function simpler.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit d5256cbd5575fb714714de1d543d1e5d41daf8ff)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <1a2cb184deb18bf67e3fdc50785e829f74d89352.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_extdevice.c | 12 +++++-------
- 1 file changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index 1869a42f11..9c0c0fd573 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -156,7 +156,6 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
-                     bool incomingMigration)
- {
-     virDomainDefPtr def = vm->def;
--    int ret = 0;
-     size_t i;
- 
-     if (qemuExtDevicesInitPaths(driver, def) < 0)
-@@ -166,14 +165,13 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
-         virDomainVideoDefPtr video = def->videos[i];
- 
-         if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
--            ret = qemuExtVhostUserGPUStart(driver, vm, video);
--            if (ret < 0)
--                return ret;
-+            if (qemuExtVhostUserGPUStart(driver, vm, video) < 0)
-+                return -1;
-         }
-     }
- 
--    if (def->tpm)
--        ret = qemuExtTPMStart(driver, vm, incomingMigration);
-+    if (def->tpm && qemuExtTPMStart(driver, vm, incomingMigration) < 0)
-+        return -1;
- 
-     for (i = 0; i < def->nnets; i++) {
-         virDomainNetDefPtr net = def->nets[i];
-@@ -184,7 +182,7 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
-             return -1;
-     }
- 
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-end-the-agent-job-in-qemuDomainSetTimeAgent.patch b/SOURCES/libvirt-qemu-end-the-agent-job-in-qemuDomainSetTimeAgent.patch
deleted file mode 100644
index b127622..0000000
--- a/SOURCES/libvirt-qemu-end-the-agent-job-in-qemuDomainSetTimeAgent.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 24405105c86a955a028a915153d1c1dfe450f237 Mon Sep 17 00:00:00 2001
-Message-Id: <24405105c86a955a028a915153d1c1dfe450f237@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Mon, 20 Jan 2020 09:31:21 +0100
-Subject: [PATCH] qemu: end the agent job in qemuDomainSetTimeAgent
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This function grabs an agent job but ends a monitor job.
-End the agent job instead.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1792723
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reported-by: Dan Zheng <dzheng@redhat.com>
-Fixes: e005c95f56fee9ed780be7f8db103d690bd34cbd
-(cherry picked from commit d61f95cf6a6fbd564e104c168d325581acd9cd8d)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <d00e462cf0f84d7d2d105f30f0ec8edf49786403.1579509070.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@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 217d873671..6163b13e91 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -20373,7 +20373,7 @@ qemuDomainSetTimeAgent(virQEMUDriverPtr driver,
-     qemuDomainObjExitAgent(vm, agent);
- 
-  endjob:
--    qemuDomainObjEndJob(driver, vm);
-+    qemuDomainObjEndAgentJob(vm);
-     return ret;
- }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-fix-detection-of-vCPU-pids-when-multiple-dies-are-present.patch b/SOURCES/libvirt-qemu-fix-detection-of-vCPU-pids-when-multiple-dies-are-present.patch
deleted file mode 100644
index 4aa455f..0000000
--- a/SOURCES/libvirt-qemu-fix-detection-of-vCPU-pids-when-multiple-dies-are-present.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From d97b868a9517173a7f805fd3232b3d9fdc2bad89 Mon Sep 17 00:00:00 2001
-Message-Id: <d97b868a9517173a7f805fd3232b3d9fdc2bad89@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Tue, 5 May 2020 16:49:12 +0100
-Subject: [PATCH] qemu: fix detection of vCPU pids when multiple dies are
- present
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The logic for querying hotpluggable CPUs needs to sort the list
-of CPUs returned by QEMU. Unfortunately our sorting method failed
-to use the die_id field, so CPUs were not correctly sorted.
-
-This is seen when configuring a guest with partially populated
-CPUs
-
-  <vcpu placement='static' current='1'>16</vcpu>
-  <cpu...>
-    <topology sockets='4' dies='2' cores='1' threads='2'/>
-  </cpu>
-
-Then trying to start it would fail:
-
-  # virsh -c qemu:///system start demo
-  error: Failed to start domain demo
-  error: internal error: qemu didn't report thread id for vcpu '0'
-
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 8b789c6574454863acbd2511fc2094d1e63e8154)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1813395
-https://bugzilla.redhat.com/show_bug.cgi?id=1821592
-
-Message-Id: <20200505154912.950468-2-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_domain.c       | 10 ++++++++--
- src/qemu/qemu_monitor.c      |  2 ++
- src/qemu/qemu_monitor.h      |  2 ++
- src/qemu/qemu_monitor_json.c |  5 +++++
- 4 files changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 1509e41021..cdf7b3e692 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -13812,8 +13812,14 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver,
-         }
- 
-         if (validTIDs)
--            VIR_DEBUG("vCPU[%zu] PID %llu is valid",
--                      i, (unsigned long long)info[i].tid);
-+            VIR_DEBUG("vCPU[%zu] PID %llu is valid "
-+                      "(node=%d socket=%d die=%d core=%d thread=%d)",
-+                      i, (unsigned long long)info[i].tid,
-+                      info[i].node_id,
-+                      info[i].socket_id,
-+                      info[i].die_id,
-+                      info[i].core_id,
-+                      info[i].thread_id);
-     }
- 
-     VIR_DEBUG("Extracting vCPU information validTIDs=%d", validTIDs);
-diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
-index 5915035589..d8911066ab 100644
---- a/src/qemu/qemu_monitor.c
-+++ b/src/qemu/qemu_monitor.c
-@@ -1667,6 +1667,7 @@ qemuMonitorCPUInfoClear(qemuMonitorCPUInfoPtr cpus,
-         cpus[i].id = 0;
-         cpus[i].qemu_id = -1;
-         cpus[i].socket_id = -1;
-+        cpus[i].die_id = -1;
-         cpus[i].core_id = -1;
-         cpus[i].thread_id = -1;
-         cpus[i].node_id = -1;
-@@ -1822,6 +1823,7 @@ qemuMonitorGetCPUInfoHotplug(struct qemuMonitorQueryHotpluggableCpusEntry *hotpl
-         vcpus[mastervcpu].hotpluggable = !!hotplugvcpus[i].alias ||
-                                          !vcpus[mastervcpu].online;
-         vcpus[mastervcpu].socket_id = hotplugvcpus[i].socket_id;
-+        vcpus[mastervcpu].die_id = hotplugvcpus[i].die_id;
-         vcpus[mastervcpu].core_id = hotplugvcpus[i].core_id;
-         vcpus[mastervcpu].thread_id = hotplugvcpus[i].thread_id;
-         vcpus[mastervcpu].node_id = hotplugvcpus[i].node_id;
-diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
-index ca975d084c..6e83f250ed 100644
---- a/src/qemu/qemu_monitor.h
-+++ b/src/qemu/qemu_monitor.h
-@@ -567,6 +567,7 @@ struct qemuMonitorQueryHotpluggableCpusEntry {
-     /* topology information -1 if qemu didn't report given parameter */
-     int node_id;
-     int socket_id;
-+    int die_id;
-     int core_id;
-     int thread_id;
- 
-@@ -589,6 +590,7 @@ struct _qemuMonitorCPUInfo {
-     /* topology info for hotplug purposes. Hotplug of given vcpu impossible if
-      * all entries are -1 */
-     int socket_id;
-+    int die_id;
-     int core_id;
-     int thread_id;
-     int node_id;
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 92d7317a82..d445a4904f 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -8576,11 +8576,13 @@ qemuMonitorJSONProcessHotpluggableCpusReply(virJSONValuePtr vcpu,
- 
-     entry->node_id = -1;
-     entry->socket_id = -1;
-+    entry->die_id = -1;
-     entry->core_id = -1;
-     entry->thread_id = -1;
- 
-     ignore_value(virJSONValueObjectGetNumberInt(props, "node-id", &entry->node_id));
-     ignore_value(virJSONValueObjectGetNumberInt(props, "socket-id", &entry->socket_id));
-+    ignore_value(virJSONValueObjectGetNumberInt(props, "die-id", &entry->die_id));
-     ignore_value(virJSONValueObjectGetNumberInt(props, "core-id", &entry->core_id));
-     ignore_value(virJSONValueObjectGetNumberInt(props, "thread-id", &entry->thread_id));
- 
-@@ -8615,6 +8617,9 @@ qemuMonitorQueryHotpluggableCpusEntrySort(const void *p1,
-     if (a->socket_id != b->socket_id)
-         return a->socket_id - b->socket_id;
- 
-+    if (a->die_id != b->die_id)
-+        return a->die_id - b->die_id;
-+
-     if (a->core_id != b->core_id)
-         return a->core_id - b->core_id;
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-fix-inactive-snapshot-revert.patch b/SOURCES/libvirt-qemu-fix-inactive-snapshot-revert.patch
new file mode 100644
index 0000000..3c03910
--- /dev/null
+++ b/SOURCES/libvirt-qemu-fix-inactive-snapshot-revert.patch
@@ -0,0 +1,44 @@
+From 94bc9eaf3bbcaec47bd233378bbbb45f5f1523ca Mon Sep 17 00:00:00 2001
+Message-Id: <94bc9eaf3bbcaec47bd233378bbbb45f5f1523ca@dist-git>
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
+Date: Thu, 20 Jan 2022 14:53:33 +0100
+Subject: [PATCH] qemu: fix inactive snapshot revert
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The commit splitting out the qemuSnapshotRevertInactive function
+dropped the 'defined = true' line by accident and instead
+returned -1, leaving the user with a cryptic error:
+error: An error occurred, but the cause is unknown
+
+https://bugzilla.redhat.com/show_bug.cgi?id=2039136
+https://gitlab.com/libvirt/libvirt/-/issues/266
+
+Fixes: 85e4a13c3f19078fb6af5ffb4a80022c142cbc7e
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+(cherry picked from commit 76deb656132bb8817ddae4b7f417930c4db824c9)
+
+https://bugzilla.redhat.com/show_bug.cgi?id=2043584
+
+Signed-off-by: Ján Tomko <jtomko@redhat.com>
+---
+ src/qemu/qemu_snapshot.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
+index f92e00f9c0..ac7bab90f8 100644
+--- a/src/qemu/qemu_snapshot.c
++++ b/src/qemu/qemu_snapshot.c
+@@ -2193,7 +2193,7 @@ qemuSnapshotRevertInactive(virDomainObj *vm,
+ 
+     if (*inactiveConfig) {
+         virDomainObjAssignDef(vm, inactiveConfig, false, NULL);
+-        return -1;
++        defined = true;
+     }
+ 
+     if (flags & (VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
+-- 
+2.35.0
+
diff --git a/SOURCES/libvirt-qemu-fixing-auto-detecting-binary-in-domain-capabilities.patch b/SOURCES/libvirt-qemu-fixing-auto-detecting-binary-in-domain-capabilities.patch
deleted file mode 100644
index 42ec0ef..0000000
--- a/SOURCES/libvirt-qemu-fixing-auto-detecting-binary-in-domain-capabilities.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-From 0f8f59eee031729fb17dd9b70285665a44517850 Mon Sep 17 00:00:00 2001
-Message-Id: <0f8f59eee031729fb17dd9b70285665a44517850@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Fri, 15 May 2020 19:18:50 +0200
-Subject: [PATCH] qemu: fixing auto-detecting binary in domain capabilities
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The virConnectGetDomainCapabilities API accepts either a binary path
-to the emulator, or desired guest arch. If guest arch is not given,
-then the host arch is assumed.
-
-In the case where the binary is not given, the code tried to find the
-emulator binary in the existing list of cached emulator capabilities.
-This is not valid since we switched to lazy population of the cache in:
-
-  commit 3dd91af01f30c5bda6328454ef49f3afece755d6
-  Author: Daniel P. Berrangé <berrange@redhat.com>
-  Date:   Mon Dec 2 13:04:26 2019 +0000
-
-    qemu: stop creating capabilities at driver startup
-
-As a result of this change, if there are no persistent guests defined
-using the requested guest architecture, virConnectGetDomainCapabilities
-will fail to find an emulator binary.
-
-The solution is to stop relying on the cached capabilities to find the
-binary and instead use the same logic we use to pick default a binary
-per arch when populating capabilities.
-
-Tested-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Tested-by: Richard W.M. Jones <rjones@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 6d786f95a366600e7bbae68c1b324a8131f5e2c5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1836351
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200515171850.135870-2-abologna@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_capabilities.c | 45 ++++++++++++++++++------------------
- 1 file changed, 22 insertions(+), 23 deletions(-)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 3bbfb64c03..5b16796c6b 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -5432,10 +5432,13 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache,
-                               const char **retMachine)
- {
-     int virttype = VIR_DOMAIN_VIRT_NONE;
--    int arch = virArchFromHost();
-+    virArch hostarch = virArchFromHost();
-+    virArch arch = hostarch;
-     virDomainVirtType capsType;
-     virQEMUCapsPtr qemuCaps = NULL;
-     virQEMUCapsPtr ret = NULL;
-+    virArch arch_from_caps;
-+    g_autofree char *probedbinary = NULL;
- 
-     if (virttypeStr &&
-         (virttype = virDomainVirtTypeFromString(virttypeStr)) < 0) {
-@@ -5451,31 +5454,27 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache,
-         goto cleanup;
-     }
- 
--    if (binary) {
--        virArch arch_from_caps;
-+    if (!binary) {
-+        probedbinary = virQEMUCapsGetDefaultEmulator(hostarch, arch);
-+        binary = probedbinary;
-+    }
- 
--        if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary)))
--            goto cleanup;
-+    if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary)))
-+        goto cleanup;
- 
--        arch_from_caps = virQEMUCapsGetArch(qemuCaps);
-+    arch_from_caps = virQEMUCapsGetArch(qemuCaps);
- 
--        if (arch_from_caps != arch &&
--            !((ARCH_IS_X86(arch) && ARCH_IS_X86(arch_from_caps)) ||
--              (ARCH_IS_PPC(arch) && ARCH_IS_PPC(arch_from_caps)) ||
--              (ARCH_IS_ARM(arch) && ARCH_IS_ARM(arch_from_caps)) ||
--              (ARCH_IS_S390(arch) && ARCH_IS_S390(arch_from_caps)))) {
--            virReportError(VIR_ERR_INVALID_ARG,
--                           _("architecture from emulator '%s' doesn't "
--                             "match given architecture '%s'"),
--                           virArchToString(arch_from_caps),
--                           virArchToString(arch));
--            goto cleanup;
--        }
--    } else {
--        if (!(qemuCaps = virQEMUCapsCacheLookupByArch(cache, arch)))
--            goto cleanup;
--
--        binary = virQEMUCapsGetBinary(qemuCaps);
-+    if (arch_from_caps != arch &&
-+        !((ARCH_IS_X86(arch) && ARCH_IS_X86(arch_from_caps)) ||
-+          (ARCH_IS_PPC(arch) && ARCH_IS_PPC(arch_from_caps)) ||
-+          (ARCH_IS_ARM(arch) && ARCH_IS_ARM(arch_from_caps)) ||
-+          (ARCH_IS_S390(arch) && ARCH_IS_S390(arch_from_caps)))) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("architecture from emulator '%s' doesn't "
-+                         "match given architecture '%s'"),
-+                       virArchToString(arch_from_caps),
-+                       virArchToString(arch));
-+        goto cleanup;
-     }
- 
-     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-forbid-migration-with-vhost-user-fs-device.patch b/SOURCES/libvirt-qemu-forbid-migration-with-vhost-user-fs-device.patch
deleted file mode 100644
index 7869a63..0000000
--- a/SOURCES/libvirt-qemu-forbid-migration-with-vhost-user-fs-device.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 5ae52dc252691262663129e52dbf1a775cd92bb8 Mon Sep 17 00:00:00 2001
-Message-Id: <5ae52dc252691262663129e52dbf1a775cd92bb8@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:45 +0100
-Subject: [PATCH] qemu: forbid migration with vhost-user-fs device
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This is not yet supported.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 5c0444a38bb37ddeb7049683ef72d02beab9e617)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-
-Conflicts: * downstream is missing commit 739bb1f26f9797f69023e221bef7c004adb9c522
-    qemu_migration: Rearrange some checks in qemuMigrationSrcIsAllowed()
-  src/qemu/qemu_migration.c
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <426a6270b1e0265b4977ad70029342ca43f7ff48.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_migration.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
-index 03f058051d..a677e270d4 100644
---- a/src/qemu/qemu_migration.c
-+++ b/src/qemu/qemu_migration.c
-@@ -1281,6 +1281,16 @@ qemuMigrationSrcIsAllowed(virQEMUDriverPtr driver,
-                            _("migration with shmem device is not supported"));
-             return false;
-         }
-+
-+        for (i = 0; i < vm->def->nfss; i++) {
-+            virDomainFSDefPtr fs = vm->def->fss[i];
-+
-+            if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
-+                virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-+                               _("migration with virtiofs device is not supported"));
-+                return false;
-+            }
-+        }
-     }
- 
-     return true;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch b/SOURCES/libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch
deleted file mode 100644
index 8545d91..0000000
--- a/SOURCES/libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 9a993a7d566b7acdc548c1f0114b99fe17ba3c12 Mon Sep 17 00:00:00 2001
-Message-Id: <9a993a7d566b7acdc548c1f0114b99fe17ba3c12@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Fri, 4 Dec 2020 15:02:42 -0600
-Subject: [PATCH] qemu: format 'ramfb' attribute for mediated devices
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It's possible to use ramfb as the boot display of an assigned vgpu
-device. This was introduced in 4b95738c, but unfortunately the attribute
-was not formatted into the xml output for such a device. This patch
-fixes that oversight and adds a xml2xml test to verify proper behavior.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1847791
-
-(the expected test results were massaged slightly due to the fact that
-commit 3b8feb4793cef66f5dbfb9bdabe4d40834f1e90e is not present in this
-build).
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c5815b31976f3982d18c7f6c1367ab6e403eb7eb)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1876297
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Message-Id: <20201204210242.822641-2-jjongsma@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c                        |  3 ++
- ...stdev-mdev-display-ramfb.x86_64-latest.xml | 41 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  1 +
- 3 files changed, 45 insertions(+)
- create mode 100644 tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index cd5c15f297..c5a0442c6f 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -27603,6 +27603,9 @@ virDomainHostdevDefFormat(virBufferPtr buf,
-             if (mdevsrc->display != VIR_TRISTATE_SWITCH_ABSENT)
-                 virBufferAsprintf(buf, " display='%s'",
-                                   virTristateSwitchTypeToString(mdevsrc->display));
-+            if (mdevsrc->ramfb != VIR_TRISTATE_SWITCH_ABSENT)
-+                virBufferAsprintf(buf, " ramfb='%s'",
-+                                  virTristateSwitchTypeToString(mdevsrc->ramfb));
-         }
- 
-     }
-diff --git a/tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml b/tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml
-new file mode 100644
-index 0000000000..90c49842a5
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/hostdev-mdev-display-ramfb.x86_64-latest.xml
-@@ -0,0 +1,41 @@
-+<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-i386</emulator>
-+    <controller type='usb' index='0' model='piix3-uhci'>
-+      <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' ramfb='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 f790bbc6f1..60efcac6c8 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -524,6 +524,7 @@ mymain(void)
-             QEMU_CAPS_VFIO_PCI_DISPLAY,
-             QEMU_CAPS_DEVICE_VFIO_PCI,
-             QEMU_CAPS_VNC);
-+    DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
-     DO_TEST("pci-rom", NONE);
-     DO_TEST("pci-rom-disabled", NONE);
-     DO_TEST("pci-rom-disabled-invalid", NONE);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemu-hook-up-pcie-root-port-hotplug-off-option.patch b/SOURCES/libvirt-qemu-hook-up-pcie-root-port-hotplug-off-option.patch
deleted file mode 100644
index c8e2c63..0000000
--- a/SOURCES/libvirt-qemu-hook-up-pcie-root-port-hotplug-off-option.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From c9d4140df5d22a1bfc895eb1049cc714eaadc86c Mon Sep 17 00:00:00 2001
-Message-Id: <c9d4140df5d22a1bfc895eb1049cc714eaadc86c@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:08 -0400
-Subject: [PATCH] qemu: hook up pcie-root-port hotplug='off' option
-
-If a pcie-root-port or pcie-downstream-port has hotplug='off' in its
-<target> subelement, and if the qemu binary supports the hotplug=false
-option, then it will be added to the commandline for the pcie
-controller. This controller will then not allow any hotplug/unplug of
-devices while the guest is running (and the hotplug capability won't
-be advertised to the guest OS, so the guest OS also won't present
-unplugging of PCI devices as an option).
-
-  <controller type='pci' model='pcie-root-port'>
-    <target hotplug='off'/>
-  </controller>
-
-For any PCI controllers other than pcie-downstream-port and
-pcie-root-port, of for qemu binaries that don't support the hotplug
-commandline option, an error will be logged during validation.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 2d3cf60328c138f7a8fd5905eb345d5f48227ff8)
-
-Conflicts:
-   src/qemu/qemu_domain.c:
-
-     This file was modified in lieu of modifying qemu_validate.c
-     upstream - that file has been added upstream (and device
-     post-parse validation functions moved there) but not downstream.
-
-   tests/qemuxml2argvdata/pcie-root-port-nohotplug.x86_64-latest.args:
-
-     These files had CPU model info upstream, but not downstream. Is
-     this due to the plain "q35" machinetype data missing from the
-     caps.replies file? Need to check...
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-6-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_command.c                       |  4 ++
- src/qemu/qemu_domain.c                        | 31 +++++++++++++
- ...cie-root-port-nohotplug.x86_64-latest.args | 45 +++++++++++++++++++
- tests/qemuxml2argvtest.c                      |  1 +
- 4 files changed, 81 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/pcie-root-port-nohotplug.x86_64-latest.args
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 4653e6ac3c..ed5f60e82e 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -3023,6 +3023,10 @@ qemuBuildControllerDevStr(const virDomainDef *domainDef,
-             virBufferAsprintf(&buf, "%s,port=0x%x,chassis=%d,id=%s",
-                               modelName, pciopts->port,
-                               pciopts->chassis, def->info.alias);
-+            if (pciopts->hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
-+                virBufferAsprintf(&buf, ",hotplug=%s",
-+                                  virTristateSwitchTypeToString(pciopts->hotplug));
-+            }
-             break;
-         case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
-             virBufferAsprintf(&buf, "%s,index=%d,id=%s",
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 8f746cdf13..1509e41021 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -7932,6 +7932,37 @@ qemuDomainDeviceDefValidateControllerPCI(const virDomainControllerDef *cont,
-         virReportEnumRangeError(virDomainControllerModelPCI, cont->model);
-     }
- 
-+    /* hotplug */
-+    if (pciopts->hotplug != VIR_TRISTATE_SWITCH_ABSENT) {
-+        switch ((virDomainControllerModelPCI) cont->model) {
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_DOWNSTREAM_PORT:
-+            if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG)) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                               _("setting the hotplug property on a '%s' device is not supported by this QEMU binary"),
-+                               modelName);
-+                return -1;
-+            }
-+            break;
-+
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_TO_PCI_BRIDGE:
-+            virReportControllerInvalidOption(cont, model, modelName, "hotplug");
-+            return -1;
-+
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCI_DEFAULT:
-+        case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
-+        default:
-+            virReportEnumRangeError(virDomainControllerModelPCI, cont->model);
-+        }
-+    }
-+
-     /* QEMU device availability */
-     if (cap < 0) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-diff --git a/tests/qemuxml2argvdata/pcie-root-port-nohotplug.x86_64-latest.args b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.x86_64-latest.args
-new file mode 100644
-index 0000000000..73885eec24
---- /dev/null
-+++ b/tests/qemuxml2argvdata/pcie-root-port-nohotplug.x86_64-latest.args
-@@ -0,0 +1,45 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-guest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-name guest=guest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-guest/master-key.aes \
-+-machine q35,accel=tcg,usb=off,dump-guest-core=off \
-+-m 2048 \
-+-overcommit mem-lock=off \
-+-smp 2,sockets=2,cores=1,threads=1 \
-+-uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \
-+-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 pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
-+addr=0x1 \
-+-device pcie-root-port,port=0x9,chassis=2,id=pci.2,hotplug=off,bus=pcie.0,\
-+addr=0x1.0x1 \
-+-device ioh3420,port=0xa,chassis=3,id=pci.3,hotplug=off,bus=pcie.0,\
-+addr=0x1.0x2 \
-+-device x3130-upstream,id=pci.4,bus=pci.1,addr=0x0 \
-+-device xio3130-downstream,port=0x0,chassis=5,id=pci.5,hotplug=off,bus=pci.4,\
-+addr=0x0 \
-+-device xio3130-downstream,port=0x1,chassis=6,id=pci.6,hotplug=on,bus=pci.4,\
-+addr=0x1 \
-+-device xio3130-downstream,port=0x2,chassis=7,id=pci.7,bus=pci.4,addr=0x2 \
-+-device xio3130-downstream,port=0x27,chassis=30,id=pci.8,bus=pci.4,addr=0x3 \
-+-device qemu-xhci,id=usb,bus=pci.2,addr=0x0 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index d6c5f436ae..ff92af606d 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -2427,6 +2427,7 @@ mymain(void)
-             QEMU_CAPS_DEVICE_IOH3420);
-     DO_TEST("pcie-root-port-model-ioh3420",
-             QEMU_CAPS_DEVICE_IOH3420);
-+    DO_TEST_CAPS_LATEST("pcie-root-port-nohotplug");
- 
-     DO_TEST("autoindex",
-             QEMU_CAPS_DEVICE_PCI_BRIDGE,
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-hotplug-Fix-handling-of-the-copy-on-read-layer-with-blockdev.patch b/SOURCES/libvirt-qemu-hotplug-Fix-handling-of-the-copy-on-read-layer-with-blockdev.patch
deleted file mode 100644
index bcbb7c4..0000000
--- a/SOURCES/libvirt-qemu-hotplug-Fix-handling-of-the-copy-on-read-layer-with-blockdev.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From ec2f52e9e935136d8517567bbe0e56c6e8c40af1 Mon Sep 17 00:00:00 2001
-Message-Id: <ec2f52e9e935136d8517567bbe0e56c6e8c40af1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:05 +0100
-Subject: [PATCH] qemu: hotplug: Fix handling of the 'copy-on-read' layer with
- blockdev
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-My original implementation was completely broken because it attempted to
-use object-add/del instead of blockdev-add/del.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798366
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit b71cf8726c25ea135ac81051e332544e6b886ad2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798366
-Message-Id: <170358b3722e56fc308e7cf3b0a2625349346ae9.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_hotplug.c | 25 ++++++++++++++++---------
- 1 file changed, 16 insertions(+), 9 deletions(-)
-
-diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
-index 31d455505b..12bc1f9dd5 100644
---- a/src/qemu/qemu_hotplug.c
-+++ b/src/qemu/qemu_hotplug.c
-@@ -680,6 +680,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     g_autoptr(virJSONValue) corProps = NULL;
-     g_autofree char *corAlias = NULL;
-+    bool corAdded = false;
-     bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
- 
-     if (qemuDomainStorageSourceChainAccessAllow(driver, vm, disk->src) < 0)
-@@ -692,9 +693,12 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
-         goto cleanup;
- 
-     if (blockdev) {
--        if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON &&
--            !(corProps = qemuBlockStorageGetCopyOnReadProps(disk)))
--        goto cleanup;
-+        if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON) {
-+            if (!(corProps = qemuBlockStorageGetCopyOnReadProps(disk)))
-+                goto cleanup;
-+
-+            corAlias = g_strdup(QEMU_DOMAIN_DISK_PRIVATE(disk)->nodeCopyOnRead);
-+        }
- 
-         if (!(data = qemuBuildStorageSourceChainAttachPrepareBlockdev(disk->src,
-                                                                       priv->qemuCaps)))
-@@ -719,9 +723,12 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
-     if (qemuBlockStorageSourceChainAttach(priv->mon, data) < 0)
-         goto exit_monitor;
- 
--    if (corProps &&
--        qemuMonitorAddObject(priv->mon, &corProps, &corAlias) < 0)
--        goto exit_monitor;
-+    if (corProps) {
-+        if (qemuMonitorBlockdevAdd(priv->mon, &corProps) < 0)
-+            goto exit_monitor;
-+
-+        corAdded = true;
-+    }
- 
-     if (qemuDomainAttachExtensionDevice(priv->mon, &disk->info) < 0)
-         goto exit_monitor;
-@@ -763,8 +770,8 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
-     return ret;
- 
-  exit_monitor:
--    if (corAlias)
--        ignore_value(qemuMonitorDelObject(priv->mon, corAlias));
-+    if (corAdded)
-+        ignore_value(qemuMonitorBlockdevDel(priv->mon, corAlias));
-     qemuBlockStorageSourceChainDetach(priv->mon, data);
- 
-     if (qemuDomainObjExitMonitor(driver, vm) < 0)
-@@ -4252,7 +4259,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
-     qemuDomainObjEnterMonitor(driver, vm);
- 
-     if (corAlias)
--        ignore_value(qemuMonitorDelObject(priv->mon, corAlias));
-+        ignore_value(qemuMonitorBlockdevDel(priv->mon, corAlias));
- 
-     if (diskBackend)
-         qemuBlockStorageSourceChainDetach(priv->mon, diskBackend);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-implement-support-for-firmware-auto-selection-feature-filtering.patch b/SOURCES/libvirt-qemu-implement-support-for-firmware-auto-selection-feature-filtering.patch
deleted file mode 100644
index f780cd6..0000000
--- a/SOURCES/libvirt-qemu-implement-support-for-firmware-auto-selection-feature-filtering.patch
+++ /dev/null
@@ -1,248 +0,0 @@
-From d1c5d166a891a2abf408a5879b95bded23b45825 Mon Sep 17 00:00:00 2001
-Message-Id: <d1c5d166a891a2abf408a5879b95bded23b45825@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 21 May 2021 14:16:12 +0200
-Subject: [PATCH] qemu: implement support for firmware auto-selection feature
- filtering
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit c91fa273062ec388385bf8cc081117c78c2f7af5)
-
-Conflicts:
-    tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.args
-        - missing upstream commits:
-            d96fb5cb31b870e1539bd8ee95fb27dbe461a357
-            43c9c0859f2d53321ccc646ab905beec0740490b
-            88957116c9d3cb4705380c3702c9d4315fb500bb
-
-    tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-        - missing upstream commits:
-            e88367095f3cad2cf80a687fd599dfaeb3073841
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <de1971688ed4bf1556d669973e60de6e3c76b4c1.1621599207.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_firmware.c                      | 40 +++++++++++++++
- ...re-efi-no-enrolled-keys.x86_64-latest.args | 47 ++++++++++++++++++
- .../os-firmware-efi-no-enrolled-keys.xml      | 49 +++++++++++++++++++
- tests/qemuxml2argvtest.c                      |  1 +
- ...are-efi-no-enrolled-keys.x86_64-latest.xml |  1 +
- tests/qemuxml2xmltest.c                       |  1 +
- 6 files changed, 139 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.args
- create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
- create mode 120000 tests/qemuxml2xmloutdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.xml
-
-diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
-index 8ef515ca57..e875e355c7 100644
---- a/src/qemu/qemu_firmware.c
-+++ b/src/qemu/qemu_firmware.c
-@@ -952,6 +952,10 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
-     bool supportsS4 = false;
-     bool requiresSMM = false;
-     bool supportsSEV = false;
-+    bool supportsSecureBoot = false;
-+    bool hasEnrolledKeys = false;
-+    int reqSecureBoot;
-+    int reqEnrolledKeys;
- 
-     want = qemuFirmwareOSInterfaceTypeFromOsDefFirmware(def->os.firmware);
- 
-@@ -1001,7 +1005,13 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
-             break;
- 
-         case QEMU_FIRMWARE_FEATURE_SECURE_BOOT:
-+            supportsSecureBoot = true;
-+            break;
-+
-         case QEMU_FIRMWARE_FEATURE_ENROLLED_KEYS:
-+            hasEnrolledKeys = true;
-+            break;
-+
-         case QEMU_FIRMWARE_FEATURE_VERBOSE_DYNAMIC:
-         case QEMU_FIRMWARE_FEATURE_VERBOSE_STATIC:
-         case QEMU_FIRMWARE_FEATURE_NONE:
-@@ -1022,6 +1032,36 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
-         return false;
-     }
- 
-+    if (def->os.firmwareFeatures) {
-+        reqSecureBoot = def->os.firmwareFeatures[VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_SECURE_BOOT];
-+        if (reqSecureBoot != VIR_TRISTATE_BOOL_ABSENT) {
-+            if (reqSecureBoot == VIR_TRISTATE_BOOL_YES && !supportsSecureBoot) {
-+                VIR_DEBUG("User requested Secure Boot, firmware '%s' doesn't support it",
-+                          path);
-+                return false;
-+            }
-+
-+            if (reqSecureBoot == VIR_TRISTATE_BOOL_NO && supportsSecureBoot) {
-+                VIR_DEBUG("User refused Secure Boot, firmware '%s' supports it", path);
-+                return false;
-+            }
-+        }
-+
-+        reqEnrolledKeys = def->os.firmwareFeatures[VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_ENROLLED_KEYS];
-+        if (reqEnrolledKeys != VIR_TRISTATE_BOOL_ABSENT) {
-+            if (reqEnrolledKeys == VIR_TRISTATE_BOOL_YES && !hasEnrolledKeys) {
-+                VIR_DEBUG("User requested Enrolled keys, firmware '%s' doesn't have them",
-+                          path);
-+                return false;
-+            }
-+
-+            if (reqEnrolledKeys == VIR_TRISTATE_BOOL_NO && hasEnrolledKeys) {
-+                VIR_DEBUG("User refused Enrolled keys, firmware '%s' has them", path);
-+                return false;
-+            }
-+        }
-+    }
-+
-     if (def->os.loader &&
-         def->os.loader->secure == VIR_TRISTATE_BOOL_YES &&
-         !requiresSMM) {
-diff --git a/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.args b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.args
-new file mode 100644
-index 0000000000..c3c838fb1a
---- /dev/null
-+++ b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.args
-@@ -0,0 +1,47 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-fedora \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-fedora/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-fedora/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-fedora/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-name guest=fedora,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-fedora/master-key.aes \
-+-blockdev '{"driver":"file","filename":"/usr/share/OVMF/OVMF_CODE.fd",\
-+"node-name":"libvirt-pflash0-storage","auto-read-only":true,\
-+"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,\
-+"driver":"raw","file":"libvirt-pflash0-storage"}' \
-+-blockdev '{"driver":"file",\
-+"filename":"/var/lib/libvirt/qemu/nvram/fedora_VARS.fd",\
-+"node-name":"libvirt-pflash1-storage","auto-read-only":true,\
-+"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,\
-+"driver":"raw","file":"libvirt-pflash1-storage"}' \
-+-machine pc-q35-4.0,accel=kvm,usb=off,dump-guest-core=off,\
-+pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format \
-+-cpu qemu64 \
-+-m 8 \
-+-overcommit mem-lock=off \
-+-smp 1,sockets=1,cores=1,threads=1 \
-+-uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
-+-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 \
-+-boot strict=on \
-+-device pcie-root-port,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
-+addr=0x1 \
-+-device pcie-root-port,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
-+-device qemu-xhci,id=usb,bus=pci.1,addr=0x0 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-new file mode 100644
-index 0000000000..7f8f57a859
---- /dev/null
-+++ b/tests/qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-@@ -0,0 +1,49 @@
-+<domain type='kvm'>
-+  <name>fedora</name>
-+  <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
-+  <memory unit='KiB'>8192</memory>
-+  <currentMemory unit='KiB'>8192</currentMemory>
-+  <vcpu placement='static'>1</vcpu>
-+  <os firmware='efi'>
-+    <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
-+    <firmware type='efi'>
-+      <feature enabled='no' name='enrolled-keys'/>
-+    </firmware>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+    <pae/>
-+  </features>
-+  <cpu mode='custom' match='exact' check='none'>
-+    <model fallback='forbid'>qemu64</model>
-+  </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='pci' index='0' model='pcie-root'/>
-+    <controller type='pci' index='1' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='1' port='0x8'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' multifunction='on'/>
-+    </controller>
-+    <controller type='pci' index='2' model='pcie-root-port'>
-+      <model name='pcie-root-port'/>
-+      <target chassis='2' port='0x9'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
-+    </controller>
-+    <controller type='usb' index='0' model='qemu-xhci'>
-+      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
-+    </controller>
-+    <controller type='sata' index='0'>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
-+    </controller>
-+    <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 bc04bea692..5e16d7fd31 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -3094,6 +3094,7 @@ mymain(void)
-     DO_TEST_CAPS_LATEST("os-firmware-bios");
-     DO_TEST_CAPS_LATEST("os-firmware-efi");
-     DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
-+    DO_TEST_CAPS_LATEST("os-firmware-efi-no-enrolled-keys");
-     DO_TEST_CAPS_LATEST_PARSE_ERROR("os-firmware-invalid-type");
-     DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64");
- 
-diff --git a/tests/qemuxml2xmloutdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.xml b/tests/qemuxml2xmloutdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.xml
-new file mode 120000
-index 0000000000..902ccb783b
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 461b5bc68f..9e5747290a 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1122,6 +1122,7 @@ mymain(void)
-     DO_TEST_CAPS_LATEST("os-firmware-bios");
-     DO_TEST_CAPS_LATEST("os-firmware-efi");
-     DO_TEST_CAPS_LATEST("os-firmware-efi-secboot");
-+    DO_TEST_CAPS_LATEST("os-firmware-efi-no-enrolled-keys");
- 
-     DO_TEST("aarch64-aavmf-virtio-mmio",
-             QEMU_CAPS_DEVICE_VIRTIO_MMIO,
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-qemu-monitor-Add-handler-for-blockdev-reopen.patch b/SOURCES/libvirt-qemu-monitor-Add-handler-for-blockdev-reopen.patch
deleted file mode 100644
index 2a394dd..0000000
--- a/SOURCES/libvirt-qemu-monitor-Add-handler-for-blockdev-reopen.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From 56a605626d81ee27ad220f3f949990cc46fca061 Mon Sep 17 00:00:00 2001
-Message-Id: <56a605626d81ee27ad220f3f949990cc46fca061@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:15 +0100
-Subject: [PATCH] qemu: monitor: Add handler for blockdev-reopen
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduce the monitor code for using blockdev-reopen.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 9f436e067df2e4465228c8ba536dcf9f9445aabc)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <e74e172e1c5e73fcaeafb7fb3a09414a2fcbe9ad.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_monitor.c      | 13 +++++++++++++
- src/qemu/qemu_monitor.h      |  3 +++
- src/qemu/qemu_monitor_json.c | 21 +++++++++++++++++++++
- src/qemu/qemu_monitor_json.h |  4 ++++
- 4 files changed, 41 insertions(+)
-
-diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
-index e3ee48613a..c4202d59af 100644
---- a/src/qemu/qemu_monitor.c
-+++ b/src/qemu/qemu_monitor.c
-@@ -4407,6 +4407,19 @@ qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
- }
- 
- 
-+int
-+qemuMonitorBlockdevReopen(qemuMonitorPtr mon,
-+                          virJSONValuePtr *props)
-+{
-+    VIR_DEBUG("props=%p (node-name=%s)", *props,
-+              NULLSTR(virJSONValueObjectGetString(*props, "node-name")));
-+
-+    QEMU_CHECK_MONITOR(mon);
-+
-+    return qemuMonitorJSONBlockdevReopen(mon, props);
-+}
-+
-+
- int
- qemuMonitorBlockdevDel(qemuMonitorPtr mon,
-                        const char *nodename)
-diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
-index 6a6b8efaee..481fc8e12e 100644
---- a/src/qemu/qemu_monitor.h
-+++ b/src/qemu/qemu_monitor.h
-@@ -1325,6 +1325,9 @@ int qemuMonitorBlockdevCreate(qemuMonitorPtr mon,
- int qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
-                            virJSONValuePtr *props);
- 
-+int qemuMonitorBlockdevReopen(qemuMonitorPtr mon,
-+                              virJSONValuePtr *props);
-+
- int qemuMonitorBlockdevDel(qemuMonitorPtr mon,
-                            const char *nodename);
- 
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 3827574ef6..0122b77259 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -8830,6 +8830,27 @@ qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
- }
- 
- 
-+int
-+qemuMonitorJSONBlockdevReopen(qemuMonitorPtr mon,
-+                              virJSONValuePtr *props)
-+{
-+    g_autoptr(virJSONValue) cmd = NULL;
-+    g_autoptr(virJSONValue) reply = NULL;
-+    virJSONValuePtr pr = g_steal_pointer(props);
-+
-+    if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", pr)))
-+        return -1;
-+
-+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
-+        return -1;
-+
-+    if (qemuMonitorJSONCheckError(cmd, reply) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-+
-+
- int
- qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
-                            const char *nodename)
-diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
-index fd2e09025e..801babef97 100644
---- a/src/qemu/qemu_monitor_json.h
-+++ b/src/qemu/qemu_monitor_json.h
-@@ -600,6 +600,10 @@ int qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
-                                virJSONValuePtr *props)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
- 
-+int qemuMonitorJSONBlockdevReopen(qemuMonitorPtr mon,
-+                                  virJSONValuePtr *props)
-+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
-+
- int qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
-                                const char *nodename)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-monitor-Improve-error-message-when-QEMU-reply-is-too-large.patch b/SOURCES/libvirt-qemu-monitor-Improve-error-message-when-QEMU-reply-is-too-large.patch
deleted file mode 100644
index da7be2d..0000000
--- a/SOURCES/libvirt-qemu-monitor-Improve-error-message-when-QEMU-reply-is-too-large.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From a3bea49c6960a468ee28b6d8dd0664c1ebcbcd02 Mon Sep 17 00:00:00 2001
-Message-Id: <a3bea49c6960a468ee28b6d8dd0664c1ebcbcd02@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:46 +0100
-Subject: [PATCH] qemu: monitor: Improve error message when QEMU reply is too
- large
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Don't use ERANGE as it doesn't make much sense in the error message.
-Also point out that the reply from qemu was too large which is not
-obvious from the original error:
-
- error: No complete monitor response found in 10485760 bytes: Numerical result out of range
-
-The new message will read:
-
- error: internal error: QEMU monitor reply exceeds buffer size (10485760 bytes)
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 29d43bf96a3e5886f1b32c78bbb16d1507bd0d9e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1524278
-Message-Id: <0e03a38f096e556cb82eecdb72e7dd5f86eec752.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_monitor.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
-index 4f547bf5ec..0e67851690 100644
---- a/src/qemu/qemu_monitor.c
-+++ b/src/qemu/qemu_monitor.c
-@@ -485,9 +485,9 @@ qemuMonitorIORead(qemuMonitorPtr mon)
- 
-     if (avail < 1024) {
-         if (mon->bufferLength >= QEMU_MONITOR_MAX_RESPONSE) {
--            virReportSystemError(ERANGE,
--                                 _("No complete monitor response found in %d bytes"),
--                                 QEMU_MONITOR_MAX_RESPONSE);
-+            virReportError(VIR_ERR_INTERNAL_ERROR,
-+                           _("QEMU monitor reply exceeds buffer size (%d bytes)"),
-+                           QEMU_MONITOR_MAX_RESPONSE);
-             return -1;
-         }
-         if (VIR_REALLOC_N(mon->buffer,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-move-cgroup-cpu-period-and-quota-defines-to-vircgroup.h.patch b/SOURCES/libvirt-qemu-move-cgroup-cpu-period-and-quota-defines-to-vircgroup.h.patch
deleted file mode 100644
index 2ee6d62..0000000
--- a/SOURCES/libvirt-qemu-move-cgroup-cpu-period-and-quota-defines-to-vircgroup.h.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From 7a964b43185f4d818eec0c39197bde17371f4c2b Mon Sep 17 00:00:00 2001
-Message-Id: <7a964b43185f4d818eec0c39197bde17371f4c2b@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 21 Jan 2021 10:24:03 -0300
-Subject: [PATCH] qemu: move cgroup cpu period and quota defines to vircgroup.h
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit a818e3f6f02ffc9c1c9ea6e8131c307213fa18ec)
-
-Conflicts:  src/qemu/qemu_driver.c
-    Context due to lots of changes upstream in the file.
-
-https://bugzilla.redhat.com/1915733
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20210121132406.337681-2-dbarboza@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- src/qemu/qemu_driver.c | 21 ++++++++-------------
- src/util/vircgroup.h   |  5 +++++
- 2 files changed, 13 insertions(+), 13 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 80a4a43e2e..a1103a96dd 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -122,11 +122,6 @@ VIR_LOG_INIT("qemu.qemu_driver");
- 
- #define QEMU_NB_NUMA_PARAM 2
- 
--#define QEMU_SCHED_MIN_PERIOD              1000LL
--#define QEMU_SCHED_MAX_PERIOD           1000000LL
--#define QEMU_SCHED_MIN_QUOTA               1000LL
--#define QEMU_SCHED_MAX_QUOTA  18446744073709551LL
--
- #define QEMU_GUEST_VCPU_MAX_ID 4096
- 
- #define QEMU_NB_BLKIO_PARAM  6
-@@ -10655,7 +10650,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_VCPU_PERIOD)) {
-             SCHED_RANGE_CHECK(value_ul, VIR_DOMAIN_SCHEDULER_VCPU_PERIOD,
--                              QEMU_SCHED_MIN_PERIOD, QEMU_SCHED_MAX_PERIOD);
-+                              VIR_CGROUP_CPU_PERIOD_MIN, VIR_CGROUP_CPU_PERIOD_MAX);
- 
-             if (def && value_ul) {
-                 if ((rc = qemuSetVcpusBWLive(vm, priv->cgroup, value_ul, 0)))
-@@ -10675,7 +10670,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_VCPU_QUOTA)) {
-             SCHED_RANGE_CHECK(value_l, VIR_DOMAIN_SCHEDULER_VCPU_QUOTA,
--                              QEMU_SCHED_MIN_QUOTA, QEMU_SCHED_MAX_QUOTA);
-+                              VIR_CGROUP_CPU_QUOTA_MIN, VIR_CGROUP_CPU_QUOTA_MAX);
- 
-             if (def && value_l) {
-                 if ((rc = qemuSetVcpusBWLive(vm, priv->cgroup, 0, value_l)))
-@@ -10695,7 +10690,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_GLOBAL_PERIOD)) {
-             SCHED_RANGE_CHECK(value_ul, VIR_DOMAIN_SCHEDULER_GLOBAL_PERIOD,
--                              QEMU_SCHED_MIN_PERIOD, QEMU_SCHED_MAX_PERIOD);
-+                              VIR_CGROUP_CPU_PERIOD_MIN, VIR_CGROUP_CPU_PERIOD_MAX);
- 
-             if (def && value_ul) {
-                 if ((rc = qemuSetGlobalBWLive(priv->cgroup, value_ul, 0)))
-@@ -10715,7 +10710,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_GLOBAL_QUOTA)) {
-             SCHED_RANGE_CHECK(value_l, VIR_DOMAIN_SCHEDULER_GLOBAL_QUOTA,
--                              QEMU_SCHED_MIN_QUOTA, QEMU_SCHED_MAX_QUOTA);
-+                              VIR_CGROUP_CPU_QUOTA_MIN, VIR_CGROUP_CPU_QUOTA_MAX);
- 
-             if (def && value_l) {
-                 if ((rc = qemuSetGlobalBWLive(priv->cgroup, 0, value_l)))
-@@ -10735,7 +10730,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD)) {
-             SCHED_RANGE_CHECK(value_ul, VIR_DOMAIN_SCHEDULER_EMULATOR_PERIOD,
--                              QEMU_SCHED_MIN_PERIOD, QEMU_SCHED_MAX_PERIOD);
-+                              VIR_CGROUP_CPU_PERIOD_MIN, VIR_CGROUP_CPU_PERIOD_MAX);
- 
-             if (def && value_ul) {
-                 if ((rc = qemuSetEmulatorBandwidthLive(priv->cgroup,
-@@ -10756,7 +10751,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA)) {
-             SCHED_RANGE_CHECK(value_l, VIR_DOMAIN_SCHEDULER_EMULATOR_QUOTA,
--                              QEMU_SCHED_MIN_QUOTA, QEMU_SCHED_MAX_QUOTA);
-+                              VIR_CGROUP_CPU_QUOTA_MIN, VIR_CGROUP_CPU_QUOTA_MAX);
- 
-             if (def && value_l) {
-                 if ((rc = qemuSetEmulatorBandwidthLive(priv->cgroup,
-@@ -10777,7 +10772,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD)) {
-             SCHED_RANGE_CHECK(value_ul, VIR_DOMAIN_SCHEDULER_IOTHREAD_PERIOD,
--                              QEMU_SCHED_MIN_PERIOD, QEMU_SCHED_MAX_PERIOD);
-+                              VIR_CGROUP_CPU_PERIOD_MIN, VIR_CGROUP_CPU_PERIOD_MAX);
- 
-             if (def && value_ul) {
-                 if ((rc = qemuSetIOThreadsBWLive(vm, priv->cgroup, value_ul, 0)))
-@@ -10797,7 +10792,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
- 
-         } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA)) {
-             SCHED_RANGE_CHECK(value_l, VIR_DOMAIN_SCHEDULER_IOTHREAD_QUOTA,
--                              QEMU_SCHED_MIN_QUOTA, QEMU_SCHED_MAX_QUOTA);
-+                              VIR_CGROUP_CPU_QUOTA_MIN, VIR_CGROUP_CPU_QUOTA_MAX);
- 
-             if (def && value_l) {
-                 if ((rc = qemuSetIOThreadsBWLive(vm, priv->cgroup, 0, value_l)))
-diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
-index 3eefe78787..83fa74840f 100644
---- a/src/util/vircgroup.h
-+++ b/src/util/vircgroup.h
-@@ -243,6 +243,11 @@ virCgroupGetDomainTotalCpuStats(virCgroupPtr group,
- int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
- int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
- 
-+#define VIR_CGROUP_CPU_PERIOD_MIN 1000LL
-+#define VIR_CGROUP_CPU_PERIOD_MAX 1000000LL
-+#define VIR_CGROUP_CPU_QUOTA_MIN 1000LL
-+#define VIR_CGROUP_CPU_QUOTA_MAX 18446744073709551LL
-+
- int virCgroupSetCpuCfsPeriod(virCgroupPtr group, unsigned long long cfs_period);
- int virCgroupGetCpuCfsPeriod(virCgroupPtr group, unsigned long long *cfs_period);
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-qemu-new-capabilities-flag-pcie-root-port.hotplug.patch b/SOURCES/libvirt-qemu-new-capabilities-flag-pcie-root-port.hotplug.patch
deleted file mode 100644
index e402e22..0000000
--- a/SOURCES/libvirt-qemu-new-capabilities-flag-pcie-root-port.hotplug.patch
+++ /dev/null
@@ -1,37901 +0,0 @@
-From bc897af485b8ae39d93dfa974995a8a94ba217cf Mon Sep 17 00:00:00 2001
-Message-Id: <bc897af485b8ae39d93dfa974995a8a94ba217cf@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:06 -0400
-Subject: [PATCH] qemu: new capabilities flag pcie-root-port.hotplug
-
-This caps flag is set when the qemu binary supports the option
-"hotplug" for pcie-root-port, ioh3420 (Intel pcie-root-port) and
-xio3130-downstream (Intel pcie-downstream-port). If it's available,
-it's possible to disable hotplugging/unplugging devices on a
-particular port by adding ",hotplug=off" to the qemu device
-commandline. This option first appears in qemu-5.0.0.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit cbd4ab4cc6945e610b0a3061fcf3517755d65dcf)
-
- Conflicts:
- src/qemu/qemu_capabilities.c:
- src/qemu/qemu_capabilities.h:
-
-   new capabilities added upstream
-
- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies:
- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml:
-
-   files didn't exist upstream (and some new capabilities aren't
-   included downstream, meaning the .xml is different from upstream)
-
- tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args:
- tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args:
- tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args:
- tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args:
- tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml:
-
-   These files were not modified for this patch upstream, but had to
-   be modified downstream in order for tests to patch. This was due to
-   the "latest" qemu for tests switching from 4.2.0.x86_64 to
-   5.0.0.x86_64, which removes the deprecated "pc-0.12" and "pc-0.13"
-   machinetype used in those 5 tests. Upstream these tests were
-   changed (in commits 30518a3b and 44d32a0a) to use either the
-   generic "pc" machinetype, or the specific "pc-i440fx-2.12"
-   machinetype, but backporting those patches (and several others)
-   seemed overly disruptive, so instead this patch is carrying 5 extra
-   one-line changes to allow the tests to pass.
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-4-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_capabilities.c                  |     8 +
- src/qemu/qemu_capabilities.h                  |     1 +
- .../domaincapsdata/qemu_5.0.0-q35.x86_64.xml  |   181 +
- .../domaincapsdata/qemu_5.0.0-tcg.x86_64.xml  |   191 +
- tests/domaincapsdata/qemu_5.0.0.x86_64.xml    |   181 +
- .../caps_2.10.0.aarch64.replies               |   142 +-
- .../caps_2.10.0.x86_64.replies                |   154 +-
- .../caps_2.11.0.x86_64.replies                |   154 +-
- .../caps_2.12.0.aarch64.replies               |   158 +-
- .../caps_2.12.0.x86_64.replies                |   170 +-
- .../caps_2.9.0.x86_64.replies                 |   154 +-
- .../caps_3.0.0.x86_64.replies                 |   170 +-
- .../caps_3.1.0.x86_64.replies                 |   170 +-
- .../caps_4.0.0.aarch64.replies                |   158 +-
- .../caps_4.0.0.ppc64.replies                  |   150 +-
- .../caps_4.0.0.riscv32.replies                |   150 +-
- .../caps_4.0.0.riscv64.replies                |   150 +-
- .../caps_4.0.0.x86_64.replies                 |   170 +-
- .../caps_4.1.0.x86_64.replies                 |   162 +-
- .../caps_4.2.0.aarch64.replies                |   166 +-
- .../caps_4.2.0.ppc64.replies                  |   150 +-
- .../caps_4.2.0.x86_64.replies                 |   162 +-
- .../caps_5.0.0.aarch64.replies                |   166 +-
- .../caps_5.0.0.x86_64.replies                 | 28673 ++++++++++++++++
- .../caps_5.0.0.x86_64.xml                     |  2842 ++
- .../disk-cdrom-tray.x86_64-latest.args        |     1 -
- .../disk-copy_on_read.x86_64-latest.args      |     1 -
- .../disk-detect-zeroes.x86_64-latest.args     |     1 -
- .../vhost-vsock.x86_64-latest.args            |     1 -
- .../tpm-passthrough.x86_64-latest.xml         |     3 -
- 30 files changed, 34495 insertions(+), 445 deletions(-)
- create mode 100644 tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
- create mode 100644 tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
- create mode 100644 tests/domaincapsdata/qemu_5.0.0.x86_64.xml
- create mode 100644 tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies
- create mode 100644 tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 9d744501b9..3bbfb64c03 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -565,6 +565,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               /* 355 */
-               "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api",
-               "storage.werror",
-+              "pcie-root-port.hotplug",
-     );
- 
- 
-@@ -1315,6 +1316,10 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioNet[] = {
-     { "failover", QEMU_CAPS_VIRTIO_NET_FAILOVER },
- };
- 
-+static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsPCIeRootPort[] = {
-+    { "hotplug", QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG },
-+};
-+
- static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsSpaprPCIHostBridge[] = {
-     { "numa_node", QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE },
- };
-@@ -1556,6 +1561,9 @@ static virQEMUCapsObjectTypeProps virQEMUCapsDeviceProps[] = {
-     { "nvdimm", virQEMUCapsDevicePropsNVDIMM,
-       G_N_ELEMENTS(virQEMUCapsDevicePropsNVDIMM),
-       QEMU_CAPS_DEVICE_NVDIMM },
-+    { "pcie-root-port", virQEMUCapsDevicePropsPCIeRootPort,
-+      G_N_ELEMENTS(virQEMUCapsDevicePropsPCIeRootPort),
-+      QEMU_CAPS_DEVICE_PCIE_ROOT_PORT },
- };
- 
- static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] = {
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 78bddb3856..aad02fcda5 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -546,6 +546,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     /* 355 */
-     QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API, /* downstream support for blockdev reopen in rhel-av-8.2.0 */
-     QEMU_CAPS_STORAGE_WERROR, /* virtio-blk,scsi-hd.werror */
-+    QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG, /* pcie-root-port.hotplug */
- 
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
-diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-new file mode 100644
-index 0000000000..b635d573ef
---- /dev/null
-+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
-@@ -0,0 +1,181 @@
-+<domainCapabilities>
-+  <path>/usr/bin/qemu-system-x86_64</path>
-+  <domain>kvm</domain>
-+  <machine>pc-q35-5.0</machine>
-+  <arch>x86_64</arch>
-+  <vcpu max='288'/>
-+  <iothreads supported='yes'/>
-+  <os supported='yes'>
-+    <enum name='firmware'>
-+      <value>bios</value>
-+      <value>efi</value>
-+    </enum>
-+    <loader supported='yes'>
-+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
-+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
-+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
-+      <enum name='type'>
-+        <value>rom</value>
-+        <value>pflash</value>
-+      </enum>
-+      <enum name='readonly'>
-+        <value>yes</value>
-+        <value>no</value>
-+      </enum>
-+      <enum name='secure'>
-+        <value>yes</value>
-+        <value>no</value>
-+      </enum>
-+    </loader>
-+  </os>
-+  <cpu>
-+    <mode name='host-passthrough' supported='yes'/>
-+    <mode name='host-model' supported='yes'>
-+      <model fallback='forbid'>Skylake-Client-IBRS</model>
-+      <vendor>Intel</vendor>
-+      <feature policy='require' name='ss'/>
-+      <feature policy='require' name='vmx'/>
-+      <feature policy='require' name='hypervisor'/>
-+      <feature policy='require' name='tsc_adjust'/>
-+      <feature policy='require' name='clflushopt'/>
-+      <feature policy='require' name='umip'/>
-+      <feature policy='require' name='md-clear'/>
-+      <feature policy='require' name='stibp'/>
-+      <feature policy='require' name='arch-capabilities'/>
-+      <feature policy='require' name='ssbd'/>
-+      <feature policy='require' name='xsaves'/>
-+      <feature policy='require' name='pdpe1gb'/>
-+      <feature policy='require' name='invtsc'/>
-+      <feature policy='require' name='skip-l1dfl-vmentry'/>
-+    </mode>
-+    <mode name='custom' supported='yes'>
-+      <model usable='yes'>qemu64</model>
-+      <model usable='yes'>qemu32</model>
-+      <model usable='no'>phenom</model>
-+      <model usable='yes'>pentium3</model>
-+      <model usable='yes'>pentium2</model>
-+      <model usable='yes'>pentium</model>
-+      <model usable='yes'>n270</model>
-+      <model usable='yes'>kvm64</model>
-+      <model usable='yes'>kvm32</model>
-+      <model usable='yes'>coreduo</model>
-+      <model usable='yes'>core2duo</model>
-+      <model usable='no'>athlon</model>
-+      <model usable='yes'>Westmere-IBRS</model>
-+      <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-IBRS</model>
-+      <model usable='no'>Skylake-Server</model>
-+      <model usable='yes'>Skylake-Client-IBRS</model>
-+      <model usable='yes'>Skylake-Client</model>
-+      <model usable='yes'>SandyBridge-IBRS</model>
-+      <model usable='yes'>SandyBridge</model>
-+      <model usable='yes'>Penryn</model>
-+      <model usable='no'>Opteron_G5</model>
-+      <model usable='no'>Opteron_G4</model>
-+      <model usable='no'>Opteron_G3</model>
-+      <model usable='yes'>Opteron_G2</model>
-+      <model usable='yes'>Opteron_G1</model>
-+      <model usable='yes'>Nehalem-IBRS</model>
-+      <model usable='yes'>Nehalem</model>
-+      <model usable='yes'>IvyBridge-IBRS</model>
-+      <model usable='yes'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client</model>
-+      <model usable='yes'>Haswell-noTSX-IBRS</model>
-+      <model usable='yes'>Haswell-noTSX</model>
-+      <model usable='yes'>Haswell-IBRS</model>
-+      <model usable='yes'>Haswell</model>
-+      <model usable='no'>EPYC-IBPB</model>
-+      <model usable='no'>EPYC</model>
-+      <model usable='no'>Dhyana</model>
-+      <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server</model>
-+      <model usable='yes'>Broadwell-noTSX-IBRS</model>
-+      <model usable='yes'>Broadwell-noTSX</model>
-+      <model usable='yes'>Broadwell-IBRS</model>
-+      <model usable='yes'>Broadwell</model>
-+      <model usable='yes'>486</model>
-+    </mode>
-+  </cpu>
-+  <devices>
-+    <disk supported='yes'>
-+      <enum name='diskDevice'>
-+        <value>disk</value>
-+        <value>cdrom</value>
-+        <value>floppy</value>
-+        <value>lun</value>
-+      </enum>
-+      <enum name='bus'>
-+        <value>fdc</value>
-+        <value>scsi</value>
-+        <value>virtio</value>
-+        <value>usb</value>
-+        <value>sata</value>
-+      </enum>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+    </disk>
-+    <graphics supported='yes'>
-+      <enum name='type'>
-+        <value>sdl</value>
-+        <value>vnc</value>
-+        <value>spice</value>
-+      </enum>
-+    </graphics>
-+    <video supported='yes'>
-+      <enum name='modelType'>
-+        <value>vga</value>
-+        <value>cirrus</value>
-+        <value>vmvga</value>
-+        <value>qxl</value>
-+        <value>virtio</value>
-+        <value>none</value>
-+        <value>bochs</value>
-+        <value>ramfb</value>
-+      </enum>
-+    </video>
-+    <hostdev supported='yes'>
-+      <enum name='mode'>
-+        <value>subsystem</value>
-+      </enum>
-+      <enum name='startupPolicy'>
-+        <value>default</value>
-+        <value>mandatory</value>
-+        <value>requisite</value>
-+        <value>optional</value>
-+      </enum>
-+      <enum name='subsysType'>
-+        <value>usb</value>
-+        <value>pci</value>
-+        <value>scsi</value>
-+      </enum>
-+      <enum name='capsType'/>
-+      <enum name='pciBackend'>
-+        <value>default</value>
-+        <value>vfio</value>
-+      </enum>
-+    </hostdev>
-+    <rng supported='yes'>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+      <enum name='backendModel'>
-+        <value>random</value>
-+        <value>egd</value>
-+      </enum>
-+    </rng>
-+  </devices>
-+  <features>
-+    <gic supported='no'/>
-+    <vmcoreinfo supported='yes'/>
-+    <genid supported='yes'/>
-+    <backingStoreInput supported='yes'/>
-+    <backup supported='no'/>
-+    <sev supported='no'/>
-+  </features>
-+</domainCapabilities>
-diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-new file mode 100644
-index 0000000000..0fbc632267
---- /dev/null
-+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
-@@ -0,0 +1,191 @@
-+<domainCapabilities>
-+  <path>/usr/bin/qemu-system-x86_64</path>
-+  <domain>qemu</domain>
-+  <machine>pc-i440fx-5.0</machine>
-+  <arch>x86_64</arch>
-+  <vcpu max='255'/>
-+  <iothreads supported='yes'/>
-+  <os supported='yes'>
-+    <enum name='firmware'>
-+      <value>bios</value>
-+      <value>efi</value>
-+    </enum>
-+    <loader supported='yes'>
-+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
-+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
-+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
-+      <enum name='type'>
-+        <value>rom</value>
-+        <value>pflash</value>
-+      </enum>
-+      <enum name='readonly'>
-+        <value>yes</value>
-+        <value>no</value>
-+      </enum>
-+      <enum name='secure'>
-+        <value>no</value>
-+      </enum>
-+    </loader>
-+  </os>
-+  <cpu>
-+    <mode name='host-passthrough' supported='no'/>
-+    <mode name='host-model' supported='yes'>
-+      <model fallback='forbid'>EPYC</model>
-+      <vendor>AMD</vendor>
-+      <feature policy='require' name='acpi'/>
-+      <feature policy='require' name='ss'/>
-+      <feature policy='require' name='hypervisor'/>
-+      <feature policy='require' name='erms'/>
-+      <feature policy='require' name='mpx'/>
-+      <feature policy='require' name='pcommit'/>
-+      <feature policy='require' name='clwb'/>
-+      <feature policy='require' name='pku'/>
-+      <feature policy='require' name='la57'/>
-+      <feature policy='require' name='3dnowext'/>
-+      <feature policy='require' name='3dnow'/>
-+      <feature policy='disable' name='vme'/>
-+      <feature policy='disable' name='fma'/>
-+      <feature policy='disable' name='avx'/>
-+      <feature policy='disable' name='f16c'/>
-+      <feature policy='disable' name='avx2'/>
-+      <feature policy='disable' name='rdseed'/>
-+      <feature policy='disable' name='sha-ni'/>
-+      <feature policy='disable' name='xsavec'/>
-+      <feature policy='disable' name='fxsr_opt'/>
-+      <feature policy='disable' name='misalignsse'/>
-+      <feature policy='disable' name='3dnowprefetch'/>
-+      <feature policy='disable' name='osvw'/>
-+      <feature policy='disable' name='topoext'/>
-+    </mode>
-+    <mode name='custom' supported='yes'>
-+      <model usable='yes'>qemu64</model>
-+      <model usable='yes'>qemu32</model>
-+      <model usable='no'>phenom</model>
-+      <model usable='yes'>pentium3</model>
-+      <model usable='yes'>pentium2</model>
-+      <model usable='yes'>pentium</model>
-+      <model usable='yes'>n270</model>
-+      <model usable='yes'>kvm64</model>
-+      <model usable='yes'>kvm32</model>
-+      <model usable='yes'>coreduo</model>
-+      <model usable='yes'>core2duo</model>
-+      <model usable='yes'>athlon</model>
-+      <model usable='no'>Westmere-IBRS</model>
-+      <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-IBRS</model>
-+      <model usable='no'>Skylake-Server</model>
-+      <model usable='no'>Skylake-Client-IBRS</model>
-+      <model usable='no'>Skylake-Client</model>
-+      <model usable='no'>SandyBridge-IBRS</model>
-+      <model usable='no'>SandyBridge</model>
-+      <model usable='yes'>Penryn</model>
-+      <model usable='no'>Opteron_G5</model>
-+      <model usable='no'>Opteron_G4</model>
-+      <model usable='no'>Opteron_G3</model>
-+      <model usable='yes'>Opteron_G2</model>
-+      <model usable='yes'>Opteron_G1</model>
-+      <model usable='no'>Nehalem-IBRS</model>
-+      <model usable='yes'>Nehalem</model>
-+      <model usable='no'>IvyBridge-IBRS</model>
-+      <model usable='no'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client</model>
-+      <model usable='no'>Haswell-noTSX-IBRS</model>
-+      <model usable='no'>Haswell-noTSX</model>
-+      <model usable='no'>Haswell-IBRS</model>
-+      <model usable='no'>Haswell</model>
-+      <model usable='no'>EPYC-IBPB</model>
-+      <model usable='no'>EPYC</model>
-+      <model usable='no'>Dhyana</model>
-+      <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server</model>
-+      <model usable='no'>Broadwell-noTSX-IBRS</model>
-+      <model usable='no'>Broadwell-noTSX</model>
-+      <model usable='no'>Broadwell-IBRS</model>
-+      <model usable='no'>Broadwell</model>
-+      <model usable='yes'>486</model>
-+    </mode>
-+  </cpu>
-+  <devices>
-+    <disk supported='yes'>
-+      <enum name='diskDevice'>
-+        <value>disk</value>
-+        <value>cdrom</value>
-+        <value>floppy</value>
-+        <value>lun</value>
-+      </enum>
-+      <enum name='bus'>
-+        <value>ide</value>
-+        <value>fdc</value>
-+        <value>scsi</value>
-+        <value>virtio</value>
-+        <value>usb</value>
-+        <value>sata</value>
-+      </enum>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+    </disk>
-+    <graphics supported='yes'>
-+      <enum name='type'>
-+        <value>sdl</value>
-+        <value>vnc</value>
-+        <value>spice</value>
-+      </enum>
-+    </graphics>
-+    <video supported='yes'>
-+      <enum name='modelType'>
-+        <value>vga</value>
-+        <value>cirrus</value>
-+        <value>vmvga</value>
-+        <value>qxl</value>
-+        <value>virtio</value>
-+        <value>none</value>
-+        <value>bochs</value>
-+        <value>ramfb</value>
-+      </enum>
-+    </video>
-+    <hostdev supported='yes'>
-+      <enum name='mode'>
-+        <value>subsystem</value>
-+      </enum>
-+      <enum name='startupPolicy'>
-+        <value>default</value>
-+        <value>mandatory</value>
-+        <value>requisite</value>
-+        <value>optional</value>
-+      </enum>
-+      <enum name='subsysType'>
-+        <value>usb</value>
-+        <value>pci</value>
-+        <value>scsi</value>
-+      </enum>
-+      <enum name='capsType'/>
-+      <enum name='pciBackend'>
-+        <value>default</value>
-+        <value>vfio</value>
-+      </enum>
-+    </hostdev>
-+    <rng supported='yes'>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+      <enum name='backendModel'>
-+        <value>random</value>
-+        <value>egd</value>
-+      </enum>
-+    </rng>
-+  </devices>
-+  <features>
-+    <gic supported='no'/>
-+    <vmcoreinfo supported='yes'/>
-+    <genid supported='yes'/>
-+    <backingStoreInput supported='yes'/>
-+    <backup supported='no'/>
-+    <sev supported='no'/>
-+  </features>
-+</domainCapabilities>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-new file mode 100644
-index 0000000000..27f76a8a5e
---- /dev/null
-+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
-@@ -0,0 +1,181 @@
-+<domainCapabilities>
-+  <path>/usr/bin/qemu-system-x86_64</path>
-+  <domain>kvm</domain>
-+  <machine>pc-i440fx-5.0</machine>
-+  <arch>x86_64</arch>
-+  <vcpu max='255'/>
-+  <iothreads supported='yes'/>
-+  <os supported='yes'>
-+    <enum name='firmware'>
-+      <value>bios</value>
-+      <value>efi</value>
-+    </enum>
-+    <loader supported='yes'>
-+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
-+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
-+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
-+      <enum name='type'>
-+        <value>rom</value>
-+        <value>pflash</value>
-+      </enum>
-+      <enum name='readonly'>
-+        <value>yes</value>
-+        <value>no</value>
-+      </enum>
-+      <enum name='secure'>
-+        <value>no</value>
-+      </enum>
-+    </loader>
-+  </os>
-+  <cpu>
-+    <mode name='host-passthrough' supported='yes'/>
-+    <mode name='host-model' supported='yes'>
-+      <model fallback='forbid'>Skylake-Client-IBRS</model>
-+      <vendor>Intel</vendor>
-+      <feature policy='require' name='ss'/>
-+      <feature policy='require' name='vmx'/>
-+      <feature policy='require' name='hypervisor'/>
-+      <feature policy='require' name='tsc_adjust'/>
-+      <feature policy='require' name='clflushopt'/>
-+      <feature policy='require' name='umip'/>
-+      <feature policy='require' name='md-clear'/>
-+      <feature policy='require' name='stibp'/>
-+      <feature policy='require' name='arch-capabilities'/>
-+      <feature policy='require' name='ssbd'/>
-+      <feature policy='require' name='xsaves'/>
-+      <feature policy='require' name='pdpe1gb'/>
-+      <feature policy='require' name='invtsc'/>
-+      <feature policy='require' name='skip-l1dfl-vmentry'/>
-+    </mode>
-+    <mode name='custom' supported='yes'>
-+      <model usable='yes'>qemu64</model>
-+      <model usable='yes'>qemu32</model>
-+      <model usable='no'>phenom</model>
-+      <model usable='yes'>pentium3</model>
-+      <model usable='yes'>pentium2</model>
-+      <model usable='yes'>pentium</model>
-+      <model usable='yes'>n270</model>
-+      <model usable='yes'>kvm64</model>
-+      <model usable='yes'>kvm32</model>
-+      <model usable='yes'>coreduo</model>
-+      <model usable='yes'>core2duo</model>
-+      <model usable='no'>athlon</model>
-+      <model usable='yes'>Westmere-IBRS</model>
-+      <model usable='yes'>Westmere</model>
-+      <model usable='no'>Skylake-Server-IBRS</model>
-+      <model usable='no'>Skylake-Server</model>
-+      <model usable='yes'>Skylake-Client-IBRS</model>
-+      <model usable='yes'>Skylake-Client</model>
-+      <model usable='yes'>SandyBridge-IBRS</model>
-+      <model usable='yes'>SandyBridge</model>
-+      <model usable='yes'>Penryn</model>
-+      <model usable='no'>Opteron_G5</model>
-+      <model usable='no'>Opteron_G4</model>
-+      <model usable='no'>Opteron_G3</model>
-+      <model usable='yes'>Opteron_G2</model>
-+      <model usable='yes'>Opteron_G1</model>
-+      <model usable='yes'>Nehalem-IBRS</model>
-+      <model usable='yes'>Nehalem</model>
-+      <model usable='yes'>IvyBridge-IBRS</model>
-+      <model usable='yes'>IvyBridge</model>
-+      <model usable='no'>Icelake-Server</model>
-+      <model usable='no'>Icelake-Client</model>
-+      <model usable='yes'>Haswell-noTSX-IBRS</model>
-+      <model usable='yes'>Haswell-noTSX</model>
-+      <model usable='yes'>Haswell-IBRS</model>
-+      <model usable='yes'>Haswell</model>
-+      <model usable='no'>EPYC-IBPB</model>
-+      <model usable='no'>EPYC</model>
-+      <model usable='no'>Dhyana</model>
-+      <model usable='yes'>Conroe</model>
-+      <model usable='no'>Cascadelake-Server</model>
-+      <model usable='yes'>Broadwell-noTSX-IBRS</model>
-+      <model usable='yes'>Broadwell-noTSX</model>
-+      <model usable='yes'>Broadwell-IBRS</model>
-+      <model usable='yes'>Broadwell</model>
-+      <model usable='yes'>486</model>
-+    </mode>
-+  </cpu>
-+  <devices>
-+    <disk supported='yes'>
-+      <enum name='diskDevice'>
-+        <value>disk</value>
-+        <value>cdrom</value>
-+        <value>floppy</value>
-+        <value>lun</value>
-+      </enum>
-+      <enum name='bus'>
-+        <value>ide</value>
-+        <value>fdc</value>
-+        <value>scsi</value>
-+        <value>virtio</value>
-+        <value>usb</value>
-+        <value>sata</value>
-+      </enum>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+    </disk>
-+    <graphics supported='yes'>
-+      <enum name='type'>
-+        <value>sdl</value>
-+        <value>vnc</value>
-+        <value>spice</value>
-+      </enum>
-+    </graphics>
-+    <video supported='yes'>
-+      <enum name='modelType'>
-+        <value>vga</value>
-+        <value>cirrus</value>
-+        <value>vmvga</value>
-+        <value>qxl</value>
-+        <value>virtio</value>
-+        <value>none</value>
-+        <value>bochs</value>
-+        <value>ramfb</value>
-+      </enum>
-+    </video>
-+    <hostdev supported='yes'>
-+      <enum name='mode'>
-+        <value>subsystem</value>
-+      </enum>
-+      <enum name='startupPolicy'>
-+        <value>default</value>
-+        <value>mandatory</value>
-+        <value>requisite</value>
-+        <value>optional</value>
-+      </enum>
-+      <enum name='subsysType'>
-+        <value>usb</value>
-+        <value>pci</value>
-+        <value>scsi</value>
-+      </enum>
-+      <enum name='capsType'/>
-+      <enum name='pciBackend'>
-+        <value>default</value>
-+        <value>vfio</value>
-+      </enum>
-+    </hostdev>
-+    <rng supported='yes'>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+      <enum name='backendModel'>
-+        <value>random</value>
-+        <value>egd</value>
-+      </enum>
-+    </rng>
-+  </devices>
-+  <features>
-+    <gic supported='no'/>
-+    <vmcoreinfo supported='yes'/>
-+    <genid supported='yes'/>
-+    <backingStoreInput supported='yes'/>
-+    <backup supported='no'/>
-+    <sev supported='no'/>
-+  </features>
-+</domainCapabilities>
-diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.replies
-index 73a99a36ea..c75d4ab8a7 100644
---- a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.replies
-+++ b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.replies
-@@ -4895,10 +4895,120 @@
- }
- 
- {
--  "execute": "query-machines",
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-   "id": "libvirt-29"
- }
- 
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-29"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-30"
-+}
-+
- {
-   "return": [
-     {
-@@ -5163,12 +5273,12 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-29"
-+  "id": "libvirt-30"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -5334,34 +5444,34 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6506,12 +6616,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -6561,12 +6671,12 @@
-       "capability": "return-path"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -16289,12 +16399,12 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-gic-capabilities",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -16310,7 +16420,7 @@
-       "kernel": true
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.replies
-index 8f96b4c567..d5deea9b3c 100644
---- a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.replies
-@@ -4448,10 +4448,120 @@
- }
- 
- {
--  "execute": "query-machines",
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-   "id": "libvirt-35"
- }
- 
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-36"
-+}
-+
- {
-   "return": [
-     {
-@@ -4638,12 +4748,12 @@
-       "alias": "q35"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4978,36 +5088,36 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-     "tpm-tis"
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "return": [
-     "passthrough"
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -6286,12 +6396,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -6341,12 +6451,12 @@
-       "capability": "return-path"
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -16069,7 +16179,7 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -16080,7 +16190,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -16259,7 +16369,7 @@
-       }
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -16440,7 +16550,7 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -16683,7 +16793,7 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -16697,7 +16807,7 @@
-       }
-     }
-   },
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -16876,7 +16986,7 @@
-       }
-     }
-   },
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -17057,7 +17167,7 @@
-       }
-     }
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-@@ -17300,7 +17410,7 @@
-       }
-     }
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies
-index d91f01b55d..75ca78f75e 100644
---- a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.replies
-@@ -4475,10 +4475,120 @@
- }
- 
- {
--  "execute": "query-machines",
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-   "id": "libvirt-35"
- }
- 
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-36"
-+}
-+
- {
-   "return": [
-     {
-@@ -4665,12 +4775,12 @@
-       "cpu-max": 288
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4984,24 +5094,24 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-     "tpm-tis"
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -5009,12 +5119,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -6309,12 +6419,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -6372,12 +6482,12 @@
-       "capability": "x-multifd"
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -16245,7 +16355,7 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -16256,7 +16366,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -16436,7 +16546,7 @@
-       }
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -16618,7 +16728,7 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -16863,7 +16973,7 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -16877,7 +16987,7 @@
-       }
-     }
-   },
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -17057,7 +17167,7 @@
-       }
-     }
-   },
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -17239,7 +17349,7 @@
-       }
-     }
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-@@ -17484,7 +17594,7 @@
-       }
-     }
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
-index 87414a9bca..b99913ed37 100644
---- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
-+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.replies
-@@ -5251,12 +5251,122 @@
-   "id": "libvirt-28"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-29"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-29"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-29"
-+  "id": "libvirt-30"
- }
- 
- {
-@@ -5310,7 +5420,7 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-29"
-+  "id": "libvirt-30"
- }
- 
- {
-@@ -5318,7 +5428,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -5372,7 +5482,7 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -5380,7 +5490,7 @@
-   "arguments": {
-     "typename": "max-arm-cpu"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5495,12 +5605,12 @@
-       "type": "child<irq>"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -5797,7 +5907,7 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -5805,7 +5915,7 @@
-   "arguments": {
-     "typename": "virt-2.12-machine"
-   },
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -5935,12 +6045,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -6116,35 +6226,35 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-     "emulator"
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -7309,12 +7419,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -7376,12 +7486,12 @@
-       "capability": "dirty-bitmaps"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -18749,12 +18859,12 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-gic-capabilities",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -18770,7 +18880,7 @@
-       "kernel": false
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies
-index b4c243096b..1e3ba0885a 100644
---- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.replies
-@@ -4641,12 +4641,122 @@
-   "id": "libvirt-34"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -4700,7 +4810,7 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -4708,7 +4818,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4758,7 +4868,7 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4766,7 +4876,7 @@
-   "arguments": {
-     "typename": "max-x86_64-cpu"
-   },
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -5788,12 +5898,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -5992,12 +6102,12 @@
-       "cpu-max": 255
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -6511,12 +6621,12 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -6524,12 +6634,12 @@
-     "tpm-crb",
-     "tpm-tis"
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -6537,12 +6647,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -7829,12 +7939,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -7896,12 +8006,12 @@
-       "capability": "dirty-bitmaps"
-     }
-   ],
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -19269,12 +19379,12 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-   "execute": "query-sev-capabilities",
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-@@ -19284,7 +19394,7 @@
-     "cert-chain": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA",
-     "pdh": "AQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAAAQAAAAAOAAA"
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-@@ -19295,7 +19405,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -19485,7 +19595,7 @@
-       }
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -19677,7 +19787,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -19932,7 +20042,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -19946,7 +20056,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -20136,7 +20246,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -20328,7 +20438,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-@@ -20583,7 +20693,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
-index 8f32313b46..5cff9c485b 100644
---- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
-@@ -3992,10 +3992,120 @@
- }
- 
- {
--  "execute": "query-machines",
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-   "id": "libvirt-35"
- }
- 
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-36"
-+}
-+
- {
-   "return": [
-     {
-@@ -4172,12 +4282,12 @@
-       "cpu-max": 255
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4459,36 +4569,36 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-     "tpm-tis"
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "return": [
-     "passthrough"
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -5737,12 +5847,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -5784,12 +5894,12 @@
-       "capability": "release-ram"
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -15075,7 +15185,7 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -15086,7 +15196,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -15265,7 +15375,7 @@
-       }
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -15446,7 +15556,7 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -15687,7 +15797,7 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -15701,7 +15811,7 @@
-       }
-     }
-   },
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -15880,7 +15990,7 @@
-       }
-     }
-   },
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -16061,7 +16171,7 @@
-       }
-     }
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-@@ -16302,7 +16412,7 @@
-       }
-     }
-   },
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
-index f25e5deb94..c683f672f7 100644
---- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.replies
-@@ -4776,12 +4776,122 @@
- }
- 
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -4831,7 +4941,7 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -4839,7 +4949,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4889,7 +4999,7 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4897,7 +5007,7 @@
-   "arguments": {
-     "typename": "max-x86_64-cpu"
-   },
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -5951,12 +6061,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -6165,12 +6275,12 @@
-       "cpu-max": 255
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -6607,12 +6717,12 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -6620,12 +6730,12 @@
-     "tpm-crb",
-     "tpm-tis"
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -6633,12 +6743,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -7937,12 +8047,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -8012,12 +8122,12 @@
-       "capability": "late-block-activate"
-     }
-   ],
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -19897,16 +20007,16 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-   "execute": "query-sev-capabilities",
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
--  "id": "libvirt-45",
-+  "id": "libvirt-46",
-   "error": {
-     "class": "GenericError",
-     "desc": "SEV feature is not available"
-@@ -19921,7 +20031,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -20114,7 +20224,7 @@
-       }
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -20309,7 +20419,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -20572,7 +20682,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -20586,7 +20696,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -20779,7 +20889,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -20974,7 +21084,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-@@ -21237,7 +21347,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.replies
-index 256fa92af9..e0e1edddf1 100644
---- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.replies
-@@ -4818,12 +4818,122 @@
-   "id": "libvirt-34"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -4884,7 +4994,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -4892,7 +5002,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4952,7 +5062,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -4960,7 +5070,7 @@
-   "arguments": {
-     "typename": "max-x86_64-cpu"
-   },
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -6062,12 +6172,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -6286,12 +6396,12 @@
-       "cpu-max": 255
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -6810,12 +6920,12 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -6823,12 +6933,12 @@
-     "tpm-crb",
-     "tpm-tis"
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -6836,12 +6946,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -8115,12 +8225,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -8190,12 +8300,12 @@
-       "capability": "late-block-activate"
-     }
-   ],
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -20380,16 +20490,16 @@
-       "meta-type": "object"
-     }
-   ],
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-   "execute": "query-sev-capabilities",
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
--  "id": "libvirt-45",
-+  "id": "libvirt-46",
-   "error": {
-     "class": "GenericError",
-     "desc": "SEV feature is not available"
-@@ -20404,7 +20514,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -20606,7 +20716,7 @@
-       }
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -20810,7 +20920,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -21085,7 +21195,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -21099,7 +21209,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -21301,7 +21411,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -21505,7 +21615,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-@@ -21780,7 +21890,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.replies
-index 0eca77acca..ddd77ba48a 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.replies
-@@ -5718,12 +5718,122 @@
-   "id": "libvirt-29"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-30"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-30"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -5788,7 +5898,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -5796,7 +5906,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5860,7 +5970,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5868,7 +5978,7 @@
-   "arguments": {
-     "typename": "max-arm-cpu"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -5983,12 +6093,12 @@
-       "type": "child<irq>"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6330,7 +6440,7 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6338,7 +6448,7 @@
-   "arguments": {
-     "typename": "virt-4.0-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -6473,12 +6583,12 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -6669,34 +6779,34 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -7844,12 +7954,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -7923,12 +8033,12 @@
-       "capability": "x-ignore-shared"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -20015,12 +20125,12 @@
-       ]
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-gic-capabilities",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -20036,7 +20146,7 @@
-       "kernel": false
-     }
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.replies
-index 84b5f06c5d..356e12aa01 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.replies
-@@ -5773,12 +5773,122 @@
-   "id": "libvirt-30"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-31"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5843,7 +5953,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5851,7 +5961,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -5915,12 +6025,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6073,7 +6183,7 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6081,7 +6191,7 @@
-   "arguments": {
-     "typename": "pseries-4.0-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -6280,12 +6390,12 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -8481,34 +8591,34 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -9651,12 +9761,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -9730,12 +9840,12 @@
-       "capability": "x-ignore-shared"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -21793,7 +21903,7 @@
-       ]
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.replies b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.replies
-index 2b1d832c6b..2d63851d3a 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.replies
-@@ -3892,12 +3892,122 @@
-   "id": "libvirt-30"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-31"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -3962,7 +4072,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -3970,7 +4080,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -4034,12 +4144,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -4076,7 +4186,7 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -4084,7 +4194,7 @@
-   "arguments": {
-     "typename": "virt-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -4189,34 +4299,34 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -5488,12 +5598,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -5567,12 +5677,12 @@
-       "capability": "x-ignore-shared"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -17851,12 +17961,12 @@
-       ]
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -17893,5 +18003,5 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.replies b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.replies
-index 8fd9646f53..4df475d7c0 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.replies
-@@ -3892,12 +3892,122 @@
-   "id": "libvirt-30"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-31a"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -3962,7 +4072,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -3970,7 +4080,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -4034,12 +4144,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -4076,7 +4186,7 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -4084,7 +4194,7 @@
-   "arguments": {
-     "typename": "virt-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -4189,34 +4299,34 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -5488,12 +5598,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -5567,12 +5677,12 @@
-       "capability": "x-ignore-shared"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -17851,12 +17961,12 @@
-       ]
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -17893,5 +18003,5 @@
-       "cpu-max": 1
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
-diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.replies
-index 09112a207f..8ac67e0b75 100644
---- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.replies
-@@ -5043,12 +5043,122 @@
-   "id": "libvirt-34"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -5113,7 +5223,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -5121,7 +5231,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -5185,7 +5295,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -5193,7 +5303,7 @@
-   "arguments": {
-     "typename": "max-x86_64-cpu"
-   },
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -6311,12 +6421,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -6535,12 +6645,12 @@
-       "alias": "q35"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -7057,12 +7167,12 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -7070,12 +7180,12 @@
-     "tpm-crb",
-     "tpm-tis"
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -7083,12 +7193,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -8370,12 +8480,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -8449,12 +8559,12 @@
-       "capability": "x-ignore-shared"
-     }
-   ],
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -20919,16 +21029,16 @@
-       ]
-     }
-   ],
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-   "execute": "query-sev-capabilities",
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
--  "id": "libvirt-45",
-+  "id": "libvirt-46",
-   "error": {
-     "class": "GenericError",
-     "desc": "SEV feature is not available"
-@@ -20943,7 +21053,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -21147,7 +21257,7 @@
-       }
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -21353,7 +21463,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -21632,7 +21742,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -21646,7 +21756,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -21850,7 +21960,7 @@
-       }
-     }
-   },
--  "id": "libvirt-48"
-+  "id": "libvirt-49"
- }
- 
- {
-@@ -22056,7 +22166,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-@@ -22335,7 +22445,7 @@
-       }
-     }
-   },
--  "id": "libvirt-49"
-+  "id": "libvirt-50"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.replies
-index c143866dcc..5c3c706651 100644
---- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.replies
-@@ -5336,12 +5336,122 @@
-   "id": "libvirt-34"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -5406,7 +5516,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -5414,7 +5524,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -5478,7 +5588,7 @@
-       "type": "int"
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -5486,7 +5596,7 @@
-   "arguments": {
-     "typename": "max-x86_64-cpu"
-   },
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -6651,12 +6761,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -6980,12 +7090,12 @@
-       "deprecated": false
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -8130,12 +8240,12 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -8143,12 +8253,12 @@
-     "tpm-crb",
-     "tpm-tis"
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -8156,12 +8266,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -9435,12 +9545,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -9514,12 +9624,12 @@
-       "capability": "x-ignore-shared"
-     }
-   ],
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -22104,16 +22214,16 @@
-       ]
-     }
-   ],
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-   "execute": "query-sev-capabilities",
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
--  "id": "libvirt-45",
-+  "id": "libvirt-46",
-   "error": {
-     "class": "GenericError",
-     "desc": "SEV feature is not available"
-@@ -22128,7 +22238,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -22336,7 +22446,7 @@
-       }
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -22350,7 +22460,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -22558,7 +22668,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.replies
-index e5d5b53667..4d28047ebe 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.replies
-@@ -6090,12 +6090,122 @@
-   "id": "libvirt-29"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-30"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-30"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -6160,7 +6270,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -6168,7 +6278,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -6232,7 +6342,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -6240,7 +6350,7 @@
-   "arguments": {
-     "typename": "max-arm-cpu"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -6427,12 +6537,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6990,7 +7100,7 @@
-       "deprecated": false
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6998,7 +7108,7 @@
-   "arguments": {
-     "typename": "virt-4.2-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -7151,12 +7261,12 @@
-       "type": "child<cfi.pflash01>"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -7347,34 +7457,34 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -8542,12 +8652,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -8625,12 +8735,12 @@
-       "capability": "validate-uuid"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -21201,12 +21311,12 @@
-       ]
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-gic-capabilities",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -21222,7 +21332,7 @@
-       "kernel": false
-     }
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -21233,7 +21343,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -21263,7 +21373,7 @@
-       }
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -21277,11 +21387,11 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
--  "id": "libvirt-43",
-+  "id": "libvirt-44",
-   "error": {
-     "class": "GenericError",
-     "desc": "Parameter 'migratable' is unexpected"
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies
-index 2414105e25..95ec00a651 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.replies
-@@ -5895,12 +5895,122 @@
-   "id": "libvirt-30"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-31"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5965,7 +6075,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -5973,7 +6083,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -6037,12 +6147,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6304,7 +6414,7 @@
-       "deprecated": false
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -6312,7 +6422,7 @@
-   "arguments": {
-     "typename": "pseries-4.2-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -6511,12 +6621,12 @@
-       "type": "string"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -8712,34 +8822,34 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -9878,12 +9988,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -9961,12 +10071,12 @@
-       "capability": "validate-uuid"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -22195,7 +22305,7 @@
-       ]
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.replies
-index b9481b6f85..c09ebb5460 100644
---- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.replies
-+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.replies
-@@ -5576,12 +5576,122 @@
-   "id": "libvirt-34"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -5646,7 +5756,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -5654,7 +5764,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -5718,7 +5828,7 @@
-       "type": "int"
-     }
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-@@ -5726,7 +5836,7 @@
-   "arguments": {
-     "typename": "max-x86_64-cpu"
-   },
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-@@ -7280,12 +7390,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -7677,12 +7787,12 @@
-       "deprecated": false
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -9065,12 +9175,12 @@
-       "migration-safe": true
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -9078,12 +9188,12 @@
-     "tpm-crb",
-     "tpm-tis"
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -9091,12 +9201,12 @@
-     "passthrough",
-     "emulator"
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -10382,12 +10492,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-@@ -10465,12 +10575,12 @@
-       "capability": "validate-uuid"
-     }
-   ],
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-@@ -23389,16 +23499,16 @@
-       ]
-     }
-   ],
--  "id": "libvirt-44"
-+  "id": "libvirt-45"
- }
- 
- {
-   "execute": "query-sev-capabilities",
--  "id": "libvirt-45"
-+  "id": "libvirt-46"
- }
- 
- {
--  "id": "libvirt-45",
-+  "id": "libvirt-46",
-   "error": {
-     "class": "GenericError",
-     "desc": "SEV feature is not available"
-@@ -23413,7 +23523,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -23715,7 +23825,7 @@
-       }
-     }
-   },
--  "id": "libvirt-46"
-+  "id": "libvirt-47"
- }
- 
- {
-@@ -23729,7 +23839,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-@@ -24031,7 +24141,7 @@
-       }
-     }
-   },
--  "id": "libvirt-47"
-+  "id": "libvirt-48"
- }
- 
- {
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies
-index a3136a0966..067cbb7e31 100644
---- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies
-@@ -6476,12 +6476,122 @@
-   "id": "libvirt-29"
- }
- 
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-30"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "command_serr_enable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "io-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-30"
-+}
-+
- {
-   "execute": "qom-list-properties",
-   "arguments": {
-     "typename": "memory-backend-file"
-   },
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -6546,7 +6656,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-30"
-+  "id": "libvirt-31"
- }
- 
- {
-@@ -6554,7 +6664,7 @@
-   "arguments": {
-     "typename": "memory-backend-memfd"
-   },
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -6618,7 +6728,7 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-31"
-+  "id": "libvirt-32"
- }
- 
- {
-@@ -6626,7 +6736,7 @@
-   "arguments": {
-     "typename": "max-arm-cpu"
-   },
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-@@ -6826,12 +6936,12 @@
-       "type": "bool"
-     }
-   ],
--  "id": "libvirt-32"
-+  "id": "libvirt-33"
- }
- 
- {
-   "execute": "query-machines",
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -7411,7 +7521,7 @@
-       "deprecated": false
-     }
-   ],
--  "id": "libvirt-33"
-+  "id": "libvirt-34"
- }
- 
- {
-@@ -7419,7 +7529,7 @@
-   "arguments": {
-     "typename": "virt-5.0-machine"
-   },
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-@@ -7557,12 +7667,12 @@
-       "type": "child<cfi.pflash01>"
-     }
-   ],
--  "id": "libvirt-34"
-+  "id": "libvirt-35"
- }
- 
- {
-   "execute": "query-cpu-definitions",
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-@@ -7758,34 +7868,34 @@
-       "static": false
-     }
-   ],
--  "id": "libvirt-35"
-+  "id": "libvirt-36"
- }
- 
- {
-   "execute": "query-tpm-models",
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-36"
-+  "id": "libvirt-37"
- }
- 
- {
-   "execute": "query-tpm-types",
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "return": [
-   ],
--  "id": "libvirt-37"
-+  "id": "libvirt-38"
- }
- 
- {
-   "execute": "query-command-line-options",
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-@@ -8943,12 +9053,12 @@
-       "option": "drive"
-     }
-   ],
--  "id": "libvirt-38"
-+  "id": "libvirt-39"
- }
- 
- {
-   "execute": "query-migrate-capabilities",
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-@@ -9026,12 +9136,12 @@
-       "capability": "validate-uuid"
-     }
-   ],
--  "id": "libvirt-39"
-+  "id": "libvirt-40"
- }
- 
- {
-   "execute": "query-qmp-schema",
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-@@ -21768,12 +21878,12 @@
-       ]
-     }
-   ],
--  "id": "libvirt-40"
-+  "id": "libvirt-41"
- }
- 
- {
-   "execute": "query-gic-capabilities",
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -21789,7 +21899,7 @@
-       "kernel": false
-     }
-   ],
--  "id": "libvirt-41"
-+  "id": "libvirt-42"
- }
- 
- {
-@@ -21800,7 +21910,7 @@
-       "name": "host"
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -21831,7 +21941,7 @@
-       }
-     }
-   },
--  "id": "libvirt-42"
-+  "id": "libvirt-43"
- }
- 
- {
-@@ -21845,11 +21955,11 @@
-       }
-     }
-   },
--  "id": "libvirt-43"
-+  "id": "libvirt-44"
- }
- 
- {
--  "id": "libvirt-43",
-+  "id": "libvirt-44",
-   "error": {
-     "class": "GenericError",
-     "desc": "Parameter 'migratable' is unexpected"
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies
-new file mode 100644
-index 0000000000..af2299a41e
---- /dev/null
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies
-@@ -0,0 +1,28673 @@
-+{
-+  "execute": "qmp_capabilities",
-+  "id": "libvirt-1"
-+}
-+
-+{
-+  "return": {
-+  },
-+  "id": "libvirt-1"
-+}
-+
-+{
-+  "execute": "query-version",
-+  "id": "libvirt-2"
-+}
-+
-+{
-+  "return": {
-+    "qemu": {
-+      "micro": 91,
-+      "minor": 2,
-+      "major": 4
-+    },
-+    "package": "v5.0.0-rc1"
-+  },
-+  "id": "libvirt-2"
-+}
-+
-+{
-+  "execute": "query-target",
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "return": {
-+    "arch": "x86_64"
-+  },
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "execute": "query-commands",
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "object-add"
-+    },
-+    {
-+      "name": "device_add"
-+    },
-+    {
-+      "name": "query-qmp-schema"
-+    },
-+    {
-+      "name": "query-sev-capabilities"
-+    },
-+    {
-+      "name": "query-sev-launch-measure"
-+    },
-+    {
-+      "name": "query-sev"
-+    },
-+    {
-+      "name": "rtc-reset-reinjection"
-+    },
-+    {
-+      "name": "query-vm-generation-id"
-+    },
-+    {
-+      "name": "xen-load-devices-state"
-+    },
-+    {
-+      "name": "query-acpi-ospm-status"
-+    },
-+    {
-+      "name": "query-memory-devices"
-+    },
-+    {
-+      "name": "query-command-line-options"
-+    },
-+    {
-+      "name": "query-fdsets"
-+    },
-+    {
-+      "name": "remove-fd"
-+    },
-+    {
-+      "name": "add-fd"
-+    },
-+    {
-+      "name": "query-memory-size-summary"
-+    },
-+    {
-+      "name": "closefd"
-+    },
-+    {
-+      "name": "getfd"
-+    },
-+    {
-+      "name": "xen-set-global-dirty-log"
-+    },
-+    {
-+      "name": "change"
-+    },
-+    {
-+      "name": "human-monitor-command"
-+    },
-+    {
-+      "name": "balloon"
-+    },
-+    {
-+      "name": "inject-nmi"
-+    },
-+    {
-+      "name": "system_wakeup"
-+    },
-+    {
-+      "name": "x-exit-preconfig"
-+    },
-+    {
-+      "name": "cont"
-+    },
-+    {
-+      "name": "pmemsave"
-+    },
-+    {
-+      "name": "memsave"
-+    },
-+    {
-+      "name": "system_powerdown"
-+    },
-+    {
-+      "name": "system_reset"
-+    },
-+    {
-+      "name": "stop"
-+    },
-+    {
-+      "name": "query-pci"
-+    },
-+    {
-+      "name": "query-balloon"
-+    },
-+    {
-+      "name": "query-iothreads"
-+    },
-+    {
-+      "name": "query-uuid"
-+    },
-+    {
-+      "name": "query-kvm"
-+    },
-+    {
-+      "name": "query-name"
-+    },
-+    {
-+      "name": "add_client"
-+    },
-+    {
-+      "name": "query-cpu-definitions"
-+    },
-+    {
-+      "name": "query-cpu-model-expansion"
-+    },
-+    {
-+      "name": "set-numa-node"
-+    },
-+    {
-+      "name": "query-hotpluggable-cpus"
-+    },
-+    {
-+      "name": "query-memdev"
-+    },
-+    {
-+      "name": "query-target"
-+    },
-+    {
-+      "name": "query-current-machine"
-+    },
-+    {
-+      "name": "query-machines"
-+    },
-+    {
-+      "name": "cpu-add"
-+    },
-+    {
-+      "name": "query-cpus-fast"
-+    },
-+    {
-+      "name": "query-cpus"
-+    },
-+    {
-+      "name": "device_del"
-+    },
-+    {
-+      "name": "device-list-properties"
-+    },
-+    {
-+      "name": "object-del"
-+    },
-+    {
-+      "name": "qom-list-properties"
-+    },
-+    {
-+      "name": "qom-list-types"
-+    },
-+    {
-+      "name": "qom-set"
-+    },
-+    {
-+      "name": "qom-get"
-+    },
-+    {
-+      "name": "qom-list"
-+    },
-+    {
-+      "name": "quit"
-+    },
-+    {
-+      "name": "query-events"
-+    },
-+    {
-+      "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": "query-display-options"
-+    },
-+    {
-+      "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": "announce-self"
-+    },
-+    {
-+      "name": "query-rx-filter"
-+    },
-+    {
-+      "name": "netdev_del"
-+    },
-+    {
-+      "name": "netdev_add"
-+    },
-+    {
-+      "name": "set_link"
-+    },
-+    {
-+      "name": "query-dump-guest-memory-capability"
-+    },
-+    {
-+      "name": "query-dump"
-+    },
-+    {
-+      "name": "dump-guest-memory"
-+    },
-+    {
-+      "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": "query-jobs"
-+    },
-+    {
-+      "name": "job-finalize"
-+    },
-+    {
-+      "name": "job-dismiss"
-+    },
-+    {
-+      "name": "job-complete"
-+    },
-+    {
-+      "name": "job-cancel"
-+    },
-+    {
-+      "name": "job-resume"
-+    },
-+    {
-+      "name": "job-pause"
-+    },
-+    {
-+      "name": "blockdev-snapshot-delete-internal-sync"
-+    },
-+    {
-+      "name": "blockdev-snapshot-internal-sync"
-+    },
-+    {
-+      "name": "nbd-server-stop"
-+    },
-+    {
-+      "name": "nbd-server-remove"
-+    },
-+    {
-+      "name": "nbd-server-add"
-+    },
-+    {
-+      "name": "nbd-server-start"
-+    },
-+    {
-+      "name": "x-blockdev-set-iothread"
-+    },
-+    {
-+      "name": "x-blockdev-change"
-+    },
-+    {
-+      "name": "block-set-write-threshold"
-+    },
-+    {
-+      "name": "blockdev-create"
-+    },
-+    {
-+      "name": "blockdev-del"
-+    },
-+    {
-+      "name": "x-blockdev-reopen"
-+    },
-+    {
-+      "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": "blockdev-mirror"
-+    },
-+    {
-+      "name": "x-debug-block-dirty-bitmap-sha256"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-merge"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-disable"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-enable"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-clear"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-remove"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-add"
-+    },
-+    {
-+      "name": "drive-mirror"
-+    },
-+    {
-+      "name": "x-debug-query-block-graph"
-+    },
-+    {
-+      "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": "block-latency-histogram-set"
-+    },
-+    {
-+      "name": "block_set_io_throttle"
-+    },
-+    {
-+      "name": "blockdev-change-medium"
-+    },
-+    {
-+      "name": "blockdev-insert-medium"
-+    },
-+    {
-+      "name": "blockdev-remove-medium"
-+    },
-+    {
-+      "name": "blockdev-close-tray"
-+    },
-+    {
-+      "name": "blockdev-open-tray"
-+    },
-+    {
-+      "name": "eject"
-+    },
-+    {
-+      "name": "query-pr-managers"
-+    },
-+    {
-+      "name": "watchdog-set-action"
-+    },
-+    {
-+      "name": "query-status"
-+    }
-+  ],
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "execute": "query-kvm",
-+  "id": "libvirt-5"
-+}
-+
-+{
-+  "return": {
-+    "enabled": true,
-+    "present": true
-+  },
-+  "id": "libvirt-5"
-+}
-+
-+{
-+  "execute": "qom-list-types",
-+  "id": "libvirt-6"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "ich9-usb-uhci5",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "pcie-pci-bridge",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "pc-q35-2.11-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "isa-applesmc",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "Westmere-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-user-input-pci",
-+      "parent": "vhost-user-input-pci-base-type"
-+    },
-+    {
-+      "name": "floppy-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "chardev-stdio",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "chardev-testdev",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "usb-redir",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "Denverton-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "filter-buffer",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "usb-wacom-tablet",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "pci-bridge",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "pci-ipmi-bt",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Icelake-Server-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ich9-usb-uhci6",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "secondary-vga",
-+      "parent": "pci-vga"
-+    },
-+    {
-+      "name": "virtio-rng-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "Haswell-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "rtl8139",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "core2duo-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "kvm-pit",
-+      "parent": "pit-common"
-+    },
-+    {
-+      "name": "pc-i440fx-3.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "sev-guest",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "virtio-crypto-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "pcm3680_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-blk-pci-transitional",
-+      "parent": "virtio-blk-pci-base"
-+    },
-+    {
-+      "name": "pc-q35-2.5-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "max-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vmware-svga",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "tpm-crb",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "kvm-ioapic",
-+      "parent": "ioapic-common"
-+    },
-+    {
-+      "name": "virtio-mmio-bus",
-+      "parent": "virtio-bus"
-+    },
-+    {
-+      "name": "serial",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "ich9-usb-uhci4",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "gus",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "usb-hub",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "ich9-usb-ehci2",
-+      "parent": "pci-ehci-usb"
-+    },
-+    {
-+      "name": "virtio-blk-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "ich9-usb-uhci3",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "Icelake-Client-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "chardev-wctablet",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "Westmere-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Opteron_G5-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ich9-usb-uhci2",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "pc-i440fx-2.8-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "chardev-serial",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "qtest-accel",
-+      "parent": "accel"
-+    },
-+    {
-+      "name": "chardev-pty",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "ich9-usb-uhci1",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "PCIE",
-+      "parent": "PCI"
-+    },
-+    {
-+      "name": "pc-i440fx-5.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "scsi-generic",
-+      "parent": "scsi-device"
-+    },
-+    {
-+      "name": "Icelake-Client-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "kvmclock",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "x3130-upstream",
-+      "parent": "pcie-port"
-+    },
-+    {
-+      "name": "pxb-host",
-+      "parent": "pci-host-bridge"
-+    },
-+    {
-+      "name": "memory-backend-ram",
-+      "parent": "memory-backend"
-+    },
-+    {
-+      "name": "virtio-serial-pci-transitional",
-+      "parent": "virtio-serial-pci-base"
-+    },
-+    {
-+      "name": "e1000e",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "n270-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Cooperlake-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "scsi-disk",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "chardev-file",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "tpm-passthrough",
-+      "parent": "tpm-backend"
-+    },
-+    {
-+      "name": "pentium3-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "virtio-serial-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "usb-host",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "tulip",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "piix3-ide",
-+      "parent": "pci-ide"
-+    },
-+    {
-+      "name": "filter-rewriter",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "pc-i440fx-4.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pc-1.2-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "vhost-scsi-pci",
-+      "parent": "vhost-scsi-pci-base"
-+    },
-+    {
-+      "name": "isa-ipmi-bt",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "virtio-gpu-pci",
-+      "parent": "virtio-gpu-pci-base-type"
-+    },
-+    {
-+      "name": "pci-ipmi-kcs",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "imx-usdhc",
-+      "parent": "generic-sdhci"
-+    },
-+    {
-+      "name": "xio3130-downstream",
-+      "parent": "pcie-slot"
-+    },
-+    {
-+      "name": "intel-iommu-iommu-memory-region",
-+      "parent": "qemu:iommu-memory-region"
-+    },
-+    {
-+      "name": "pc-i440fx-2.3-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "sdhci-bus",
-+      "parent": "sd-bus"
-+    },
-+    {
-+      "name": "PCI",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "microvm-machine",
-+      "parent": "x86-machine"
-+    },
-+    {
-+      "name": "ICH9-LPC",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pci-serial-2x",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "igd-passthrough-isa-bridge",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-9p-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "virtio-scsi-pci",
-+      "parent": "virtio-scsi-pci-base"
-+    },
-+    {
-+      "name": "ipmi-bmc-extern",
-+      "parent": "ipmi-bmc"
-+    },
-+    {
-+      "name": "authz-list-file",
-+      "parent": "authz"
-+    },
-+    {
-+      "name": "pc-q35-4.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "usb-audio",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "usb-net",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "EPYC-Rome-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qemu32-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Skylake-Client-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-vsock-pci-non-transitional",
-+      "parent": "vhost-vsock-pci-base"
-+    },
-+    {
-+      "name": "isa-debug-exit",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "KnightsMill-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vfio-pci-nohotplug",
-+      "parent": "vfio-pci"
-+    },
-+    {
-+      "name": "i2c-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "Skylake-Server-v3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "mch",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "ich9-usb-ehci1",
-+      "parent": "pci-ehci-usb"
-+    },
-+    {
-+      "name": "virtio-input-host-pci",
-+      "parent": "virtio-input-host-pci-base-type"
-+    },
-+    {
-+      "name": "nvdimm",
-+      "parent": "pc-dimm"
-+    },
-+    {
-+      "name": "pc-q35-3.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "virtio-9p-pci-transitional",
-+      "parent": "virtio-9p-pci-base"
-+    },
-+    {
-+      "name": "Opteron_G1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "serial-mm",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pr-manager-helper",
-+      "parent": "pr-manager"
-+    },
-+    {
-+      "name": "pc-i440fx-2.10-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "i82557c",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pxb-pcie",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Haswell-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "virtio-scsi-device",
-+      "parent": "virtio-scsi-common"
-+    },
-+    {
-+      "name": "input-barrier",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "cpu-cluster",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "i82557b",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "generic-sdhci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "migration",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "i82557a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vhost-user-scsi-pci-non-transitional",
-+      "parent": "vhost-user-scsi-pci-base"
-+    },
-+    {
-+      "name": "chardev-udp",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "pc-q35-2.8-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "vmmouse",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "usb-tablet",
-+      "parent": "usb-hid"
-+    },
-+    {
-+      "name": "virtio-scsi-pci-non-transitional",
-+      "parent": "virtio-scsi-pci-base"
-+    },
-+    {
-+      "name": "Haswell-v3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "athlon-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "chardev-memory",
-+      "parent": "chardev-ringbuf"
-+    },
-+    {
-+      "name": "EPYC-Rome-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "virtio-mouse-pci",
-+      "parent": "virtio-mouse-pci-base-type"
-+    },
-+    {
-+      "name": "pc-q35-5.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pc-i440fx-1.6-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "vhost-user-vga",
-+      "parent": "vhost-user-vga-base-type"
-+    },
-+    {
-+      "name": "Opteron_G2-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Broadwell-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "usb-braille",
-+      "parent": "usb-serial-dev"
-+    },
-+    {
-+      "name": "EPYC-IBPB-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ib700",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "amd-iommu",
-+      "parent": "x86-iommu"
-+    },
-+    {
-+      "name": "virtio-9p-pci-non-transitional",
-+      "parent": "virtio-9p-pci-base"
-+    },
-+    {
-+      "name": "Nehalem-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "memory-backend-file",
-+      "parent": "memory-backend"
-+    },
-+    {
-+      "name": "isa-pcspk",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "vhost-vsock-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "sd-card",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "isabus-bridge",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "sysbus-ahci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-scsi",
-+      "parent": "vhost-scsi-common"
-+    },
-+    {
-+      "name": "pc-q35-4.0.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "esp",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-blk-pci-non-transitional",
-+      "parent": "virtio-blk-pci-base"
-+    },
-+    {
-+      "name": "ne2k_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "IvyBridge-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "usb-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "ide-cd",
-+      "parent": "ide-device"
-+    },
-+    {
-+      "name": "tcg-accel",
-+      "parent": "accel"
-+    },
-+    {
-+      "name": "virtio-balloon-pci",
-+      "parent": "virtio-balloon-pci-base"
-+    },
-+    {
-+      "name": "qemu:memory-region",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "virtio-gpu-device",
-+      "parent": "virtio-gpu-base"
-+    },
-+    {
-+      "name": "e1000",
-+      "parent": "e1000-base"
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "athlon-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "nec-usb-xhci",
-+      "parent": "base-xhci"
-+    },
-+    {
-+      "name": "pc-i440fx-2.6-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "i82551",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "isa-ipmi-kcs",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "EPYC-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "SandyBridge-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "piix4-ide",
-+      "parent": "pci-ide"
-+    },
-+    {
-+      "name": "nvme",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vmxnet3",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vhost-user-backend",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "mioe3680_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "i82550",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Conroe-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ES1370",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "kvm-apic",
-+      "parent": "apic-common"
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "isa-pit",
-+      "parent": "pit-common"
-+    },
-+    {
-+      "name": "kvm64-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Broadwell-v4-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "memory-backend-memfd",
-+      "parent": "memory-backend"
-+    },
-+    {
-+      "name": "smbus-eeprom",
-+      "parent": "smbus-device"
-+    },
-+    {
-+      "name": "virtio-serial-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "Denverton-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-user-gpu-pci",
-+      "parent": "vhost-user-gpu-pci-base-type"
-+    },
-+    {
-+      "name": "virtio-crypto-pci",
-+      "parent": "virtio-crypto-pci-base-type"
-+    },
-+    {
-+      "name": "iothread",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "i8042",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "System",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "virtio-iommu-pci-transitional",
-+      "parent": "virtio-iommu-device-base"
-+    },
-+    {
-+      "name": "pc-1.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "ati-vga",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pentium3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "kvm-i8259",
-+      "parent": "pic-common"
-+    },
-+    {
-+      "name": "isa-serial",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "imx.usbphy",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "core2duo-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "cirrus-vga",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "kvm32-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-i440fx-2.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "Skylake-Client-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "i82559er",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-rng-pci-non-transitional",
-+      "parent": "virtio-rng-pci-base"
-+    },
-+    {
-+      "name": "virtio-serial-pci",
-+      "parent": "virtio-serial-pci-base"
-+    },
-+    {
-+      "name": "Opteron_G3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "am53c974",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "container",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "EPYC-v3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "scsi-cd",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "486-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vmport",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "vhost-user-blk-pci-non-transitional",
-+      "parent": "vhost-user-blk-pci-base"
-+    },
-+    {
-+      "name": "isa-ide",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "qemu64-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "e1000-82545em",
-+      "parent": "e1000-base"
-+    },
-+    {
-+      "name": "virtio-serial-pci-non-transitional",
-+      "parent": "virtio-serial-pci-base"
-+    },
-+    {
-+      "name": "ICH9 SMB",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "sdhci-pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pxb-pcie-bus",
-+      "parent": "PCIE"
-+    },
-+    {
-+      "name": "vhost-user-scsi",
-+      "parent": "vhost-scsi-common"
-+    },
-+    {
-+      "name": "PIIX4_PM",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-rng-pci-transitional",
-+      "parent": "virtio-rng-pci-base"
-+    },
-+    {
-+      "name": "EPYC-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "usb-bot",
-+      "parent": "usb-storage-dev"
-+    },
-+    {
-+      "name": "pc-q35-2.12-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "VGA",
-+      "parent": "pci-vga"
-+    },
-+    {
-+      "name": "qio-channel-buffer",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "i440FX",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Penryn-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-vsock-pci-transitional",
-+      "parent": "vhost-vsock-pci-base"
-+    },
-+    {
-+      "name": "hpet",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "Conroe-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-user-fs-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "pc-i440fx-3.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pci-serial-4x",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Icelake-Server-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "apic",
-+      "parent": "apic-common"
-+    },
-+    {
-+      "name": "sga",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "Opteron_G5-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-q35-2.6-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pci-ohci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-tablet-device",
-+      "parent": "virtio-input-hid-device"
-+    },
-+    {
-+      "name": "Haswell-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ccid-card-passthru",
-+      "parent": "ccid-card"
-+    },
-+    {
-+      "name": "pc-i440fx-1.4-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "chardev-parallel",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "chardev-vc",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "cryptodev-backend",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "isapc-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "ide-drive",
-+      "parent": "ide-device"
-+    },
-+    {
-+      "name": "cryptodev-vhost-user",
-+      "parent": "cryptodev-backend"
-+    },
-+    {
-+      "name": "tpm-emulator",
-+      "parent": "tpm-backend"
-+    },
-+    {
-+      "name": "i8257",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "usb-uas",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "IvyBridge-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "SandyBridge-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-i440fx-2.9-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "ivshmem-plain",
-+      "parent": "ivshmem-common"
-+    },
-+    {
-+      "name": "virtio-keyboard-pci",
-+      "parent": "virtio-keyboard-pci-base-type"
-+    },
-+    {
-+      "name": "pcnet",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Dhyana-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "sysbus-fdc",
-+      "parent": "base-sysbus-fdc"
-+    },
-+    {
-+      "name": "i82559c",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "AMDVI-PCI",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "filter-redirector",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "virtserialport",
-+      "parent": "virtio-serial-port"
-+    },
-+    {
-+      "name": "ipoctal232",
-+      "parent": "ipack-device"
-+    },
-+    {
-+      "name": "usb-mouse",
-+      "parent": "usb-hid"
-+    },
-+    {
-+      "name": "Nehalem-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "i82559b",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "ccid-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "ide-hd",
-+      "parent": "ide-device"
-+    },
-+    {
-+      "name": "Broadwell-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Snowridge-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "kvaser_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vhost-user-scsi-pci",
-+      "parent": "vhost-user-scsi-pci-base"
-+    },
-+    {
-+      "name": "i82559a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "dbus-vmstate",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "pc-i440fx-4.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pc-1.3-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "chardev-spiceport",
-+      "parent": "chardev-spice"
-+    },
-+    {
-+      "name": "e1000-82544gc",
-+      "parent": "e1000-base"
-+    },
-+    {
-+      "name": "qio-channel-command",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "Opteron_G3-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "usb-ccid",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "tls-creds-x509",
-+      "parent": "tls-creds"
-+    },
-+    {
-+      "name": "virtio-blk-pci",
-+      "parent": "virtio-blk-pci-base"
-+    },
-+    {
-+      "name": "pc-i440fx-2.4-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "port92",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "isa-cirrus-vga",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "qemu64-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Skylake-Server-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qio-net-listener",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "pc-q35-4.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "mc146818rtc",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "vfio-pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "bochs-display",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Broadwell-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qio-channel-websock",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "edu",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pc-testdev",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "SUNW,fdtwo",
-+      "parent": "base-sysbus-fdc"
-+    },
-+    {
-+      "name": "megasas",
-+      "parent": "megasas-base"
-+    },
-+    {
-+      "name": "vmcoreinfo",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "virtio-iommu-pci",
-+      "parent": "virtio-iommu-device-base"
-+    },
-+    {
-+      "name": "Icelake-Client-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "tpci200",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "chardev-braille",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "rocker",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "qio-channel-file",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "gpio_i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "qio-channel-socket",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "filter-mirror",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "coreduo-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-q35-3.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "Icelake-Server-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qemu-console",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "input-linux",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "Haswell-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pxb",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "usb-ehci",
-+      "parent": "pci-ehci-usb"
-+    },
-+    {
-+      "name": "host-x86_64-cpu",
-+      "parent": "max-x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-i440fx-2.11-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "AC97",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vmgenid",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "serial-io",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "secret",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "virtio-net-pci-non-transitional",
-+      "parent": "virtio-net-pci-base"
-+    },
-+    {
-+      "name": "cs4231a",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "chardev-socket",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "scsi-hd",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "usb-kbd",
-+      "parent": "usb-hid"
-+    },
-+    {
-+      "name": "lsi53c810",
-+      "parent": "lsi53c895a"
-+    },
-+    {
-+      "name": "isa-fdc",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "usb-mtp",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "filter-replay",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "virtio-net-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "pc-q35-2.9-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "tpm-tis",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "hyperv-testdev",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "s3c-sdhci",
-+      "parent": "generic-sdhci"
-+    },
-+    {
-+      "name": "fw_cfg_mem",
-+      "parent": "fw_cfg"
-+    },
-+    {
-+      "name": "virtio-iommu-pci-non-transitional",
-+      "parent": "virtio-iommu-device-base"
-+    },
-+    {
-+      "name": "ccid-card-emulated",
-+      "parent": "ccid-card"
-+    },
-+    {
-+      "name": "Westmere-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-i440fx-1.7-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "virtio-pmem",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "virtio-mouse-device",
-+      "parent": "virtio-input-hid-device"
-+    },
-+    {
-+      "name": "virtconsole",
-+      "parent": "virtserialport"
-+    },
-+    {
-+      "name": "ioh3420",
-+      "parent": "pcie-root-port-base"
-+    },
-+    {
-+      "name": "Skylake-Client-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "throttle-group",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "piix4-usb-uhci",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "pc-q35-2.10-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "virtio-rng-pci",
-+      "parent": "virtio-rng-pci-base"
-+    },
-+    {
-+      "name": "chardev-gdb",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "virtio-scsi-pci-transitional",
-+      "parent": "virtio-scsi-pci-base"
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pci-testdev",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vhost-user-input",
-+      "parent": "virtio-input-device"
-+    },
-+    {
-+      "name": "vt82c686b-usb-uhci",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "ich9-intel-hda",
-+      "parent": "intel-hda-generic"
-+    },
-+    {
-+      "name": "PIIX3",
-+      "parent": "pci-piix3"
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-q35-2.4-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "virtio-9p-pci",
-+      "parent": "virtio-9p-pci-base"
-+    },
-+    {
-+      "name": "ISA",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "phenom-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-vsock-pci",
-+      "parent": "vhost-vsock-pci-base"
-+    },
-+    {
-+      "name": "pc-dimm",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "virtio-balloon-pci-non-transitional",
-+      "parent": "virtio-balloon-pci-base"
-+    },
-+    {
-+      "name": "virtio-net-pci-transitional",
-+      "parent": "virtio-net-pci-base"
-+    },
-+    {
-+      "name": "ipmi-bmc-sim",
-+      "parent": "ipmi-bmc"
-+    },
-+    {
-+      "name": "IvyBridge-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "irq",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "tls-creds-psk",
-+      "parent": "tls-creds"
-+    },
-+    {
-+      "name": "coreduo-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "usb-storage",
-+      "parent": "usb-storage-dev"
-+    },
-+    {
-+      "name": "vhost-user-blk-pci-transitional",
-+      "parent": "vhost-user-blk-pci-base"
-+    },
-+    {
-+      "name": "chardev-msmouse",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "pc-i440fx-2.7-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "vhost-scsi-pci-transitional",
-+      "parent": "vhost-scsi-pci-base"
-+    },
-+    {
-+      "name": "isa-i8259",
-+      "parent": "pic-common"
-+    },
-+    {
-+      "name": "Skylake-Client-v3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "colo-compare",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "virtio-mmio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxb-bus",
-+      "parent": "PCI"
-+    },
-+    {
-+      "name": "pentium2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Broadwell-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qemu-xhci",
-+      "parent": "base-xhci"
-+    },
-+    {
-+      "name": "n270-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pvpanic",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "rng-random",
-+      "parent": "rng-backend"
-+    },
-+    {
-+      "name": "KnightsMill-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "kvmvapic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "Nehalem-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Opteron_G2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "megasas-gen2",
-+      "parent": "megasas-base"
-+    },
-+    {
-+      "name": "vhost-user-blk-pci",
-+      "parent": "vhost-user-blk-pci-base"
-+    },
-+    {
-+      "name": "authz-simple",
-+      "parent": "authz"
-+    },
-+    {
-+      "name": "fw_cfg_io",
-+      "parent": "fw_cfg"
-+    },
-+    {
-+      "name": "intel-iommu",
-+      "parent": "x86-iommu"
-+    },
-+    {
-+      "name": "none-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "HDA",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "Broadwell-noTSX-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-1.1-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "Snowridge-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "IvyBridge-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qxl",
-+      "parent": "pci-qxl"
-+    },
-+    {
-+      "name": "cryptodev-backend-builtin",
-+      "parent": "cryptodev-backend"
-+    },
-+    {
-+      "name": "vfio-pci-igd-lpc-bridge",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-i440fx-2.2-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "qio-dns-resolver",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "virtio-balloon-pci-transitional",
-+      "parent": "virtio-balloon-pci-base"
-+    },
-+    {
-+      "name": "Haswell-v4-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "i82801b11-bridge",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "virtio-keyboard-device",
-+      "parent": "virtio-input-hid-device"
-+    },
-+    {
-+      "name": "ramfb",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "hda-output",
-+      "parent": "hda-audio"
-+    },
-+    {
-+      "name": "virtio-input-host-device",
-+      "parent": "virtio-input-device"
-+    },
-+    {
-+      "name": "IndustryPack",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "Broadwell-v3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ioapic",
-+      "parent": "ioapic-common"
-+    },
-+    {
-+      "name": "pentium-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qemu32-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Haswell-noTSX-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pci-serial",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "sysbus-ohci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "kvm-accel",
-+      "parent": "accel"
-+    },
-+    {
-+      "name": "vhost-scsi-pci-non-transitional",
-+      "parent": "vhost-scsi-pci-base"
-+    },
-+    {
-+      "name": "Denverton-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "piix3-usb-uhci",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "Opteron_G4-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "ne2k_isa",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "virtio-iommu-memory-region",
-+      "parent": "qemu:iommu-memory-region"
-+    },
-+    {
-+      "name": "phenom-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "adlib",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "vhost-user-gpu",
-+      "parent": "virtio-gpu-base"
-+    },
-+    {
-+      "name": "hda-duplex",
-+      "parent": "hda-audio"
-+    },
-+    {
-+      "name": "pentium-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "amd-iommu-iommu-memory-region",
-+      "parent": "qemu:iommu-memory-region"
-+    },
-+    {
-+      "name": "can-bus",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "Nehalem-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "cfi.pflash01",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-balloon-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "Skylake-Server-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Cooperlake-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-q35-2.7-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "isa-parallel",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "pentium2-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "chardev-null",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "isa-vga",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "EPYC-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pc-i440fx-1.5-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "i440FX-pcihost",
-+      "parent": "pci-host-bridge"
-+    },
-+    {
-+      "name": "isa-debugcon",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "tls-creds-anon",
-+      "parent": "tls-creds"
-+    },
-+    {
-+      "name": "rng-egd",
-+      "parent": "rng-backend"
-+    },
-+    {
-+      "name": "ivshmem-doorbell",
-+      "parent": "ivshmem-common"
-+    },
-+    {
-+      "name": "i82558b",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "Cascadelake-Server-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qxl-vga",
-+      "parent": "pci-qxl"
-+    },
-+    {
-+      "name": "virtio-iommu-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "PIIX3-xen",
-+      "parent": "pci-piix3"
-+    },
-+    {
-+      "name": "virtio-net-pci",
-+      "parent": "virtio-net-pci-base"
-+    },
-+    {
-+      "name": "i82558a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "usb-serial",
-+      "parent": "usb-serial-dev"
-+    },
-+    {
-+      "name": "loader",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "pvscsi",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "i82801",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-pmem-pci",
-+      "parent": "virtio-pmem-pci-base"
-+    },
-+    {
-+      "name": "accel",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "virtio-tablet-pci",
-+      "parent": "virtio-tablet-pci-base-type"
-+    },
-+    {
-+      "name": "dc390",
-+      "parent": "am53c974"
-+    },
-+    {
-+      "name": "i6300esb",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "floppy",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "authz-list",
-+      "parent": "authz"
-+    },
-+    {
-+      "name": "pc-i440fx-4.2-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "Opteron_G4-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "mptsas1068",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vhost-user-fs-pci",
-+      "parent": "vhost-user-fs-pci-base"
-+    },
-+    {
-+      "name": "sb16",
-+      "parent": "isa-device"
-+    },
-+    {
-+      "name": "ich9-ahci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pc-i440fx-2.5-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "Westmere-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-user-scsi-pci-transitional",
-+      "parent": "vhost-user-scsi-pci-base"
-+    },
-+    {
-+      "name": "chardev-pipe",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "i2c-ddc",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "can-host-socketcan",
-+      "parent": "can-host"
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "i82562",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pc-q35-4.2-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pci-bridge-seat",
-+      "parent": "pci-bridge"
-+    },
-+    {
-+      "name": "lsi53c895a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "kvm32-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "SandyBridge-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "intel-hda",
-+      "parent": "intel-hda-generic"
-+    },
-+    {
-+      "name": "scsi-block",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "hyperv-synic",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "chardev-mux",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "Opteron_G1-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "IDE",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "486-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "pcie-root-port",
-+      "parent": "pcie-root-port-base"
-+    },
-+    {
-+      "name": "base-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "kvm64-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Snowridge-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "chardev-spicevmc",
-+      "parent": "chardev-spice"
-+    },
-+    {
-+      "name": "q35-pcihost",
-+      "parent": "pcie-host-bridge"
-+    },
-+    {
-+      "name": "pc-i440fx-2.0-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "pc-i440fx-2.12-machine",
-+      "parent": "generic-pc-machine"
-+    },
-+    {
-+      "name": "SCSI",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "hda-micro",
-+      "parent": "hda-audio"
-+    },
-+    {
-+      "name": "Penryn-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "Dhyana-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "piix3-ide-xen",
-+      "parent": "pci-ide"
-+    },
-+    {
-+      "name": "rng-builtin",
-+      "parent": "rng-backend"
-+    },
-+    {
-+      "name": "sd-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "filter-dump",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "virtio-pci-bus",
-+      "parent": "virtio-bus"
-+    },
-+    {
-+      "name": "smbus-ipmi",
-+      "parent": "smbus-device"
-+    },
-+    {
-+      "name": "chardev-ringbuf",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "Skylake-Server-v1-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "vhost-user-blk",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "SandyBridge-v2-x86_64-cpu",
-+      "parent": "x86_64-cpu"
-+    },
-+    {
-+      "name": "qio-channel-tls",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "virtio-vga",
-+      "parent": "virtio-vga-base-type"
-+    },
-+    {
-+      "name": "authz-pam",
-+      "parent": "authz"
-+    }
-+  ],
-+  "id": "libvirt-6"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-blk-pci"
-+  },
-+  "id": "libvirt-7"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "class",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "queue-size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lcyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lsecs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "heads",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lheads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "num-queues",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "secs",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-blk-device>"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "config-wce",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "seg-max-adjust",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "scsi",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 4194303,
-+      "name": "max-discard-sectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "discard",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "request-merging",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "write-zeroes",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4194303,
-+      "name": "max-write-zeroes-sectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-enable-wce-if-config-wce",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    }
-+  ],
-+  "id": "libvirt-7"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-net-pci"
-+  },
-+  "id": "libvirt-8"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 3,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mac",
-+      "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "gso",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 150000,
-+      "name": "x-txtimer",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "mq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "mrg_rxbuf",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "x-txburst",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "host_mtu",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "tx",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "status",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "failover",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-net-device>"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_mac_addr",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "tx_queue_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_tso4",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_tso6",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_guest_offloads",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_ufo",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_ecn",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_ufo",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_ecn",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "guest_rsc_ext",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "duplex",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 300000,
-+      "name": "rsc_interval",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_announce",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "netdev",
-+      "description": "ID of a netdev to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_tso4",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-mtu-bypass-backend",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_rx_extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_csum",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "rx_queue_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_vlan",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_tso6",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "speed",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "csum",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_rx",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-8"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-scsi-pci"
-+  },
-+  "id": "libvirt-9"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "hotplug",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "num_queues",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 65535,
-+      "name": "max_sectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "param_change",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "virtqueue_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "seg_max_adjust",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 128,
-+      "name": "cmd_per_lun",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-scsi-device>"
-+    }
-+  ],
-+  "id": "libvirt-9"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-net-ccw"
-+  },
-+  "id": "libvirt-10"
-+}
-+
-+{
-+  "id": "libvirt-10",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-net-ccw' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-scsi-ccw"
-+  },
-+  "id": "libvirt-11"
-+}
-+
-+{
-+  "id": "libvirt-11",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-scsi-ccw' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-net-s390"
-+  },
-+  "id": "libvirt-12"
-+}
-+
-+{
-+  "id": "libvirt-12",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-net-s390' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "vfio-pci"
-+  },
-+  "id": "libvirt-13"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-mmap",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-vga",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "off",
-+      "name": "x-msix-relocation",
-+      "description": "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
-+      "type": "OffAutoPCIBAR"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-vfio-ioeventfd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sysfsdev",
-+      "type": "str"
-+    },
-+    {
-+      "name": "host",
-+      "description": "Address (bus/device/function) of the host device, example: 04:10.0",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-device-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-msi",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-sub-vendor-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-geforce-quirks",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-req",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "x-igd-gms",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 1100,
-+      "name": "x-intx-mmap-timeout-ms",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-intx",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-ioeventfd",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-sub-device-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "off",
-+      "name": "display",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-igd-opregion",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "x-nv-gpudirect-clique",
-+      "description": "NVIDIA GPUDirect Clique ID (0 - 15)",
-+      "type": "uint4"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-vendor-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-balloon-allowed",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-13"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "scsi-hd"
-+  },
-+  "id": "libvirt-14"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 4294967295,
-+      "name": "scsi-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "lun",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "channel",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lsecs",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "device_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 2147483647,
-+      "name": "max_io_size",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "dpofua",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lheads",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "name": "ver",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 5,
-+      "name": "scsi_version",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "removable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "wwn",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "heads",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "vendor",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 1073741824,
-+      "name": "max_unmap_size",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lcyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "product",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "secs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "rotation_rate",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "port_wwn",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "port_index",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-14"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "ide-hd"
-+  },
-+  "id": "libvirt-15"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 4294967295,
-+      "name": "unit",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lsecs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "rotation_rate",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lheads",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "name": "ver",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "wwn",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "heads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lcyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "bios-chs-trans",
-+      "description": "Logical CHS translation algorithm, auto/none/lba/large/rechs",
-+      "type": "BiosAtaTranslation"
-+    },
-+    {
-+      "name": "model",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "secs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-15"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "PIIX4_PM"
-+  },
-+  "id": "libvirt-16"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "acpi-pci-hotplug-with-bridge-support",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "smb_io_base",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 2,
-+      "name": "s4_val",
-+      "type": "uint8"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "disable_s3",
-+      "type": "uint8"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "memory-hotplug-support",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "disable_s4",
-+      "type": "uint8"
-+    }
-+  ],
-+  "id": "libvirt-16"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "usb-redir"
-+  },
-+  "id": "libvirt-17"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": true,
-+      "name": "full-path",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "msos-desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "name": "filter",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "streams",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "chardev",
-+      "description": "ID of a chardev to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 2,
-+      "name": "debug",
-+      "type": "uint8"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "suppress-remote-wake",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "attached",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-17"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "i440FX-pcihost"
-+  },
-+  "id": "libvirt-18"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 2147483648,
-+      "name": "pci-hole64-size",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "short_root_bus",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pci-hole64-fix",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pci-hole-end",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "pci-hole64-start",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "pci-hole64-end",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "pci-conf-idx[0]",
-+      "type": "child<qemu:memory-region>"
-+    },
-+    {
-+      "name": "pci-conf-data[0]",
-+      "type": "child<qemu:memory-region>"
-+    },
-+    {
-+      "name": "pci-hole-start",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-18"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "q35-pcihost"
-+  },
-+  "id": "libvirt-19"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 34359738368,
-+      "name": "pci-hole64-size",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "below-4g-mem-size",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "short_root_bus",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pci-hole64-fix",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 2952790016,
-+      "name": "MCFG",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "above-4g-mem-size",
-+      "type": "size"
-+    },
-+    {
-+      "name": "mcfg_size",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "pci-hole64-end",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "pci-mem",
-+      "type": "link<qemu:memory-region>"
-+    },
-+    {
-+      "name": "pci-conf-data[0]",
-+      "type": "child<qemu:memory-region>"
-+    },
-+    {
-+      "name": "pci-hole-start",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "system-mem",
-+      "type": "link<qemu:memory-region>"
-+    },
-+    {
-+      "name": "io-mem",
-+      "type": "link<qemu:memory-region>"
-+    },
-+    {
-+      "name": "mch",
-+      "type": "child<mch>"
-+    },
-+    {
-+      "name": "pci-hole-end",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "pci-conf-idx[0]",
-+      "type": "child<qemu:memory-region>"
-+    },
-+    {
-+      "name": "pci-hole64-start",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "ram-mem",
-+      "type": "link<qemu:memory-region>"
-+    },
-+    {
-+      "name": "pcie-mmcfg-mmio[0]",
-+      "type": "child<qemu:memory-region>"
-+    }
-+  ],
-+  "id": "libvirt-19"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "usb-storage"
-+  },
-+  "id": "libvirt-20"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": true,
-+      "name": "full-path",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "msos-desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "removable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "attached",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-20"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "kvm-pit"
-+  },
-+  "id": "libvirt-21"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": "delay",
-+      "name": "lost_tick_policy",
-+      "type": "LostTickPolicy"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "iobase",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-21"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "VGA"
-+  },
-+  "id": "libvirt-22"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "global-vmstate",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "vgamem_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "qemu-extended-regs",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "mmio",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "ymax",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xmax",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "edid",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "big-endian-framebuffer",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-22"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "vmware-svga"
-+  },
-+  "id": "libvirt-23"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "global-vmstate",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "vgamem_mb",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-23"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "qxl"
-+  },
-+  "id": "libvirt-24"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "global-vmstate",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "vgamem_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "vram64_size_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "vram_size_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "debug",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "max_outputs",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 5,
-+      "name": "revision",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cmdlog",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "ram_size_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 67108864,
-+      "name": "ram_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 67108864,
-+      "name": "vram_size",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "guestdebug",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 1024,
-+      "name": "surfaces",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-24"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-gpu-pci"
-+  },
-+  "id": "libvirt-25"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 3,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 768,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "stats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "edid",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 268435456,
-+      "name": "max_hostmem",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "max_outputs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "virgl",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1024,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-gpu-device>"
-+    }
-+  ],
-+  "id": "libvirt-25"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-gpu-device"
-+  },
-+  "id": "libvirt-26"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1024,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "stats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "edid",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 768,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "max_outputs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 268435456,
-+      "name": "max_hostmem",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "virgl",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-26"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "ICH9-LPC"
-+  },
-+  "id": "libvirt-27"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "noreboot",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-smi-broadcast",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "enable_tco",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cpu-hotplug-legacy",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "acpi_enable_cmd",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "disable_s3",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "disable_s4",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "acpi_disable_cmd",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "memory-hotplug-support",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "gpe0_blk_len",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "sci_int",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "gpe0_blk",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "s4_val",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "pm_io_base",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-27"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-balloon-pci"
-+  },
-+  "id": "libvirt-28"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "class",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "guest-stats",
-+      "type": "guest statistics"
-+    },
-+    {
-+      "name": "guest-stats-polling-interval",
-+      "type": "int"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-balloon-device>"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "free-page-hint",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "qemu-4-0-config-size",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "deflate-on-oom",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-28"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-balloon-ccw"
-+  },
-+  "id": "libvirt-29"
-+}
-+
-+{
-+  "id": "libvirt-29",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-balloon-ccw' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-balloon-device"
-+  },
-+  "id": "libvirt-30"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "deflate-on-oom",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "free-page-hint",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "qemu-4-0-config-size",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "guest-stats-polling-interval",
-+      "type": "int"
-+    },
-+    {
-+      "name": "guest-stats",
-+      "type": "guest statistics"
-+    }
-+  ],
-+  "id": "libvirt-30"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "nec-usb-xhci"
-+  },
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4,
-+      "name": "p3",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "streams",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4,
-+      "name": "p2",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "msi",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "msix",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "force-pcie-endcap",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "superspeed-ports-first",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "intrs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 64,
-+      "name": "slots",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "intel-iommu"
-+  },
-+  "id": "libvirt-32"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": true,
-+      "name": "pt",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "device-iotlb",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "intremap",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "dma-drain",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "caching-mode",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-buggy-eim",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-scalable-mode",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 39,
-+      "name": "aw-bits",
-+      "type": "uint8"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "eim",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "version",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-32"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "mch"
-+  },
-+  "id": "libvirt-33"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "smbase-smram",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "extended-tseg-mbytes",
-+      "type": "uint16"
-+    }
-+  ],
-+  "id": "libvirt-33"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "nvdimm"
-+  },
-+  "id": "libvirt-34"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "memdev",
-+      "type": "link<memory-backend>"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "node",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "addr",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "slot",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "unarmed",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "uuid",
-+      "type": "QemuUUID"
-+    },
-+    {
-+      "name": "label-size",
-+      "type": "int"
-+    },
-+    {
-+      "name": "size",
-+      "type": "uint64"
-+    }
-+  ],
-+  "id": "libvirt-34"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "pcie-root-port"
-+  },
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "port",
-+      "type": "uint8"
-+    },
-+    {
-+      "default-value": 8,
-+      "name": "aer_log_max",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "hotplug",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "slot",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "chassis",
-+      "type": "uint8"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "power_controller_present",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-acs",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 18446744073709551615,
-+      "name": "mem-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 18446744073709551615,
-+      "name": "pref64-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "bus-reserve",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "32",
-+      "name": "x-width",
-+      "description": "1/2/4/8/12/16/32",
-+      "type": "PCIELinkWidth"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-migrate-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 18446744073709551615,
-+      "name": "io-reserve",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": "16",
-+      "name": "x-speed",
-+      "description": "2_5/5/8/16",
-+      "type": "PCIELinkSpeed"
-+    },
-+    {
-+      "default-value": 18446744073709551615,
-+      "name": "pref32-reserve",
-+      "type": "size"
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "memory-backend-file"
-+  },
-+  "id": "libvirt-36"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "type",
-+      "type": "string"
-+    },
-+    {
-+      "name": "share",
-+      "description": "Mark the memory as private to QEMU or shared",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "dump",
-+      "description": "Set to 'off' to exclude from core dump",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "prealloc-threads",
-+      "description": "Number of CPU threads to use for prealloc",
-+      "type": "int"
-+    },
-+    {
-+      "name": "x-use-canonical-path-for-ramblock-id",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "policy",
-+      "description": "Set the NUMA policy",
-+      "type": "HostMemPolicy"
-+    },
-+    {
-+      "name": "size",
-+      "description": "Size of the memory region (ex: 500M)",
-+      "type": "int"
-+    },
-+    {
-+      "name": "prealloc",
-+      "description": "Preallocate memory",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host-nodes",
-+      "description": "Binds memory to the list of NUMA host nodes",
-+      "type": "int"
-+    },
-+    {
-+      "name": "merge",
-+      "description": "Mark memory as mergeable",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "align",
-+      "type": "int"
-+    },
-+    {
-+      "name": "pmem",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mem-path",
-+      "type": "string"
-+    },
-+    {
-+      "name": "discard-data",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-36"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "memory-backend-memfd"
-+  },
-+  "id": "libvirt-37"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "type",
-+      "type": "string"
-+    },
-+    {
-+      "name": "share",
-+      "description": "Mark the memory as private to QEMU or shared",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "dump",
-+      "description": "Set to 'off' to exclude from core dump",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "prealloc-threads",
-+      "description": "Number of CPU threads to use for prealloc",
-+      "type": "int"
-+    },
-+    {
-+      "name": "x-use-canonical-path-for-ramblock-id",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "policy",
-+      "description": "Set the NUMA policy",
-+      "type": "HostMemPolicy"
-+    },
-+    {
-+      "name": "size",
-+      "description": "Size of the memory region (ex: 500M)",
-+      "type": "int"
-+    },
-+    {
-+      "name": "prealloc",
-+      "description": "Preallocate memory",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host-nodes",
-+      "description": "Binds memory to the list of NUMA host nodes",
-+      "type": "int"
-+    },
-+    {
-+      "name": "merge",
-+      "description": "Mark memory as mergeable",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hugetlb",
-+      "description": "Use huge pages",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "seal",
-+      "description": "Seal growing & shrinking",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hugetlbsize",
-+      "description": "Huge pages size (ex: 2M, 1G)",
-+      "type": "int"
-+    }
-+  ],
-+  "id": "libvirt-37"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "max-x86_64-cpu"
-+  },
-+  "id": "libvirt-38"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "type",
-+      "type": "string"
-+    },
-+    {
-+      "name": "parent_bus",
-+      "type": "link<bus>"
-+    },
-+    {
-+      "name": "realized",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hotplugged",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hotpluggable",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "memory",
-+      "type": "link<qemu:memory-region>"
-+    },
-+    {
-+      "name": "legacy-memory",
-+      "type": "str"
-+    },
-+    {
-+      "name": "fill-mtrr-mask",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host-phys-bits-limit",
-+      "type": "uint8"
-+    },
-+    {
-+      "name": "x-force-features",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-vpindex",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "apic-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "min-xlevel",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "enforce",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-runtime",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "level",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "hv-tlbflush",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "core-id",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "hv-crash",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-reset",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-no-nonarch-coresharing",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "name": "hv-spinlocks",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "pmu",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "socket-id",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "hv-relaxed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "thread-id",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "tcg-cpuid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "die-id",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "node-id",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "vmware-cpuid-freq",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "min-xlevel2",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "hv-stimer",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "x-hv-max-vps",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "legacy-cache",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "x-migrate-smi-count",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-reenlightenment",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-vendor-id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "x-hv-synic-kvm-only",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "min-level",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "phys-bits",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "l3-cache",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "level-func7",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "lmce",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-passthrough",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-no-smi-migration",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xlevel2",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "hv-stimer-direct",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ucode-rev",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "xlevel",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "host-phys-bits",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "check",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-time",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "full-cpuid-auto-level",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-synic",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-evmcs",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-ipi",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-vapic",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cpuid-0xb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hv-frequencies",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "x-intel-pt-auto-level",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host-cache-info",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "migratable",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invept-single-context",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "core-capability",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "popcnt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_mmu",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "dtes64",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4_1",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invvpid-single-addr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xstore",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "stepping",
-+      "type": "int"
-+    },
-+    {
-+      "name": "vmx-vmfunc",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pse36",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512-4vnniw",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fma4",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-poll-control",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_nopiodelay",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "amd-stibp",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "family",
-+      "type": "int"
-+    },
-+    {
-+      "name": "pclmuldq",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-store-lma",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "erms",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vaes",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-activity-wait-sipi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-flexpriority",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rdrand",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ept-advanced-exitinfo",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-pause-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-shadow-vmcs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "model",
-+      "type": "int"
-+    },
-+    {
-+      "name": "avx512-vpopcntdq",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tbm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xcrypt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "lm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-pv-eoi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-monitor-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-eptad",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pae",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ssse3",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "phe",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-unrestricted-guest",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "movdiri",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "taa-no",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "perfctr_nb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "arat",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512vbmi2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "perfctr_core",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_asyncpf",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "x2apic",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "npt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512ifma",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_poll_control",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "model-id",
-+      "type": "string"
-+    },
-+    {
-+      "name": "vmx-vnmi-pending",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invpcid-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-io-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pmm-en",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ins-outs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "dca",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-apicv-x2apic",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ia64",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "perfctr-core",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-cr3-load-noexit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvmclock",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-entry-noload-debugctl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "invtsc",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pn",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512cd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "md-clear",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cmp-legacy",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cx16",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512dq",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "abm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-activity-shutdown",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-pv-ipi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-apicv-register",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fxsr-opt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "skip-l1dfl-vmentry",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pcid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rdpid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "wbnoinvd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "filtered-features",
-+      "type": "X86CPUFeatureWordInfo"
-+    },
-+    {
-+      "name": "syscall",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pse",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc_scale",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mce",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xsaves",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-entry-load-pat",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ibpb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-apicv-xapic",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cldemote",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rtm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "lwp",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-steal-time",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-hlt-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-entry-load-efer",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "nrip_save",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invlpg-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-save-efer",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-eptp-switching",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vme",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-pv-unhalt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-desc-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_pv_unhalt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "svm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "lahf-lm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invvpid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-hint-dedicated",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mca",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mtrr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmcb_clean",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pfthreshold",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pmm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pbe",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-entry-ia32e-mode",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-rdpmc-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "split-lock-detect",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fpu",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "skinit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sep",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512-bf16",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-rdtscp-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "nx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invvpid-all-context",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ds-cpl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pause-filter",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pause_filter",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-vmwrite-vmexit-fields",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ept",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "nodeid-msr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "smap",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-io-bitmap",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-intr-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fxsr_opt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cr8legacy",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cmp_legacy",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-zero-len-inject",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virt-ssbd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pschange-mc-no",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "umip",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512er",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-vpid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xstore-en",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512vl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invept-single-context-noglobals",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cmov",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rsba",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-posted-intr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xcrypt-en",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tm2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-clear-bndcfgs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ept-execonly",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-load-efer",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xsaveerptr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fsgsbase",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512bw",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-vintr-pending",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "smx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-secondary-ctls",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "lbrv",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc-frequency",
-+      "type": "int"
-+    },
-+    {
-+      "name": "hle",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "monitor",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tce",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4a",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vpclmulqdq",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc-scale",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-pv-tlb-flush",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mds-no",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-cr8-load-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-activity-hlt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "i64",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "adx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invept-all-context",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ffxsr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "amd-no-ssb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "crash-information",
-+      "type": "GuestPanicInformation"
-+    },
-+    {
-+      "name": "vmx-entry-load-bndcfgs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "svm_lock",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "msr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pclmulqdq",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-preemption-timer",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "clflush",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ssb-no",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mpx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "extapic",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-vnmi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xop",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-rdseed-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "smep",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-mwait-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-rdtsc-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "cx8",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xsavec",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pku",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4-2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-mtf",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmcb-clean",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-load-pat",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "stibp",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-cr3-store-noexit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsx-ctrl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "svm-lock",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4-1",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "lahf_lm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_pv_eoi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "clzero",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ds",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "osvw",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm_steal_time",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-true-ctls",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "movdir64b",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-invept",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "acpi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "nodeid_msr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ept-1gb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "nrip-save",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "gfni",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ds_cpl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse3",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-mmu",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512bitalg",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rdseed",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sha-ni",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ace2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "waitpkg",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-rdrand-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "f16c",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "3dnowprefetch",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-encls-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "topoext",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rdctl-no",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mmx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512-4fmaps",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-cr8-store-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512vnni",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pni",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "movbe",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mmxext",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ple",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-apicv-vid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "flushbyasid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rdtscp",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "clwb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-asyncpf",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-pv-sched-yield",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "decodeassists",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pat",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "invpcid",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pdpe1gb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-save-pat",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc-adjust",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-entry-load-rtit-ctl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ht",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "clflushopt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc_adjust",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-tsc-offset",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ssbd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-clear-rtit-ctl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "3dnowext",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xtpr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pdcm",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xsave",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unavailable-features",
-+      "type": "strList"
-+    },
-+    {
-+      "name": "est",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pge",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vendor",
-+      "type": "string"
-+    },
-+    {
-+      "name": "pcommit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ibs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tsc-deadline",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvmclock-stable-bit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "misalignsse",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-msr-bitmap",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "perfctr-nb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "feature-words",
-+      "type": "X86CPUFeatureWordInfo"
-+    },
-+    {
-+      "name": "apic",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512vbmi",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-nosave-debugctl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512f",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-save-preemption-timer",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "arch-capabilities",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "bmi2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-pml",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-nmi-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "intel-pt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "wdt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ace2-en",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "avx512pf",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "bmi1",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-page-walk-5",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "kvm-nopiodelay",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4.2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-ept-2mb",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-load-perf-global-ctrl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "3dnow",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-wbinvd-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "la57",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-page-walk-4",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4.1",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ibrs-all",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xgetbv1",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "xsaveopt",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "spec-ctrl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-entry-load-perf-global-ctrl",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-exit-ack-intr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-xsaves",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "phe-en",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fxsr",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hypervisor",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aes",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "amd-ssbd",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sse4_2",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "de",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "ss",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "vmx-movdr-exit",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "fma",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-38"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-39"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.12",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.5",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-4.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.5",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "none",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.4",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.10",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.9",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.11",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-3.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.4",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.3",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-4.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.9",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "isapc",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "486-x86_64-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.4",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-3.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.12",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.0.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-5.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false,
-+      "alias": "q35"
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.8",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.10",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-3.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "microvm",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.3",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-4.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-5.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "is-default": true,
-+      "cpu-max": 255,
-+      "deprecated": false,
-+      "alias": "pc"
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.8",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.5",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-3.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.11",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    }
-+  ],
-+  "id": "libvirt-39"
-+}
-+
-+{
-+  "execute": "query-cpu-definitions",
-+  "id": "libvirt-40"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "qemu64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32",
-+      "typename": "qemu32-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "qemu32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom",
-+      "typename": "phenom-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "3dnowext",
-+        "3dnow",
-+        "sse4a",
-+        "npt"
-+      ],
-+      "alias-of": "phenom-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "pentium3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2",
-+      "typename": "pentium2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "pentium2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium-v1",
-+      "typename": "pentium-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium",
-+      "typename": "pentium-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "pentium-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270-v1",
-+      "typename": "n270-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270",
-+      "typename": "n270-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "n270-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64-v1",
-+      "typename": "kvm64-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64",
-+      "typename": "kvm64-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "kvm64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32-v1",
-+      "typename": "kvm32-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32",
-+      "typename": "kvm32-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "kvm32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo-v1",
-+      "typename": "coreduo-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo",
-+      "typename": "coreduo-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "coreduo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo-v1",
-+      "typename": "core2duo-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo",
-+      "typename": "core2duo-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "core2duo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "3dnowext",
-+        "3dnow"
-+      ],
-+      "alias-of": "athlon-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Westmere-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere",
-+      "typename": "Westmere-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Westmere-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "core-capability",
-+        "split-lock-detect"
-+      ],
-+      "alias-of": "Snowridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Skylake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-IBRS",
-+      "typename": "Skylake-Server-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Skylake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Skylake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Skylake-Client-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-IBRS",
-+      "typename": "Skylake-Client-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Skylake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Skylake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "SandyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge",
-+      "typename": "SandyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "SandyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn-v1",
-+      "typename": "Penryn-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn",
-+      "typename": "Penryn-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Penryn-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5",
-+      "typename": "Opteron_G5-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Opteron_G5-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4",
-+      "typename": "Opteron_G4-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse",
-+        "xop",
-+        "fma4",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Opteron_G4-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3",
-+      "typename": "Opteron_G3-x86_64-cpu",
-+      "unavailable-features": [
-+        "sse4a",
-+        "misalignsse"
-+      ],
-+      "alias-of": "Opteron_G3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Opteron_G2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1",
-+      "typename": "Opteron_G1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Opteron_G1-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Nehalem-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem",
-+      "typename": "Nehalem-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Nehalem-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f"
-+      ],
-+      "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"
-+      ],
-+      "alias-of": "KnightsMill-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "IvyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge",
-+      "typename": "IvyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "IvyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "la57",
-+        "wbnoinvd",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512vbmi",
-+        "pku",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "wbnoinvd",
-+        "pku"
-+      ],
-+      "alias-of": "Icelake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX-IBRS",
-+      "typename": "Haswell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Haswell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX",
-+      "typename": "Haswell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Haswell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Haswell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell",
-+      "typename": "Haswell-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Haswell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v3",
-+      "typename": "EPYC-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome-v1",
-+      "typename": "EPYC-Rome-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "rdpid",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "ibpb",
-+        "amd-stibp",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome",
-+      "typename": "EPYC-Rome-x86_64-cpu",
-+      "unavailable-features": [
-+        "clwb",
-+        "sha-ni",
-+        "rdpid",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "ibpb",
-+        "amd-stibp",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "EPYC-Rome-v1",
-+      "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",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "EPYC-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC",
-+      "typename": "EPYC-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "EPYC-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "mmxext",
-+        "fxsr-opt",
-+        "cr8legacy",
-+        "sse4a",
-+        "misalignsse",
-+        "osvw",
-+        "ibpb",
-+        "npt",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Dhyana-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v2",
-+      "typename": "Denverton-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdctl-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdctl-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "sha-ni",
-+        "rdctl-no"
-+      ],
-+      "alias-of": "Denverton-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake-v1",
-+      "typename": "Cooperlake-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no",
-+        "taa-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake",
-+      "typename": "Cooperlake-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512-bf16",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no",
-+        "taa-no"
-+      ],
-+      "alias-of": "Cooperlake-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Conroe-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "mds-no"
-+      ],
-+      "alias-of": "Cascadelake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx512f",
-+        "avx512dq",
-+        "clwb",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "pku",
-+        "avx512vnni",
-+        "avx512f",
-+        "avx512f",
-+        "avx512f",
-+        "pku"
-+      ],
-+      "alias-of": "Cascadelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX-IBRS",
-+      "typename": "Broadwell-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Broadwell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX",
-+      "typename": "Broadwell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Broadwell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Broadwell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell",
-+      "typename": "Broadwell-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Broadwell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486-v1",
-+      "typename": "486-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486",
-+      "typename": "486-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "486-v1",
-+      "static": false,
-+      "migration-safe": true
-+    }
-+  ],
-+  "id": "libvirt-40"
-+}
-+
-+{
-+  "execute": "query-tpm-models",
-+  "id": "libvirt-41"
-+}
-+
-+{
-+  "return": [
-+    "tpm-crb",
-+    "tpm-tis"
-+  ],
-+  "id": "libvirt-41"
-+}
-+
-+{
-+  "execute": "query-tpm-types",
-+  "id": "libvirt-42"
-+}
-+
-+{
-+  "return": [
-+    "passthrough",
-+    "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": "audiodev",
-+          "type": "string"
-+        },
-+        {
-+          "name": "non-adaptive",
-+          "type": "boolean"
-+        },
-+        {
-+          "name": "lossy",
-+          "type": "boolean"
-+        },
-+        {
-+          "name": "sasl-authz",
-+          "type": "string"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "type": "string"
-+        },
-+        {
-+          "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": "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": "multidevs",
-+          "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": "multidevs",
-+          "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": [
-+      ],
-+      "option": ""
-+    },
-+    {
-+      "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": "number"
-+        },
-+        {
-+          "name": "splash-time",
-+          "type": "number"
-+        },
-+        {
-+          "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": "dies",
-+          "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": [
-+      ],
-+      "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": "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-authz",
-+          "type": "string"
-+        },
-+        {
-+          "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, io_uring)",
-+          "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": "multifd"
-+    },
-+    {
-+      "state": false,
-+      "capability": "dirty-bitmaps"
-+    },
-+    {
-+      "state": false,
-+      "capability": "postcopy-blocktime"
-+    },
-+    {
-+      "state": false,
-+      "capability": "late-block-activate"
-+    },
-+    {
-+      "state": false,
-+      "capability": "x-ignore-shared"
-+    },
-+    {
-+      "state": false,
-+      "capability": "validate-uuid"
-+    }
-+  ],
-+  "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": "GUEST_CRASHLOADED",
-+      "meta-type": "event",
-+      "arg-type": "7"
-+    },
-+    {
-+      "name": "query-pr-managers",
-+      "ret-type": "[8]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "eject",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "9"
-+    },
-+    {
-+      "name": "blockdev-open-tray",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "10"
-+    },
-+    {
-+      "name": "blockdev-close-tray",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "11"
-+    },
-+    {
-+      "name": "blockdev-remove-medium",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "12"
-+    },
-+    {
-+      "name": "blockdev-insert-medium",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "13"
-+    },
-+    {
-+      "name": "blockdev-change-medium",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "14"
-+    },
-+    {
-+      "name": "DEVICE_TRAY_MOVED",
-+      "meta-type": "event",
-+      "arg-type": "15"
-+    },
-+    {
-+      "name": "PR_MANAGER_STATUS_CHANGED",
-+      "meta-type": "event",
-+      "arg-type": "16"
-+    },
-+    {
-+      "name": "block_set_io_throttle",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "17"
-+    },
-+    {
-+      "name": "block-latency-histogram-set",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "18"
-+    },
-+    {
-+      "name": "query-block",
-+      "ret-type": "[19]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-blockstats",
-+      "ret-type": "[21]",
-+      "meta-type": "command",
-+      "arg-type": "20"
-+    },
-+    {
-+      "name": "query-block-jobs",
-+      "ret-type": "[22]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "block_passwd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "23"
-+    },
-+    {
-+      "name": "block_resize",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "24"
-+    },
-+    {
-+      "name": "blockdev-snapshot-sync",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "25"
-+    },
-+    {
-+      "name": "blockdev-snapshot",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "26",
-+      "features": [
-+        "allow-write-only-overlay"
-+      ]
-+    },
-+    {
-+      "name": "change-backing-file",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "27"
-+    },
-+    {
-+      "name": "block-commit",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "28"
-+    },
-+    {
-+      "name": "drive-backup",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "29"
-+    },
-+    {
-+      "name": "blockdev-backup",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "30"
-+    },
-+    {
-+      "name": "query-named-block-nodes",
-+      "ret-type": "[32]",
-+      "meta-type": "command",
-+      "arg-type": "31"
-+    },
-+    {
-+      "name": "x-debug-query-block-graph",
-+      "ret-type": "33",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "drive-mirror",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "34"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "35"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-remove",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "36"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-clear",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "36"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-enable",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "36"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-disable",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "36"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-merge",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "37"
-+    },
-+    {
-+      "name": "x-debug-block-dirty-bitmap-sha256",
-+      "ret-type": "38",
-+      "meta-type": "command",
-+      "arg-type": "36"
-+    },
-+    {
-+      "name": "blockdev-mirror",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "39"
-+    },
-+    {
-+      "name": "block-stream",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "40"
-+    },
-+    {
-+      "name": "block-job-set-speed",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "41"
-+    },
-+    {
-+      "name": "block-job-cancel",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "42"
-+    },
-+    {
-+      "name": "block-job-pause",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "43"
-+    },
-+    {
-+      "name": "block-job-resume",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "44"
-+    },
-+    {
-+      "name": "block-job-complete",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "45"
-+    },
-+    {
-+      "name": "block-job-dismiss",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "46"
-+    },
-+    {
-+      "name": "block-job-finalize",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "47"
-+    },
-+    {
-+      "name": "blockdev-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "48"
-+    },
-+    {
-+      "name": "x-blockdev-reopen",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "48"
-+    },
-+    {
-+      "name": "blockdev-del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "49"
-+    },
-+    {
-+      "name": "blockdev-create",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "50"
-+    },
-+    {
-+      "name": "BLOCK_IMAGE_CORRUPTED",
-+      "meta-type": "event",
-+      "arg-type": "51"
-+    },
-+    {
-+      "name": "BLOCK_IO_ERROR",
-+      "meta-type": "event",
-+      "arg-type": "52"
-+    },
-+    {
-+      "name": "BLOCK_JOB_COMPLETED",
-+      "meta-type": "event",
-+      "arg-type": "53"
-+    },
-+    {
-+      "name": "BLOCK_JOB_CANCELLED",
-+      "meta-type": "event",
-+      "arg-type": "54"
-+    },
-+    {
-+      "name": "BLOCK_JOB_ERROR",
-+      "meta-type": "event",
-+      "arg-type": "55"
-+    },
-+    {
-+      "name": "BLOCK_JOB_READY",
-+      "meta-type": "event",
-+      "arg-type": "56"
-+    },
-+    {
-+      "name": "BLOCK_JOB_PENDING",
-+      "meta-type": "event",
-+      "arg-type": "57"
-+    },
-+    {
-+      "name": "BLOCK_WRITE_THRESHOLD",
-+      "meta-type": "event",
-+      "arg-type": "58"
-+    },
-+    {
-+      "name": "block-set-write-threshold",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "59"
-+    },
-+    {
-+      "name": "x-blockdev-change",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "60"
-+    },
-+    {
-+      "name": "x-blockdev-set-iothread",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "61"
-+    },
-+    {
-+      "name": "nbd-server-start",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "62"
-+    },
-+    {
-+      "name": "nbd-server-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "63"
-+    },
-+    {
-+      "name": "nbd-server-remove",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "64"
-+    },
-+    {
-+      "name": "nbd-server-stop",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "QUORUM_FAILURE",
-+      "meta-type": "event",
-+      "arg-type": "65"
-+    },
-+    {
-+      "name": "QUORUM_REPORT_BAD",
-+      "meta-type": "event",
-+      "arg-type": "66"
-+    },
-+    {
-+      "name": "blockdev-snapshot-internal-sync",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "67"
-+    },
-+    {
-+      "name": "blockdev-snapshot-delete-internal-sync",
-+      "ret-type": "69",
-+      "meta-type": "command",
-+      "arg-type": "68"
-+    },
-+    {
-+      "name": "JOB_STATUS_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "70"
-+    },
-+    {
-+      "name": "job-pause",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "71"
-+    },
-+    {
-+      "name": "job-resume",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "72"
-+    },
-+    {
-+      "name": "job-cancel",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "73"
-+    },
-+    {
-+      "name": "job-complete",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "74"
-+    },
-+    {
-+      "name": "job-dismiss",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "75"
-+    },
-+    {
-+      "name": "job-finalize",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "76"
-+    },
-+    {
-+      "name": "query-jobs",
-+      "ret-type": "[77]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-chardev",
-+      "ret-type": "[78]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-chardev-backends",
-+      "ret-type": "[79]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "ringbuf-write",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "80"
-+    },
-+    {
-+      "name": "ringbuf-read",
-+      "ret-type": "str",
-+      "meta-type": "command",
-+      "arg-type": "81"
-+    },
-+    {
-+      "name": "chardev-add",
-+      "ret-type": "83",
-+      "meta-type": "command",
-+      "arg-type": "82"
-+    },
-+    {
-+      "name": "chardev-change",
-+      "ret-type": "83",
-+      "meta-type": "command",
-+      "arg-type": "84"
-+    },
-+    {
-+      "name": "chardev-remove",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "85"
-+    },
-+    {
-+      "name": "chardev-send-break",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "86"
-+    },
-+    {
-+      "name": "VSERPORT_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "87"
-+    },
-+    {
-+      "name": "dump-guest-memory",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "88"
-+    },
-+    {
-+      "name": "query-dump",
-+      "ret-type": "89",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "DUMP_COMPLETED",
-+      "meta-type": "event",
-+      "arg-type": "90"
-+    },
-+    {
-+      "name": "query-dump-guest-memory-capability",
-+      "ret-type": "91",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "set_link",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "92"
-+    },
-+    {
-+      "name": "netdev_add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "93"
-+    },
-+    {
-+      "name": "netdev_del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "94"
-+    },
-+    {
-+      "name": "query-rx-filter",
-+      "ret-type": "[96]",
-+      "meta-type": "command",
-+      "arg-type": "95"
-+    },
-+    {
-+      "name": "NIC_RX_FILTER_CHANGED",
-+      "meta-type": "event",
-+      "arg-type": "97"
-+    },
-+    {
-+      "name": "announce-self",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "98"
-+    },
-+    {
-+      "name": "FAILOVER_NEGOTIATED",
-+      "meta-type": "event",
-+      "arg-type": "99"
-+    },
-+    {
-+      "name": "RDMA_GID_STATUS_CHANGED",
-+      "meta-type": "event",
-+      "arg-type": "100"
-+    },
-+    {
-+      "name": "query-rocker",
-+      "ret-type": "102",
-+      "meta-type": "command",
-+      "arg-type": "101"
-+    },
-+    {
-+      "name": "query-rocker-ports",
-+      "ret-type": "[104]",
-+      "meta-type": "command",
-+      "arg-type": "103"
-+    },
-+    {
-+      "name": "query-rocker-of-dpa-flows",
-+      "ret-type": "[106]",
-+      "meta-type": "command",
-+      "arg-type": "105"
-+    },
-+    {
-+      "name": "query-rocker-of-dpa-groups",
-+      "ret-type": "[108]",
-+      "meta-type": "command",
-+      "arg-type": "107"
-+    },
-+    {
-+      "name": "query-tpm-models",
-+      "ret-type": "[109]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-tpm-types",
-+      "ret-type": "[110]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-tpm",
-+      "ret-type": "[111]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "set_password",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "112"
-+    },
-+    {
-+      "name": "expire_password",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "113"
-+    },
-+    {
-+      "name": "screendump",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "114"
-+    },
-+    {
-+      "name": "query-spice",
-+      "ret-type": "115",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "SPICE_CONNECTED",
-+      "meta-type": "event",
-+      "arg-type": "116"
-+    },
-+    {
-+      "name": "SPICE_INITIALIZED",
-+      "meta-type": "event",
-+      "arg-type": "117"
-+    },
-+    {
-+      "name": "SPICE_DISCONNECTED",
-+      "meta-type": "event",
-+      "arg-type": "118"
-+    },
-+    {
-+      "name": "SPICE_MIGRATE_COMPLETED",
-+      "meta-type": "event",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-vnc",
-+      "ret-type": "119",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-vnc-servers",
-+      "ret-type": "[120]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "change-vnc-password",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "121"
-+    },
-+    {
-+      "name": "VNC_CONNECTED",
-+      "meta-type": "event",
-+      "arg-type": "122"
-+    },
-+    {
-+      "name": "VNC_INITIALIZED",
-+      "meta-type": "event",
-+      "arg-type": "123"
-+    },
-+    {
-+      "name": "VNC_DISCONNECTED",
-+      "meta-type": "event",
-+      "arg-type": "124"
-+    },
-+    {
-+      "name": "query-mice",
-+      "ret-type": "[125]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "send-key",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "126"
-+    },
-+    {
-+      "name": "input-send-event",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "127"
-+    },
-+    {
-+      "name": "query-display-options",
-+      "ret-type": "128",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-migrate",
-+      "ret-type": "129",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate-set-capabilities",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "130"
-+    },
-+    {
-+      "name": "query-migrate-capabilities",
-+      "ret-type": "[131]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate-set-parameters",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "132"
-+    },
-+    {
-+      "name": "query-migrate-parameters",
-+      "ret-type": "133",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "client_migrate_info",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "134"
-+    },
-+    {
-+      "name": "migrate-start-postcopy",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "MIGRATION",
-+      "meta-type": "event",
-+      "arg-type": "135"
-+    },
-+    {
-+      "name": "MIGRATION_PASS",
-+      "meta-type": "event",
-+      "arg-type": "136"
-+    },
-+    {
-+      "name": "COLO_EXIT",
-+      "meta-type": "event",
-+      "arg-type": "137"
-+    },
-+    {
-+      "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": "138"
-+    },
-+    {
-+      "name": "migrate_set_downtime",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "139",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "migrate_set_speed",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "140",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "migrate-set-cache-size",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "141",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "query-migrate-cache-size",
-+      "ret-type": "int",
-+      "meta-type": "command",
-+      "arg-type": "0",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "migrate",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "142"
-+    },
-+    {
-+      "name": "migrate-incoming",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "143"
-+    },
-+    {
-+      "name": "xen-save-devices-state",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "144"
-+    },
-+    {
-+      "name": "xen-set-replication",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "145"
-+    },
-+    {
-+      "name": "query-xen-replication-status",
-+      "ret-type": "146",
-+      "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": "147",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate-recover",
-+      "ret-type": "0",
-+      "allow-oob": true,
-+      "meta-type": "command",
-+      "arg-type": "148"
-+    },
-+    {
-+      "name": "migrate-pause",
-+      "ret-type": "0",
-+      "allow-oob": true,
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "UNPLUG_PRIMARY",
-+      "meta-type": "event",
-+      "arg-type": "149"
-+    },
-+    {
-+      "name": "transaction",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "150"
-+    },
-+    {
-+      "name": "trace-event-get-state",
-+      "ret-type": "[152]",
-+      "meta-type": "command",
-+      "arg-type": "151"
-+    },
-+    {
-+      "name": "trace-event-set-state",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "153"
-+    },
-+    {
-+      "name": "qmp_capabilities",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "154"
-+    },
-+    {
-+      "name": "query-version",
-+      "ret-type": "155",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-commands",
-+      "ret-type": "[156]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-events",
-+      "ret-type": "[157]",
-+      "meta-type": "command",
-+      "arg-type": "0",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "quit",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-qmp-schema",
-+      "ret-type": "[158]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "qom-list",
-+      "ret-type": "[160]",
-+      "meta-type": "command",
-+      "arg-type": "159"
-+    },
-+    {
-+      "name": "qom-get",
-+      "ret-type": "any",
-+      "meta-type": "command",
-+      "arg-type": "161"
-+    },
-+    {
-+      "name": "qom-set",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "162"
-+    },
-+    {
-+      "name": "qom-list-types",
-+      "ret-type": "[164]",
-+      "meta-type": "command",
-+      "arg-type": "163"
-+    },
-+    {
-+      "name": "qom-list-properties",
-+      "ret-type": "[160]",
-+      "meta-type": "command",
-+      "arg-type": "165"
-+    },
-+    {
-+      "name": "object-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "166"
-+    },
-+    {
-+      "name": "object-del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "167"
-+    },
-+    {
-+      "name": "device-list-properties",
-+      "ret-type": "[160]",
-+      "meta-type": "command",
-+      "arg-type": "168"
-+    },
-+    {
-+      "name": "device_add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "169"
-+    },
-+    {
-+      "name": "device_del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "170"
-+    },
-+    {
-+      "name": "DEVICE_DELETED",
-+      "meta-type": "event",
-+      "arg-type": "171"
-+    },
-+    {
-+      "name": "query-cpus",
-+      "ret-type": "[172]",
-+      "meta-type": "command",
-+      "arg-type": "0",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "query-cpus-fast",
-+      "ret-type": "[173]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "cpu-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "174",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "query-machines",
-+      "ret-type": "[175]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-current-machine",
-+      "ret-type": "176",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-target",
-+      "ret-type": "177",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-memdev",
-+      "ret-type": "[178]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-hotpluggable-cpus",
-+      "ret-type": "[179]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "set-numa-node",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "180"
-+    },
-+    {
-+      "name": "query-cpu-model-expansion",
-+      "ret-type": "186",
-+      "meta-type": "command",
-+      "arg-type": "185"
-+    },
-+    {
-+      "name": "query-cpu-definitions",
-+      "ret-type": "[187]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "add_client",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "188"
-+    },
-+    {
-+      "name": "query-name",
-+      "ret-type": "189",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-kvm",
-+      "ret-type": "190",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-uuid",
-+      "ret-type": "191",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-iothreads",
-+      "ret-type": "[192]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-balloon",
-+      "ret-type": "193",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "BALLOON_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "194"
-+    },
-+    {
-+      "name": "query-pci",
-+      "ret-type": "[195]",
-+      "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": "memsave",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "196"
-+    },
-+    {
-+      "name": "pmemsave",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "197"
-+    },
-+    {
-+      "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": "198"
-+    },
-+    {
-+      "name": "human-monitor-command",
-+      "ret-type": "str",
-+      "meta-type": "command",
-+      "arg-type": "199",
-+      "features": [
-+        "savevm-monitor-nodes"
-+      ]
-+    },
-+    {
-+      "name": "change",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "200",
-+      "features": [
-+        "deprecated"
-+      ]
-+    },
-+    {
-+      "name": "xen-set-global-dirty-log",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "201"
-+    },
-+    {
-+      "name": "getfd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "202"
-+    },
-+    {
-+      "name": "closefd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "203"
-+    },
-+    {
-+      "name": "query-memory-size-summary",
-+      "ret-type": "204",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "add-fd",
-+      "ret-type": "206",
-+      "meta-type": "command",
-+      "arg-type": "205"
-+    },
-+    {
-+      "name": "remove-fd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "207"
-+    },
-+    {
-+      "name": "query-fdsets",
-+      "ret-type": "[208]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-command-line-options",
-+      "ret-type": "[210]",
-+      "meta-type": "command",
-+      "arg-type": "209"
-+    },
-+    {
-+      "name": "query-memory-devices",
-+      "ret-type": "[211]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "MEM_UNPLUG_ERROR",
-+      "meta-type": "event",
-+      "arg-type": "212"
-+    },
-+    {
-+      "name": "query-acpi-ospm-status",
-+      "ret-type": "[213]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "ACPI_DEVICE_OST",
-+      "meta-type": "event",
-+      "arg-type": "214"
-+    },
-+    {
-+      "name": "xen-load-devices-state",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "215"
-+    },
-+    {
-+      "name": "query-vm-generation-id",
-+      "ret-type": "216",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "RTC_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "217"
-+    },
-+    {
-+      "name": "rtc-reset-reinjection",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-sev",
-+      "ret-type": "218",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-sev-launch-measure",
-+      "ret-type": "219",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-sev-capabilities",
-+      "ret-type": "220",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "0",
-+      "members": [
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "1",
-+      "members": [
-+        {
-+          "name": "running",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "singlestep",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "status",
-+          "type": "223"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "2",
-+      "members": [
-+        {
-+          "name": "guest",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "224"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "3",
-+      "members": [
-+        {
-+          "name": "guest",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "224"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "4",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "225"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "5",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "225"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "6",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "226"
-+        },
-+        {
-+          "name": "info",
-+          "default": null,
-+          "type": "227"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "7",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "226"
-+        },
-+        {
-+          "name": "info",
-+          "default": null,
-+          "type": "227"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[8]",
-+      "element-type": "8",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "8",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "connected",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "9",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "10",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "11",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "12",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "13",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "14",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "read-only-mode",
-+          "default": null,
-+          "type": "228"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "15",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "tray-open",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "16",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "connected",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "17",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "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": "18",
-+      "members": [
-+        {
-+          "name": "id",
-+          "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": "[19]",
-+      "element-type": "19",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "19",
-+      "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": "32"
-+        },
-+        {
-+          "name": "tray_open",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "io-status",
-+          "default": null,
-+          "type": "229"
-+        },
-+        {
-+          "name": "dirty-bitmaps",
-+          "default": null,
-+          "type": "[230]",
-+          "features": [
-+            "deprecated"
-+          ]
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "20",
-+      "members": [
-+        {
-+          "name": "query-nodes",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[21]",
-+      "element-type": "21",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "21",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "qdev",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "stats",
-+          "type": "231"
-+        },
-+        {
-+          "name": "driver-specific",
-+          "default": null,
-+          "type": "232"
-+        },
-+        {
-+          "name": "parent",
-+          "default": null,
-+          "type": "21"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "21"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[22]",
-+      "element-type": "22",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "22",
-+      "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": "229"
-+        },
-+        {
-+          "name": "ready",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "status",
-+          "type": "233"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "error",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "23",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "password",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "24",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "25",
-+      "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": "234"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "26",
-+      "members": [
-+        {
-+          "name": "node",
-+          "type": "str"
-+        },
-+        {
-+          "name": "overlay",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "27",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "image-node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "backing-file",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "28",
-+      "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",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "top-node",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "top",
-+          "default": null,
-+          "type": "str",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "speed",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "on-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "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": "29",
-+      "members": [
-+        {
-+          "name": "job-id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "sync",
-+          "type": "236"
-+        },
-+        {
-+          "name": "speed",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "bitmap",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "bitmap-mode",
-+          "default": null,
-+          "type": "237"
-+        },
-+        {
-+          "name": "compress",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "on-source-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "filter-node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "mode",
-+          "default": null,
-+          "type": "234"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "30",
-+      "members": [
-+        {
-+          "name": "job-id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "sync",
-+          "type": "236"
-+        },
-+        {
-+          "name": "speed",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "bitmap",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "bitmap-mode",
-+          "default": null,
-+          "type": "237"
-+        },
-+        {
-+          "name": "compress",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "on-source-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "filter-node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "31",
-+      "members": [
-+        {
-+          "name": "flat",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[32]",
-+      "element-type": "32",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "32",
-+      "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",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "detect_zeroes",
-+          "type": "238"
-+        },
-+        {
-+          "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": "239"
-+        },
-+        {
-+          "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": "240"
-+        },
-+        {
-+          "name": "write_threshold",
-+          "type": "int"
-+        },
-+        {
-+          "name": "dirty-bitmaps",
-+          "default": null,
-+          "type": "[230]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "33",
-+      "members": [
-+        {
-+          "name": "nodes",
-+          "type": "[241]"
-+        },
-+        {
-+          "name": "edges",
-+          "type": "[242]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "34",
-+      "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": "236"
-+        },
-+        {
-+          "name": "mode",
-+          "default": null,
-+          "type": "234"
-+        },
-+        {
-+          "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": "235"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "name": "unmap",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "copy-mode",
-+          "default": null,
-+          "type": "243"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "35",
-+      "members": [
-+        {
-+          "name": "node",
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "granularity",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "persistent",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "disabled",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "36",
-+      "members": [
-+        {
-+          "name": "node",
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "37",
-+      "members": [
-+        {
-+          "name": "node",
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        },
-+        {
-+          "name": "bitmaps",
-+          "type": "[244]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "38",
-+      "members": [
-+        {
-+          "name": "sha256",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "39",
-+      "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": "236"
-+        },
-+        {
-+          "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": "235"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "235"
-+        },
-+        {
-+          "name": "filter-node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "copy-mode",
-+          "default": null,
-+          "type": "243"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "40",
-+      "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": "235"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "41",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "42",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "43",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "44",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "45",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "46",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "47",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "48",
-+      "tag": "driver",
-+      "variants": [
-+        {
-+          "case": "blkdebug",
-+          "type": "248"
-+        },
-+        {
-+          "case": "blklogwrites",
-+          "type": "249"
-+        },
-+        {
-+          "case": "blkverify",
-+          "type": "250"
-+        },
-+        {
-+          "case": "blkreplay",
-+          "type": "251"
-+        },
-+        {
-+          "case": "bochs",
-+          "type": "252"
-+        },
-+        {
-+          "case": "cloop",
-+          "type": "252"
-+        },
-+        {
-+          "case": "compress",
-+          "type": "252"
-+        },
-+        {
-+          "case": "copy-on-read",
-+          "type": "252"
-+        },
-+        {
-+          "case": "dmg",
-+          "type": "252"
-+        },
-+        {
-+          "case": "file",
-+          "type": "253"
-+        },
-+        {
-+          "case": "ftp",
-+          "type": "254"
-+        },
-+        {
-+          "case": "ftps",
-+          "type": "255"
-+        },
-+        {
-+          "case": "gluster",
-+          "type": "256"
-+        },
-+        {
-+          "case": "host_cdrom",
-+          "type": "253"
-+        },
-+        {
-+          "case": "host_device",
-+          "type": "253"
-+        },
-+        {
-+          "case": "http",
-+          "type": "257"
-+        },
-+        {
-+          "case": "https",
-+          "type": "258"
-+        },
-+        {
-+          "case": "iscsi",
-+          "type": "259"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "260"
-+        },
-+        {
-+          "case": "nbd",
-+          "type": "261"
-+        },
-+        {
-+          "case": "nfs",
-+          "type": "262"
-+        },
-+        {
-+          "case": "null-aio",
-+          "type": "263"
-+        },
-+        {
-+          "case": "null-co",
-+          "type": "263"
-+        },
-+        {
-+          "case": "nvme",
-+          "type": "264"
-+        },
-+        {
-+          "case": "parallels",
-+          "type": "252"
-+        },
-+        {
-+          "case": "qcow2",
-+          "type": "265"
-+        },
-+        {
-+          "case": "qcow",
-+          "type": "266"
-+        },
-+        {
-+          "case": "qed",
-+          "type": "267"
-+        },
-+        {
-+          "case": "quorum",
-+          "type": "268"
-+        },
-+        {
-+          "case": "raw",
-+          "type": "269"
-+        },
-+        {
-+          "case": "rbd",
-+          "type": "270"
-+        },
-+        {
-+          "case": "replication",
-+          "type": "271"
-+        },
-+        {
-+          "case": "sheepdog",
-+          "type": "272"
-+        },
-+        {
-+          "case": "ssh",
-+          "type": "273"
-+        },
-+        {
-+          "case": "throttle",
-+          "type": "274"
-+        },
-+        {
-+          "case": "vdi",
-+          "type": "252"
-+        },
-+        {
-+          "case": "vhdx",
-+          "type": "252"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "267"
-+        },
-+        {
-+          "case": "vpc",
-+          "type": "252"
-+        },
-+        {
-+          "case": "vvfat",
-+          "type": "275"
-+        },
-+        {
-+          "case": "vxhs",
-+          "type": "276"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "245"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "discard",
-+          "default": null,
-+          "type": "246"
-+        },
-+        {
-+          "name": "cache",
-+          "default": null,
-+          "type": "247"
-+        },
-+        {
-+          "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": "238"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "49",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "50",
-+      "members": [
-+        {
-+          "name": "job-id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "options",
-+          "type": "277"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "51",
-+      "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": "52",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "operation",
-+          "type": "278"
-+        },
-+        {
-+          "name": "action",
-+          "type": "279"
-+        },
-+        {
-+          "name": "nospace",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "53",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "280"
-+        },
-+        {
-+          "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": "54",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "280"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "len",
-+          "type": "int"
-+        },
-+        {
-+          "name": "offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "55",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "operation",
-+          "type": "278"
-+        },
-+        {
-+          "name": "action",
-+          "type": "279"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "56",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "280"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "len",
-+          "type": "int"
-+        },
-+        {
-+          "name": "offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "57",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "280"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "58",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "amount-exceeded",
-+          "type": "int"
-+        },
-+        {
-+          "name": "write-threshold",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "59",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "write-threshold",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "60",
-+      "members": [
-+        {
-+          "name": "parent",
-+          "type": "str"
-+        },
-+        {
-+          "name": "child",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "61",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "iothread",
-+          "type": "281"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "62",
-+      "members": [
-+        {
-+          "name": "addr",
-+          "type": "282"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "63",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "description",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "writable",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "bitmap",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "64",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "mode",
-+          "default": null,
-+          "type": "283"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "65",
-+      "members": [
-+        {
-+          "name": "reference",
-+          "type": "str"
-+        },
-+        {
-+          "name": "sector-num",
-+          "type": "int"
-+        },
-+        {
-+          "name": "sectors-count",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "66",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "284"
-+        },
-+        {
-+          "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": "67",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "68",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "69",
-+      "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": "70",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "status",
-+          "type": "233"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "71",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "72",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "73",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "74",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "75",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "76",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[77]",
-+      "element-type": "77",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "77",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "280"
-+        },
-+        {
-+          "name": "status",
-+          "type": "233"
-+        },
-+        {
-+          "name": "current-progress",
-+          "type": "int"
-+        },
-+        {
-+          "name": "total-progress",
-+          "type": "int"
-+        },
-+        {
-+          "name": "error",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[78]",
-+      "element-type": "78",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "78",
-+      "members": [
-+        {
-+          "name": "label",
-+          "type": "str"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "frontend-open",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[79]",
-+      "element-type": "79",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "79",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "80",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "data",
-+          "type": "str"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "285"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "81",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "285"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "str",
-+      "json-type": "string",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "82",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "backend",
-+          "type": "286"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "83",
-+      "members": [
-+        {
-+          "name": "pty",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "84",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "backend",
-+          "type": "286"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "85",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "86",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "87",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "open",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "88",
-+      "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": "287"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "89",
-+      "members": [
-+        {
-+          "name": "status",
-+          "type": "288"
-+        },
-+        {
-+          "name": "completed",
-+          "type": "int"
-+        },
-+        {
-+          "name": "total",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "90",
-+      "members": [
-+        {
-+          "name": "result",
-+          "type": "89"
-+        },
-+        {
-+          "name": "error",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "91",
-+      "members": [
-+        {
-+          "name": "formats",
-+          "type": "[287]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "92",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "up",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "93",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "nic",
-+          "type": "290"
-+        },
-+        {
-+          "case": "user",
-+          "type": "291"
-+        },
-+        {
-+          "case": "tap",
-+          "type": "292"
-+        },
-+        {
-+          "case": "l2tpv3",
-+          "type": "293"
-+        },
-+        {
-+          "case": "socket",
-+          "type": "294"
-+        },
-+        {
-+          "case": "vde",
-+          "type": "295"
-+        },
-+        {
-+          "case": "bridge",
-+          "type": "296"
-+        },
-+        {
-+          "case": "hubport",
-+          "type": "297"
-+        },
-+        {
-+          "case": "netmap",
-+          "type": "298"
-+        },
-+        {
-+          "case": "vhost-user",
-+          "type": "299"
-+        },
-+        {
-+          "case": "none",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "289"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "94",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "95",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[96]",
-+      "element-type": "96",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "96",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "promiscuous",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "multicast",
-+          "type": "300"
-+        },
-+        {
-+          "name": "unicast",
-+          "type": "300"
-+        },
-+        {
-+          "name": "vlan",
-+          "type": "300"
-+        },
-+        {
-+          "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": "97",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "98",
-+      "members": [
-+        {
-+          "name": "initial",
-+          "type": "int"
-+        },
-+        {
-+          "name": "max",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rounds",
-+          "type": "int"
-+        },
-+        {
-+          "name": "step",
-+          "type": "int"
-+        },
-+        {
-+          "name": "interfaces",
-+          "default": null,
-+          "type": "[str]"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "99",
-+      "members": [
-+        {
-+          "name": "device-id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "100",
-+      "members": [
-+        {
-+          "name": "netdev",
-+          "type": "str"
-+        },
-+        {
-+          "name": "gid-status",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "subnet-prefix",
-+          "type": "int"
-+        },
-+        {
-+          "name": "interface-id",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "101",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "102",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "ports",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "103",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[104]",
-+      "element-type": "104",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "104",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "enabled",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "link-up",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        },
-+        {
-+          "name": "duplex",
-+          "type": "301"
-+        },
-+        {
-+          "name": "autoneg",
-+          "type": "302"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "105",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "tbl-id",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[106]",
-+      "element-type": "106",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "106",
-+      "members": [
-+        {
-+          "name": "cookie",
-+          "type": "int"
-+        },
-+        {
-+          "name": "hits",
-+          "type": "int"
-+        },
-+        {
-+          "name": "key",
-+          "type": "303"
-+        },
-+        {
-+          "name": "mask",
-+          "type": "304"
-+        },
-+        {
-+          "name": "action",
-+          "type": "305"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "107",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[108]",
-+      "element-type": "108",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "108",
-+      "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": "[109]",
-+      "element-type": "109",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "109",
-+      "meta-type": "enum",
-+      "values": [
-+        "tpm-tis",
-+        "tpm-crb",
-+        "tpm-spapr"
-+      ]
-+    },
-+    {
-+      "name": "[110]",
-+      "element-type": "110",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "110",
-+      "meta-type": "enum",
-+      "values": [
-+        "passthrough",
-+        "emulator"
-+      ]
-+    },
-+    {
-+      "name": "[111]",
-+      "element-type": "111",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "111",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "model",
-+          "type": "109"
-+        },
-+        {
-+          "name": "options",
-+          "type": "306"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "112",
-+      "members": [
-+        {
-+          "name": "protocol",
-+          "type": "str"
-+        },
-+        {
-+          "name": "password",
-+          "type": "str"
-+        },
-+        {
-+          "name": "connected",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "113",
-+      "members": [
-+        {
-+          "name": "protocol",
-+          "type": "str"
-+        },
-+        {
-+          "name": "time",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "114",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "head",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "115",
-+      "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": "307"
-+        },
-+        {
-+          "name": "channels",
-+          "default": null,
-+          "type": "[308]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "116",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "309"
-+        },
-+        {
-+          "name": "client",
-+          "type": "309"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "117",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "310"
-+        },
-+        {
-+          "name": "client",
-+          "type": "308"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "118",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "309"
-+        },
-+        {
-+          "name": "client",
-+          "type": "309"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "119",
-+      "members": [
-+        {
-+          "name": "enabled",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "host",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "default": null,
-+          "type": "311"
-+        },
-+        {
-+          "name": "service",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "auth",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "clients",
-+          "default": null,
-+          "type": "[312]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[120]",
-+      "element-type": "120",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "120",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "type": "[313]"
-+        },
-+        {
-+          "name": "clients",
-+          "type": "[312]"
-+        },
-+        {
-+          "name": "auth",
-+          "type": "314"
-+        },
-+        {
-+          "name": "vencrypt",
-+          "default": null,
-+          "type": "315"
-+        },
-+        {
-+          "name": "display",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "121",
-+      "members": [
-+        {
-+          "name": "password",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "122",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "316"
-+        },
-+        {
-+          "name": "client",
-+          "type": "317"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "123",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "316"
-+        },
-+        {
-+          "name": "client",
-+          "type": "312"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "124",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "316"
-+        },
-+        {
-+          "name": "client",
-+          "type": "312"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[125]",
-+      "element-type": "125",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "125",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "index",
-+          "type": "int"
-+        },
-+        {
-+          "name": "current",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "absolute",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "126",
-+      "members": [
-+        {
-+          "name": "keys",
-+          "type": "[318]"
-+        },
-+        {
-+          "name": "hold-time",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "127",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "head",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "events",
-+          "type": "[319]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "128",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "gtk",
-+          "type": "322"
-+        },
-+        {
-+          "case": "curses",
-+          "type": "323"
-+        },
-+        {
-+          "case": "egl-headless",
-+          "type": "324"
-+        },
-+        {
-+          "case": "default",
-+          "type": "0"
-+        },
-+        {
-+          "case": "none",
-+          "type": "0"
-+        },
-+        {
-+          "case": "sdl",
-+          "type": "0"
-+        },
-+        {
-+          "case": "cocoa",
-+          "type": "0"
-+        },
-+        {
-+          "case": "spice-app",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "320"
-+        },
-+        {
-+          "name": "full-screen",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "window-close",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "show-cursor",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "gl",
-+          "default": null,
-+          "type": "321"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "129",
-+      "members": [
-+        {
-+          "name": "status",
-+          "default": null,
-+          "type": "325"
-+        },
-+        {
-+          "name": "ram",
-+          "default": null,
-+          "type": "326"
-+        },
-+        {
-+          "name": "disk",
-+          "default": null,
-+          "type": "326"
-+        },
-+        {
-+          "name": "xbzrle-cache",
-+          "default": null,
-+          "type": "327"
-+        },
-+        {
-+          "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": "328"
-+        },
-+        {
-+          "name": "socket-address",
-+          "default": null,
-+          "type": "[329]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "130",
-+      "members": [
-+        {
-+          "name": "capabilities",
-+          "type": "[131]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[131]",
-+      "element-type": "131",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "131",
-+      "members": [
-+        {
-+          "name": "capability",
-+          "type": "330"
-+        },
-+        {
-+          "name": "state",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "132",
-+      "members": [
-+        {
-+          "name": "announce-initial",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-max",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-rounds",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-step",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "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": "throttle-trigger-threshold",
-+          "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": "281"
-+        },
-+        {
-+          "name": "tls-hostname",
-+          "default": null,
-+          "type": "281"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "default": null,
-+          "type": "281"
-+        },
-+        {
-+          "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": "multifd-channels",
-+          "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"
-+        },
-+        {
-+          "name": "multifd-compression",
-+          "default": null,
-+          "type": "331"
-+        },
-+        {
-+          "name": "multifd-zlib-level",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "multifd-zstd-level",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "133",
-+      "members": [
-+        {
-+          "name": "announce-initial",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-max",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-rounds",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-step",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "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": "throttle-trigger-threshold",
-+          "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": "tls-authz",
-+          "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": "multifd-channels",
-+          "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"
-+        },
-+        {
-+          "name": "multifd-compression",
-+          "default": null,
-+          "type": "331"
-+        },
-+        {
-+          "name": "multifd-zlib-level",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "multifd-zstd-level",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "134",
-+      "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": "135",
-+      "members": [
-+        {
-+          "name": "status",
-+          "type": "325"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "136",
-+      "members": [
-+        {
-+          "name": "pass",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "137",
-+      "members": [
-+        {
-+          "name": "mode",
-+          "type": "332"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "333"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "138",
-+      "members": [
-+        {
-+          "name": "state",
-+          "type": "325"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "139",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "number"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "140",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "141",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "int",
-+      "json-type": "int",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "142",
-+      "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": "143",
-+      "members": [
-+        {
-+          "name": "uri",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "144",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "live",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "145",
-+      "members": [
-+        {
-+          "name": "enable",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "primary",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "failover",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "146",
-+      "members": [
-+        {
-+          "name": "error",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "desc",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "147",
-+      "members": [
-+        {
-+          "name": "mode",
-+          "type": "332"
-+        },
-+        {
-+          "name": "last-mode",
-+          "type": "332"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "333"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "148",
-+      "members": [
-+        {
-+          "name": "uri",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "149",
-+      "members": [
-+        {
-+          "name": "device-id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "150",
-+      "members": [
-+        {
-+          "name": "actions",
-+          "type": "[334]"
-+        },
-+        {
-+          "name": "properties",
-+          "default": null,
-+          "type": "335"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "151",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "vcpu",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[152]",
-+      "element-type": "152",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "152",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "state",
-+          "type": "336"
-+        },
-+        {
-+          "name": "vcpu",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "153",
-+      "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": "154",
-+      "members": [
-+        {
-+          "name": "enable",
-+          "default": null,
-+          "type": "[337]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "155",
-+      "members": [
-+        {
-+          "name": "qemu",
-+          "type": "338"
-+        },
-+        {
-+          "name": "package",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[156]",
-+      "element-type": "156",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "156",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[157]",
-+      "element-type": "157",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "157",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[158]",
-+      "element-type": "158",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "158",
-+      "tag": "meta-type",
-+      "variants": [
-+        {
-+          "case": "builtin",
-+          "type": "340"
-+        },
-+        {
-+          "case": "enum",
-+          "type": "341"
-+        },
-+        {
-+          "case": "array",
-+          "type": "342"
-+        },
-+        {
-+          "case": "object",
-+          "type": "343"
-+        },
-+        {
-+          "case": "alternate",
-+          "type": "344"
-+        },
-+        {
-+          "case": "command",
-+          "type": "345"
-+        },
-+        {
-+          "case": "event",
-+          "type": "346"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "meta-type",
-+          "type": "339"
-+        },
-+        {
-+          "name": "features",
-+          "default": null,
-+          "type": "[str]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "159",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[160]",
-+      "element-type": "160",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "160",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "description",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "default-value",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "161",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "property",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "any",
-+      "json-type": "value",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "162",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "property",
-+          "type": "str"
-+        },
-+        {
-+          "name": "value",
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "163",
-+      "members": [
-+        {
-+          "name": "implements",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "abstract",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[164]",
-+      "element-type": "164",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "164",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "abstract",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "parent",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "165",
-+      "members": [
-+        {
-+          "name": "typename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "166",
-+      "members": [
-+        {
-+          "name": "qom-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "props",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "167",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "168",
-+      "members": [
-+        {
-+          "name": "typename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "169",
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "str"
-+        },
-+        {
-+          "name": "bus",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "170",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "171",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[172]",
-+      "element-type": "172",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "172",
-+      "tag": "arch",
-+      "variants": [
-+        {
-+          "case": "x86",
-+          "type": "349"
-+        },
-+        {
-+          "case": "sparc",
-+          "type": "350"
-+        },
-+        {
-+          "case": "ppc",
-+          "type": "351"
-+        },
-+        {
-+          "case": "mips",
-+          "type": "352"
-+        },
-+        {
-+          "case": "tricore",
-+          "type": "353"
-+        },
-+        {
-+          "case": "s390",
-+          "type": "354"
-+        },
-+        {
-+          "case": "riscv",
-+          "type": "355"
-+        },
-+        {
-+          "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": "347"
-+        },
-+        {
-+          "name": "arch",
-+          "type": "348"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[173]",
-+      "element-type": "173",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "173",
-+      "tag": "target",
-+      "variants": [
-+        {
-+          "case": "s390x",
-+          "type": "354"
-+        },
-+        {
-+          "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": "rx",
-+          "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": "347"
-+        },
-+        {
-+          "name": "arch",
-+          "type": "348",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "target",
-+          "type": "356"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "174",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[175]",
-+      "element-type": "175",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "175",
-+      "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"
-+        },
-+        {
-+          "name": "numa-mem-supported",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "deprecated",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "default-cpu-type",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "176",
-+      "members": [
-+        {
-+          "name": "wakeup-suspend-support",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "177",
-+      "members": [
-+        {
-+          "name": "arch",
-+          "type": "356"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[178]",
-+      "element-type": "178",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "178",
-+      "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": "357"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[179]",
-+      "element-type": "179",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "179",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "vcpus-count",
-+          "type": "int"
-+        },
-+        {
-+          "name": "props",
-+          "type": "347"
-+        },
-+        {
-+          "name": "qom-path",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "180",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "node",
-+          "type": "359"
-+        },
-+        {
-+          "case": "dist",
-+          "type": "360"
-+        },
-+        {
-+          "case": "cpu",
-+          "type": "361"
-+        },
-+        {
-+          "case": "hmat-lb",
-+          "type": "362"
-+        },
-+        {
-+          "case": "hmat-cache",
-+          "type": "363"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "358"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "185",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "366"
-+        },
-+        {
-+          "name": "model",
-+          "type": "364"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "186",
-+      "members": [
-+        {
-+          "name": "model",
-+          "type": "364"
-+        }
-+      ],
-+      "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"
-+        },
-+        {
-+          "name": "alias-of",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "188",
-+      "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": "189",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "190",
-+      "members": [
-+        {
-+          "name": "enabled",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "present",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "191",
-+      "members": [
-+        {
-+          "name": "UUID",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[192]",
-+      "element-type": "192",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "192",
-+      "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": "193",
-+      "members": [
-+        {
-+          "name": "actual",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "194",
-+      "members": [
-+        {
-+          "name": "actual",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[195]",
-+      "element-type": "195",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "195",
-+      "members": [
-+        {
-+          "name": "bus",
-+          "type": "int"
-+        },
-+        {
-+          "name": "devices",
-+          "type": "[367]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "196",
-+      "members": [
-+        {
-+          "name": "val",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cpu-index",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "197",
-+      "members": [
-+        {
-+          "name": "val",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "198",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "199",
-+      "members": [
-+        {
-+          "name": "command-line",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cpu-index",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "200",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        },
-+        {
-+          "name": "arg",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "201",
-+      "members": [
-+        {
-+          "name": "enable",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "202",
-+      "members": [
-+        {
-+          "name": "fdname",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "203",
-+      "members": [
-+        {
-+          "name": "fdname",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "204",
-+      "members": [
-+        {
-+          "name": "base-memory",
-+          "type": "int"
-+        },
-+        {
-+          "name": "plugged-memory",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "205",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "opaque",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "206",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "fd",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "207",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "fd",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[208]",
-+      "element-type": "208",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "208",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "fds",
-+          "type": "[368]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "209",
-+      "members": [
-+        {
-+          "name": "option",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[210]",
-+      "element-type": "210",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "210",
-+      "members": [
-+        {
-+          "name": "option",
-+          "type": "str"
-+        },
-+        {
-+          "name": "parameters",
-+          "type": "[369]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[211]",
-+      "element-type": "211",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "211",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "dimm",
-+          "type": "371"
-+        },
-+        {
-+          "case": "nvdimm",
-+          "type": "371"
-+        },
-+        {
-+          "case": "virtio-pmem",
-+          "type": "372"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "370"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "212",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "msg",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[213]",
-+      "element-type": "213",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "213",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "slot",
-+          "type": "str"
-+        },
-+        {
-+          "name": "slot-type",
-+          "type": "373"
-+        },
-+        {
-+          "name": "source",
-+          "type": "int"
-+        },
-+        {
-+          "name": "status",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "214",
-+      "members": [
-+        {
-+          "name": "info",
-+          "type": "213"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "215",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "216",
-+      "members": [
-+        {
-+          "name": "guid",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "217",
-+      "members": [
-+        {
-+          "name": "offset",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "218",
-+      "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": "374"
-+        },
-+        {
-+          "name": "handle",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "219",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "220",
-+      "members": [
-+        {
-+          "name": "pdh",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cert-chain",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cbitpos",
-+          "type": "int"
-+        },
-+        {
-+          "name": "reduced-phys-bits",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "bool",
-+      "json-type": "boolean",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "223",
-+      "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": "224",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "host-error",
-+        "host-qmp-quit",
-+        "host-qmp-system-reset",
-+        "host-signal",
-+        "host-ui",
-+        "guest-shutdown",
-+        "guest-reset",
-+        "guest-panic",
-+        "subsystem-reset"
-+      ]
-+    },
-+    {
-+      "name": "225",
-+      "meta-type": "enum",
-+      "values": [
-+        "reset",
-+        "shutdown",
-+        "poweroff",
-+        "pause",
-+        "debug",
-+        "none",
-+        "inject-nmi"
-+      ]
-+    },
-+    {
-+      "name": "226",
-+      "meta-type": "enum",
-+      "values": [
-+        "pause",
-+        "poweroff",
-+        "run"
-+      ]
-+    },
-+    {
-+      "name": "227",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "hyper-v",
-+          "type": "376"
-+        },
-+        {
-+          "case": "s390",
-+          "type": "377"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "375"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "228",
-+      "meta-type": "enum",
-+      "values": [
-+        "retain",
-+        "read-only",
-+        "read-write"
-+      ]
-+    },
-+    {
-+      "name": "[int]",
-+      "element-type": "int",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "229",
-+      "meta-type": "enum",
-+      "values": [
-+        "ok",
-+        "failed",
-+        "nospace"
-+      ]
-+    },
-+    {
-+      "name": "[230]",
-+      "element-type": "230",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "230",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "count",
-+          "type": "int"
-+        },
-+        {
-+          "name": "granularity",
-+          "type": "int"
-+        },
-+        {
-+          "name": "recording",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "busy",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "status",
-+          "type": "378",
-+          "features": [
-+            "deprecated"
-+          ]
-+        },
-+        {
-+          "name": "persistent",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "inconsistent",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "231",
-+      "members": [
-+        {
-+          "name": "rd_bytes",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_bytes",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_bytes",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rd_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "flush_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rd_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "flush_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_highest_offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rd_merged",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_merged",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_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": "failed_unmap_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_rd_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_wr_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_flush_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_unmap_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "account_invalid",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "account_failed",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "timed_stats",
-+          "type": "[379]"
-+        },
-+        {
-+          "name": "rd_latency_histogram",
-+          "default": null,
-+          "type": "380"
-+        },
-+        {
-+          "name": "wr_latency_histogram",
-+          "default": null,
-+          "type": "380"
-+        },
-+        {
-+          "name": "flush_latency_histogram",
-+          "default": null,
-+          "type": "380"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "232",
-+      "tag": "driver",
-+      "variants": [
-+        {
-+          "case": "file",
-+          "type": "381"
-+        },
-+        {
-+          "case": "host_device",
-+          "type": "381"
-+        },
-+        {
-+          "case": "blkdebug",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blklogwrites",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkreplay",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkverify",
-+          "type": "0"
-+        },
-+        {
-+          "case": "bochs",
-+          "type": "0"
-+        },
-+        {
-+          "case": "cloop",
-+          "type": "0"
-+        },
-+        {
-+          "case": "compress",
-+          "type": "0"
-+        },
-+        {
-+          "case": "copy-on-read",
-+          "type": "0"
-+        },
-+        {
-+          "case": "dmg",
-+          "type": "0"
-+        },
-+        {
-+          "case": "ftp",
-+          "type": "0"
-+        },
-+        {
-+          "case": "ftps",
-+          "type": "0"
-+        },
-+        {
-+          "case": "gluster",
-+          "type": "0"
-+        },
-+        {
-+          "case": "host_cdrom",
-+          "type": "0"
-+        },
-+        {
-+          "case": "http",
-+          "type": "0"
-+        },
-+        {
-+          "case": "https",
-+          "type": "0"
-+        },
-+        {
-+          "case": "iscsi",
-+          "type": "0"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "0"
-+        },
-+        {
-+          "case": "nbd",
-+          "type": "0"
-+        },
-+        {
-+          "case": "nfs",
-+          "type": "0"
-+        },
-+        {
-+          "case": "null-aio",
-+          "type": "0"
-+        },
-+        {
-+          "case": "null-co",
-+          "type": "0"
-+        },
-+        {
-+          "case": "nvme",
-+          "type": "0"
-+        },
-+        {
-+          "case": "parallels",
-+          "type": "0"
-+        },
-+        {
-+          "case": "qcow",
-+          "type": "0"
-+        },
-+        {
-+          "case": "qcow2",
-+          "type": "0"
-+        },
-+        {
-+          "case": "qed",
-+          "type": "0"
-+        },
-+        {
-+          "case": "quorum",
-+          "type": "0"
-+        },
-+        {
-+          "case": "raw",
-+          "type": "0"
-+        },
-+        {
-+          "case": "rbd",
-+          "type": "0"
-+        },
-+        {
-+          "case": "replication",
-+          "type": "0"
-+        },
-+        {
-+          "case": "sheepdog",
-+          "type": "0"
-+        },
-+        {
-+          "case": "ssh",
-+          "type": "0"
-+        },
-+        {
-+          "case": "throttle",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vdi",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vhdx",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vpc",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vvfat",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vxhs",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "245"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "233",
-+      "meta-type": "enum",
-+      "values": [
-+        "undefined",
-+        "created",
-+        "running",
-+        "paused",
-+        "ready",
-+        "standby",
-+        "waiting",
-+        "pending",
-+        "aborting",
-+        "concluded",
-+        "null"
-+      ]
-+    },
-+    {
-+      "name": "234",
-+      "meta-type": "enum",
-+      "values": [
-+        "existing",
-+        "absolute-paths"
-+      ]
-+    },
-+    {
-+      "name": "235",
-+      "meta-type": "enum",
-+      "values": [
-+        "report",
-+        "ignore",
-+        "enospc",
-+        "stop",
-+        "auto"
-+      ]
-+    },
-+    {
-+      "name": "236",
-+      "meta-type": "enum",
-+      "values": [
-+        "top",
-+        "full",
-+        "none",
-+        "incremental",
-+        "bitmap"
-+      ]
-+    },
-+    {
-+      "name": "237",
-+      "meta-type": "enum",
-+      "values": [
-+        "on-success",
-+        "never",
-+        "always"
-+      ]
-+    },
-+    {
-+      "name": "238",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "on",
-+        "unmap"
-+      ]
-+    },
-+    {
-+      "name": "239",
-+      "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": "[69]"
-+        },
-+        {
-+          "name": "backing-image",
-+          "default": null,
-+          "type": "239"
-+        },
-+        {
-+          "name": "format-specific",
-+          "default": null,
-+          "type": "382"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "240",
-+      "members": [
-+        {
-+          "name": "writeback",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "direct",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "no-flush",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[241]",
-+      "element-type": "241",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "241",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "type",
-+          "type": "383"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[242]",
-+      "element-type": "242",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "242",
-+      "members": [
-+        {
-+          "name": "parent",
-+          "type": "int"
-+        },
-+        {
-+          "name": "child",
-+          "type": "int"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "perm",
-+          "type": "[384]"
-+        },
-+        {
-+          "name": "shared-perm",
-+          "type": "[384]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "243",
-+      "meta-type": "enum",
-+      "values": [
-+        "background",
-+        "write-blocking"
-+      ]
-+    },
-+    {
-+      "name": "[244]",
-+      "element-type": "244",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "244",
-+      "members": [
-+        {
-+          "type": "str"
-+        },
-+        {
-+          "type": "36"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "245",
-+      "meta-type": "enum",
-+      "values": [
-+        "blkdebug",
-+        "blklogwrites",
-+        "blkreplay",
-+        "blkverify",
-+        "bochs",
-+        "cloop",
-+        "compress",
-+        "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": "246",
-+      "meta-type": "enum",
-+      "values": [
-+        "ignore",
-+        "unmap"
-+      ]
-+    },
-+    {
-+      "name": "247",
-+      "members": [
-+        {
-+          "name": "direct",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "no-flush",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "248",
-+      "members": [
-+        {
-+          "name": "image",
-+          "type": "385"
-+        },
-+        {
-+          "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": "[386]"
-+        },
-+        {
-+          "name": "set-state",
-+          "default": null,
-+          "type": "[387]"
-+        },
-+        {
-+          "name": "take-child-perms",
-+          "default": null,
-+          "type": "[384]"
-+        },
-+        {
-+          "name": "unshare-child-perms",
-+          "default": null,
-+          "type": "[384]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "249",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "log",
-+          "type": "385"
-+        },
-+        {
-+          "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": "250",
-+      "members": [
-+        {
-+          "name": "test",
-+          "type": "385"
-+        },
-+        {
-+          "name": "raw",
-+          "type": "385"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "251",
-+      "members": [
-+        {
-+          "name": "image",
-+          "type": "385"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "252",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "253",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "pr-manager",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "locking",
-+          "default": null,
-+          "type": "388"
-+        },
-+        {
-+          "name": "aio",
-+          "default": null,
-+          "type": "389"
-+        },
-+        {
-+          "name": "drop-cache",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "x-check-cache-dropped",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object",
-+      "features": [
-+        "dynamic-auto-read-only"
-+      ]
-+    },
-+    {
-+      "name": "254",
-+      "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": "255",
-+      "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": "256",
-+      "members": [
-+        {
-+          "name": "volume",
-+          "type": "str"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "type": "[329]"
-+        },
-+        {
-+          "name": "debug",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "257",
-+      "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": "258",
-+      "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": "259",
-+      "members": [
-+        {
-+          "name": "transport",
-+          "type": "390"
-+        },
-+        {
-+          "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": "391"
-+        },
-+        {
-+          "name": "timeout",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "260",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "261",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "329"
-+        },
-+        {
-+          "name": "export",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "x-dirty-bitmap",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "reconnect-delay",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "262",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "392"
-+        },
-+        {
-+          "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": "263",
-+      "members": [
-+        {
-+          "name": "size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "latency-ns",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "read-zeroes",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "264",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "namespace",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "265",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "393"
-+        },
-+        {
-+          "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": "394"
-+        },
-+        {
-+          "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": "395"
-+        },
-+        {
-+          "name": "data-file",
-+          "default": null,
-+          "type": "385"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "266",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "393"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "396"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "267",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "393"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "268",
-+      "members": [
-+        {
-+          "name": "blkverify",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "children",
-+          "type": "[385]"
-+        },
-+        {
-+          "name": "vote-threshold",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rewrite-corrupted",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "read-pattern",
-+          "default": null,
-+          "type": "397"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "269",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "offset",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "270",
-+      "members": [
-+        {
-+          "name": "pool",
-+          "type": "str"
-+        },
-+        {
-+          "name": "namespace",
-+          "default": null,
-+          "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": "[398]"
-+        },
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "default": null,
-+          "type": "[399]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "271",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "mode",
-+          "type": "400"
-+        },
-+        {
-+          "name": "top-id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "272",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "329"
-+        },
-+        {
-+          "name": "vdi",
-+          "type": "str"
-+        },
-+        {
-+          "name": "snap-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "tag",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "273",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "401"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "user",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "host-key-check",
-+          "default": null,
-+          "type": "402"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "274",
-+      "members": [
-+        {
-+          "name": "throttle-group",
-+          "type": "str"
-+        },
-+        {
-+          "name": "file",
-+          "type": "385"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "275",
-+      "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": "276",
-+      "members": [
-+        {
-+          "name": "vdisk-id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "type": "399"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "277",
-+      "tag": "driver",
-+      "variants": [
-+        {
-+          "case": "file",
-+          "type": "403"
-+        },
-+        {
-+          "case": "gluster",
-+          "type": "404"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "405"
-+        },
-+        {
-+          "case": "nfs",
-+          "type": "406"
-+        },
-+        {
-+          "case": "parallels",
-+          "type": "407"
-+        },
-+        {
-+          "case": "qcow",
-+          "type": "408"
-+        },
-+        {
-+          "case": "qcow2",
-+          "type": "409"
-+        },
-+        {
-+          "case": "qed",
-+          "type": "410"
-+        },
-+        {
-+          "case": "rbd",
-+          "type": "411"
-+        },
-+        {
-+          "case": "sheepdog",
-+          "type": "412"
-+        },
-+        {
-+          "case": "ssh",
-+          "type": "413"
-+        },
-+        {
-+          "case": "vdi",
-+          "type": "414"
-+        },
-+        {
-+          "case": "vhdx",
-+          "type": "415"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "416"
-+        },
-+        {
-+          "case": "vpc",
-+          "type": "417"
-+        },
-+        {
-+          "case": "blkdebug",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blklogwrites",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkreplay",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkverify",
-+          "type": "0"
-+        },
-+        {
-+          "case": "bochs",
-+          "type": "0"
-+        },
-+        {
-+          "case": "cloop",
-+          "type": "0"
-+        },
-+        {
-+          "case": "compress",
-+          "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": "vvfat",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vxhs",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "245"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "278",
-+      "meta-type": "enum",
-+      "values": [
-+        "read",
-+        "write"
-+      ]
-+    },
-+    {
-+      "name": "279",
-+      "meta-type": "enum",
-+      "values": [
-+        "ignore",
-+        "report",
-+        "stop"
-+      ]
-+    },
-+    {
-+      "name": "280",
-+      "meta-type": "enum",
-+      "values": [
-+        "commit",
-+        "stream",
-+        "mirror",
-+        "backup",
-+        "create"
-+      ]
-+    },
-+    {
-+      "name": "281",
-+      "members": [
-+        {
-+          "type": "str"
-+        },
-+        {
-+          "type": "null"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "282",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "inet",
-+          "type": "419"
-+        },
-+        {
-+          "case": "unix",
-+          "type": "420"
-+        },
-+        {
-+          "case": "vsock",
-+          "type": "421"
-+        },
-+        {
-+          "case": "fd",
-+          "type": "422"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "418"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "283",
-+      "meta-type": "enum",
-+      "values": [
-+        "safe",
-+        "hard"
-+      ]
-+    },
-+    {
-+      "name": "284",
-+      "meta-type": "enum",
-+      "values": [
-+        "read",
-+        "write",
-+        "flush"
-+      ]
-+    },
-+    {
-+      "name": "285",
-+      "meta-type": "enum",
-+      "values": [
-+        "utf8",
-+        "base64"
-+      ]
-+    },
-+    {
-+      "name": "286",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "file",
-+          "type": "424"
-+        },
-+        {
-+          "case": "serial",
-+          "type": "425"
-+        },
-+        {
-+          "case": "parallel",
-+          "type": "425"
-+        },
-+        {
-+          "case": "pipe",
-+          "type": "425"
-+        },
-+        {
-+          "case": "socket",
-+          "type": "426"
-+        },
-+        {
-+          "case": "udp",
-+          "type": "427"
-+        },
-+        {
-+          "case": "pty",
-+          "type": "428"
-+        },
-+        {
-+          "case": "null",
-+          "type": "428"
-+        },
-+        {
-+          "case": "mux",
-+          "type": "429"
-+        },
-+        {
-+          "case": "msmouse",
-+          "type": "428"
-+        },
-+        {
-+          "case": "wctablet",
-+          "type": "428"
-+        },
-+        {
-+          "case": "braille",
-+          "type": "428"
-+        },
-+        {
-+          "case": "testdev",
-+          "type": "428"
-+        },
-+        {
-+          "case": "stdio",
-+          "type": "430"
-+        },
-+        {
-+          "case": "console",
-+          "type": "428"
-+        },
-+        {
-+          "case": "spicevmc",
-+          "type": "431"
-+        },
-+        {
-+          "case": "spiceport",
-+          "type": "432"
-+        },
-+        {
-+          "case": "vc",
-+          "type": "433"
-+        },
-+        {
-+          "case": "ringbuf",
-+          "type": "434"
-+        },
-+        {
-+          "case": "memory",
-+          "type": "434"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "423"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "287",
-+      "meta-type": "enum",
-+      "values": [
-+        "elf",
-+        "kdump-zlib",
-+        "kdump-lzo",
-+        "kdump-snappy",
-+        "win-dmp"
-+      ]
-+    },
-+    {
-+      "name": "288",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "active",
-+        "completed",
-+        "failed"
-+      ]
-+    },
-+    {
-+      "name": "[287]",
-+      "element-type": "287",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "289",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "nic",
-+        "user",
-+        "tap",
-+        "l2tpv3",
-+        "socket",
-+        "vde",
-+        "bridge",
-+        "hubport",
-+        "netmap",
-+        "vhost-user"
-+      ]
-+    },
-+    {
-+      "name": "290",
-+      "members": [
-+        {
-+          "name": "netdev",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "macaddr",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "model",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "addr",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "vectors",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "291",
-+      "members": [
-+        {
-+          "name": "hostname",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "restrict",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "ipv4",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "ipv6",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "ip",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "net",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "host",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tftp",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "bootfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "dhcpstart",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "dns",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "dnssearch",
-+          "default": null,
-+          "type": "[435]"
-+        },
-+        {
-+          "name": "domainname",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "ipv6-prefix",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "ipv6-prefixlen",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "ipv6-host",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "ipv6-dns",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "smb",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "smbserver",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "hostfwd",
-+          "default": null,
-+          "type": "[435]"
-+        },
-+        {
-+          "name": "guestfwd",
-+          "default": null,
-+          "type": "[435]"
-+        },
-+        {
-+          "name": "tftp-server-name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "292",
-+      "members": [
-+        {
-+          "name": "ifname",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "fd",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "fds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "script",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "downscript",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "br",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "helper",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "sndbuf",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "vnet_hdr",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "vhost",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "vhostfd",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "vhostfds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "vhostforce",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "queues",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "poll-us",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "293",
-+      "members": [
-+        {
-+          "name": "src",
-+          "type": "str"
-+        },
-+        {
-+          "name": "dst",
-+          "type": "str"
-+        },
-+        {
-+          "name": "srcport",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "dstport",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "ipv6",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "udp",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "cookie64",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "counter",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "pincounter",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "txcookie",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "rxcookie",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "txsession",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rxsession",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "offset",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "294",
-+      "members": [
-+        {
-+          "name": "fd",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "listen",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "connect",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "mcast",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "localaddr",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "udp",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "295",
-+      "members": [
-+        {
-+          "name": "sock",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "group",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "mode",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "296",
-+      "members": [
-+        {
-+          "name": "br",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "helper",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "297",
-+      "members": [
-+        {
-+          "name": "hubid",
-+          "type": "int"
-+        },
-+        {
-+          "name": "netdev",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "298",
-+      "members": [
-+        {
-+          "name": "ifname",
-+          "type": "str"
-+        },
-+        {
-+          "name": "devname",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "299",
-+      "members": [
-+        {
-+          "name": "chardev",
-+          "type": "str"
-+        },
-+        {
-+          "name": "vhostforce",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "queues",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "300",
-+      "meta-type": "enum",
-+      "values": [
-+        "normal",
-+        "none",
-+        "all"
-+      ]
-+    },
-+    {
-+      "name": "[str]",
-+      "element-type": "str",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "301",
-+      "meta-type": "enum",
-+      "values": [
-+        "half",
-+        "full"
-+      ]
-+    },
-+    {
-+      "name": "302",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "on"
-+      ]
-+    },
-+    {
-+      "name": "303",
-+      "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": "304",
-+      "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": "305",
-+      "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": "306",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "passthrough",
-+          "type": "437"
-+        },
-+        {
-+          "case": "emulator",
-+          "type": "438"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "436"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "307",
-+      "meta-type": "enum",
-+      "values": [
-+        "client",
-+        "server",
-+        "unknown"
-+      ]
-+    },
-+    {
-+      "name": "[308]",
-+      "element-type": "308",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "308",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        },
-+        {
-+          "name": "connection-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "channel-type",
-+          "type": "int"
-+        },
-+        {
-+          "name": "channel-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "tls",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "309",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "310",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        },
-+        {
-+          "name": "auth",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "311",
-+      "meta-type": "enum",
-+      "values": [
-+        "ipv4",
-+        "ipv6",
-+        "unix",
-+        "vsock",
-+        "unknown"
-+      ]
-+    },
-+    {
-+      "name": "[312]",
-+      "element-type": "312",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "312",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "x509_dname",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "sasl_username",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[313]",
-+      "element-type": "313",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "313",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auth",
-+          "type": "314"
-+        },
-+        {
-+          "name": "vencrypt",
-+          "default": null,
-+          "type": "315"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "314",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "vnc",
-+        "ra2",
-+        "ra2ne",
-+        "tight",
-+        "ultra",
-+        "tls",
-+        "vencrypt",
-+        "sasl"
-+      ]
-+    },
-+    {
-+      "name": "315",
-+      "meta-type": "enum",
-+      "values": [
-+        "plain",
-+        "tls-none",
-+        "x509-none",
-+        "tls-vnc",
-+        "x509-vnc",
-+        "tls-plain",
-+        "x509-plain",
-+        "tls-sasl",
-+        "x509-sasl"
-+      ]
-+    },
-+    {
-+      "name": "316",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auth",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "317",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "311"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[318]",
-+      "element-type": "318",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "318",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "number",
-+          "type": "440"
-+        },
-+        {
-+          "case": "qcode",
-+          "type": "441"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "439"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[319]",
-+      "element-type": "319",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "319",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "key",
-+          "type": "443"
-+        },
-+        {
-+          "case": "btn",
-+          "type": "444"
-+        },
-+        {
-+          "case": "rel",
-+          "type": "445"
-+        },
-+        {
-+          "case": "abs",
-+          "type": "445"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "442"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "320",
-+      "meta-type": "enum",
-+      "values": [
-+        "default",
-+        "none",
-+        "gtk",
-+        "sdl",
-+        "egl-headless",
-+        "curses",
-+        "cocoa",
-+        "spice-app"
-+      ]
-+    },
-+    {
-+      "name": "321",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "on",
-+        "core",
-+        "es"
-+      ]
-+    },
-+    {
-+      "name": "322",
-+      "members": [
-+        {
-+          "name": "grab-on-hover",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "zoom-to-fit",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "323",
-+      "members": [
-+        {
-+          "name": "charset",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "324",
-+      "members": [
-+        {
-+          "name": "rendernode",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "325",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "setup",
-+        "cancelling",
-+        "cancelled",
-+        "active",
-+        "postcopy-active",
-+        "postcopy-paused",
-+        "postcopy-recover",
-+        "completed",
-+        "failed",
-+        "colo",
-+        "pre-switchover",
-+        "device",
-+        "wait-unplug"
-+      ]
-+    },
-+    {
-+      "name": "326",
-+      "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"
-+        },
-+        {
-+          "name": "pages-per-second",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "327",
-+      "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": "328",
-+      "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": "[329]",
-+      "element-type": "329",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "329",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "inet",
-+          "type": "401"
-+        },
-+        {
-+          "case": "unix",
-+          "type": "447"
-+        },
-+        {
-+          "case": "vsock",
-+          "type": "448"
-+        },
-+        {
-+          "case": "fd",
-+          "type": "435"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "446"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "330",
-+      "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",
-+        "multifd",
-+        "dirty-bitmaps",
-+        "postcopy-blocktime",
-+        "late-block-activate",
-+        "x-ignore-shared",
-+        "validate-uuid"
-+      ]
-+    },
-+    {
-+      "name": "331",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "zlib"
-+      ]
-+    },
-+    {
-+      "name": "332",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "primary",
-+        "secondary"
-+      ]
-+    },
-+    {
-+      "name": "333",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "request",
-+        "error",
-+        "processing"
-+      ]
-+    },
-+    {
-+      "name": "number",
-+      "json-type": "number",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "[334]",
-+      "element-type": "334",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "334",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "abort",
-+          "type": "450"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-add",
-+          "type": "451"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-remove",
-+          "type": "452"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-clear",
-+          "type": "452"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-enable",
-+          "type": "452"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-disable",
-+          "type": "452"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-merge",
-+          "type": "453"
-+        },
-+        {
-+          "case": "blockdev-backup",
-+          "type": "454"
-+        },
-+        {
-+          "case": "blockdev-snapshot",
-+          "type": "455"
-+        },
-+        {
-+          "case": "blockdev-snapshot-internal-sync",
-+          "type": "456"
-+        },
-+        {
-+          "case": "blockdev-snapshot-sync",
-+          "type": "457"
-+        },
-+        {
-+          "case": "drive-backup",
-+          "type": "458"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "449"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "335",
-+      "members": [
-+        {
-+          "name": "completion-mode",
-+          "default": null,
-+          "type": "459"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "336",
-+      "meta-type": "enum",
-+      "values": [
-+        "unavailable",
-+        "disabled",
-+        "enabled"
-+      ]
-+    },
-+    {
-+      "name": "[337]",
-+      "element-type": "337",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "337",
-+      "meta-type": "enum",
-+      "values": [
-+        "oob"
-+      ]
-+    },
-+    {
-+      "name": "338",
-+      "members": [
-+        {
-+          "name": "major",
-+          "type": "int"
-+        },
-+        {
-+          "name": "minor",
-+          "type": "int"
-+        },
-+        {
-+          "name": "micro",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "339",
-+      "meta-type": "enum",
-+      "values": [
-+        "builtin",
-+        "enum",
-+        "array",
-+        "object",
-+        "alternate",
-+        "command",
-+        "event"
-+      ]
-+    },
-+    {
-+      "name": "340",
-+      "members": [
-+        {
-+          "name": "json-type",
-+          "type": "460"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "341",
-+      "members": [
-+        {
-+          "name": "values",
-+          "type": "[str]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "342",
-+      "members": [
-+        {
-+          "name": "element-type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "343",
-+      "members": [
-+        {
-+          "name": "members",
-+          "type": "[461]"
-+        },
-+        {
-+          "name": "tag",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "variants",
-+          "default": null,
-+          "type": "[462]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "344",
-+      "members": [
-+        {
-+          "name": "members",
-+          "type": "[463]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "345",
-+      "members": [
-+        {
-+          "name": "arg-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "ret-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "allow-oob",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "346",
-+      "members": [
-+        {
-+          "name": "arg-type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "347",
-+      "members": [
-+        {
-+          "name": "node-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "socket-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "die-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "core-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "thread-id",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "348",
-+      "meta-type": "enum",
-+      "values": [
-+        "x86",
-+        "sparc",
-+        "ppc",
-+        "mips",
-+        "tricore",
-+        "s390",
-+        "riscv",
-+        "other"
-+      ]
-+    },
-+    {
-+      "name": "349",
-+      "members": [
-+        {
-+          "name": "pc",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "350",
-+      "members": [
-+        {
-+          "name": "pc",
-+          "type": "int"
-+        },
-+        {
-+          "name": "npc",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "351",
-+      "members": [
-+        {
-+          "name": "nip",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "352",
-+      "members": [
-+        {
-+          "name": "PC",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "353",
-+      "members": [
-+        {
-+          "name": "PC",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "354",
-+      "members": [
-+        {
-+          "name": "cpu-state",
-+          "type": "464"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "355",
-+      "members": [
-+        {
-+          "name": "pc",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "356",
-+      "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",
-+        "rx",
-+        "s390x",
-+        "sh4",
-+        "sh4eb",
-+        "sparc",
-+        "sparc64",
-+        "tricore",
-+        "unicore32",
-+        "x86_64",
-+        "xtensa",
-+        "xtensaeb"
-+      ]
-+    },
-+    {
-+      "name": "357",
-+      "meta-type": "enum",
-+      "values": [
-+        "default",
-+        "preferred",
-+        "bind",
-+        "interleave"
-+      ]
-+    },
-+    {
-+      "name": "358",
-+      "meta-type": "enum",
-+      "values": [
-+        "node",
-+        "dist",
-+        "cpu",
-+        "hmat-lb",
-+        "hmat-cache"
-+      ]
-+    },
-+    {
-+      "name": "359",
-+      "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"
-+        },
-+        {
-+          "name": "initiator",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "360",
-+      "members": [
-+        {
-+          "name": "src",
-+          "type": "int"
-+        },
-+        {
-+          "name": "dst",
-+          "type": "int"
-+        },
-+        {
-+          "name": "val",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "361",
-+      "members": [
-+        {
-+          "name": "node-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "socket-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "die-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "core-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "thread-id",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "362",
-+      "members": [
-+        {
-+          "name": "initiator",
-+          "type": "int"
-+        },
-+        {
-+          "name": "target",
-+          "type": "int"
-+        },
-+        {
-+          "name": "hierarchy",
-+          "type": "465"
-+        },
-+        {
-+          "name": "data-type",
-+          "type": "466"
-+        },
-+        {
-+          "name": "latency",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "bandwidth",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "363",
-+      "members": [
-+        {
-+          "name": "node-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "level",
-+          "type": "int"
-+        },
-+        {
-+          "name": "associativity",
-+          "type": "467"
-+        },
-+        {
-+          "name": "policy",
-+          "type": "468"
-+        },
-+        {
-+          "name": "line",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "364",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "props",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "365",
-+      "meta-type": "enum",
-+      "values": [
-+        "incompatible",
-+        "identical",
-+        "superset",
-+        "subset"
-+      ]
-+    },
-+    {
-+      "name": "366",
-+      "meta-type": "enum",
-+      "values": [
-+        "static",
-+        "full"
-+      ]
-+    },
-+    {
-+      "name": "[367]",
-+      "element-type": "367",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "367",
-+      "members": [
-+        {
-+          "name": "bus",
-+          "type": "int"
-+        },
-+        {
-+          "name": "slot",
-+          "type": "int"
-+        },
-+        {
-+          "name": "function",
-+          "type": "int"
-+        },
-+        {
-+          "name": "class_info",
-+          "type": "469"
-+        },
-+        {
-+          "name": "id",
-+          "type": "470"
-+        },
-+        {
-+          "name": "irq",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "qdev_id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "pci_bridge",
-+          "default": null,
-+          "type": "471"
-+        },
-+        {
-+          "name": "regions",
-+          "type": "[472]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[368]",
-+      "element-type": "368",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "368",
-+      "members": [
-+        {
-+          "name": "fd",
-+          "type": "int"
-+        },
-+        {
-+          "name": "opaque",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[369]",
-+      "element-type": "369",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "369",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "473"
-+        },
-+        {
-+          "name": "help",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "default",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "370",
-+      "meta-type": "enum",
-+      "values": [
-+        "dimm",
-+        "nvdimm",
-+        "virtio-pmem"
-+      ]
-+    },
-+    {
-+      "name": "371",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "474"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "372",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "475"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "373",
-+      "meta-type": "enum",
-+      "values": [
-+        "DIMM",
-+        "CPU"
-+      ]
-+    },
-+    {
-+      "name": "374",
-+      "meta-type": "enum",
-+      "values": [
-+        "uninit",
-+        "launch-update",
-+        "launch-secret",
-+        "running",
-+        "send-update",
-+        "receive-update"
-+      ]
-+    },
-+    {
-+      "name": "375",
-+      "meta-type": "enum",
-+      "values": [
-+        "hyper-v",
-+        "s390"
-+      ]
-+    },
-+    {
-+      "name": "376",
-+      "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": "377",
-+      "members": [
-+        {
-+          "name": "core",
-+          "type": "int"
-+        },
-+        {
-+          "name": "psw-mask",
-+          "type": "int"
-+        },
-+        {
-+          "name": "psw-addr",
-+          "type": "int"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "476"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "378",
-+      "meta-type": "enum",
-+      "values": [
-+        "active",
-+        "disabled",
-+        "frozen",
-+        "locked",
-+        "inconsistent"
-+      ]
-+    },
-+    {
-+      "name": "[379]",
-+      "element-type": "379",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "379",
-+      "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": "380",
-+      "members": [
-+        {
-+          "name": "boundaries",
-+          "type": "[int]"
-+        },
-+        {
-+          "name": "bins",
-+          "type": "[int]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "381",
-+      "members": [
-+        {
-+          "name": "discard-nb-ok",
-+          "type": "int"
-+        },
-+        {
-+          "name": "discard-nb-failed",
-+          "type": "int"
-+        },
-+        {
-+          "name": "discard-bytes-ok",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[69]",
-+      "element-type": "69",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "382",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "qcow2",
-+          "type": "478"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "479"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "480"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "477"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "383",
-+      "meta-type": "enum",
-+      "values": [
-+        "block-backend",
-+        "block-job",
-+        "block-driver"
-+      ]
-+    },
-+    {
-+      "name": "[384]",
-+      "element-type": "384",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "384",
-+      "meta-type": "enum",
-+      "values": [
-+        "consistent-read",
-+        "write",
-+        "write-unchanged",
-+        "resize",
-+        "graph-mod"
-+      ]
-+    },
-+    {
-+      "name": "385",
-+      "members": [
-+        {
-+          "type": "48"
-+        },
-+        {
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "[386]",
-+      "element-type": "386",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "386",
-+      "members": [
-+        {
-+          "name": "event",
-+          "type": "481"
-+        },
-+        {
-+          "name": "state",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "iotype",
-+          "default": null,
-+          "type": "482"
-+        },
-+        {
-+          "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": "[387]",
-+      "element-type": "387",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "387",
-+      "members": [
-+        {
-+          "name": "event",
-+          "type": "481"
-+        },
-+        {
-+          "name": "state",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "new_state",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "388",
-+      "meta-type": "enum",
-+      "values": [
-+        "auto",
-+        "on",
-+        "off"
-+      ]
-+    },
-+    {
-+      "name": "389",
-+      "meta-type": "enum",
-+      "values": [
-+        "threads",
-+        "native"
-+      ]
-+    },
-+    {
-+      "name": "390",
-+      "meta-type": "enum",
-+      "values": [
-+        "tcp",
-+        "iser"
-+      ]
-+    },
-+    {
-+      "name": "391",
-+      "meta-type": "enum",
-+      "values": [
-+        "crc32c",
-+        "none",
-+        "crc32c-none",
-+        "none-crc32c"
-+      ]
-+    },
-+    {
-+      "name": "392",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "483"
-+        },
-+        {
-+          "name": "host",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "393",
-+      "members": [
-+        {
-+          "type": "48"
-+        },
-+        {
-+          "type": "str"
-+        },
-+        {
-+          "type": "null"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "394",
-+      "members": [
-+        {
-+          "type": "484"
-+        },
-+        {
-+          "type": "485"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "395",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "aes",
-+          "type": "487"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "488"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "486"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "396",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "aes",
-+          "type": "487"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "489"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[385]",
-+      "element-type": "385",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "397",
-+      "meta-type": "enum",
-+      "values": [
-+        "quorum",
-+        "fifo"
-+      ]
-+    },
-+    {
-+      "name": "[398]",
-+      "element-type": "398",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "398",
-+      "meta-type": "enum",
-+      "values": [
-+        "cephx",
-+        "none"
-+      ]
-+    },
-+    {
-+      "name": "[399]",
-+      "element-type": "399",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "399",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "400",
-+      "meta-type": "enum",
-+      "values": [
-+        "primary",
-+        "secondary"
-+      ]
-+    },
-+    {
-+      "name": "401",
-+      "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"
-+        },
-+        {
-+          "name": "keep-alive",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "402",
-+      "tag": "mode",
-+      "variants": [
-+        {
-+          "case": "hash",
-+          "type": "491"
-+        },
-+        {
-+          "case": "none",
-+          "type": "0"
-+        },
-+        {
-+          "case": "known_hosts",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "mode",
-+          "type": "490"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "403",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "492"
-+        },
-+        {
-+          "name": "nocow",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "404",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "256"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "492"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "405",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "cipher-alg",
-+          "default": null,
-+          "type": "493"
-+        },
-+        {
-+          "name": "cipher-mode",
-+          "default": null,
-+          "type": "494"
-+        },
-+        {
-+          "name": "ivgen-alg",
-+          "default": null,
-+          "type": "495"
-+        },
-+        {
-+          "name": "ivgen-hash-alg",
-+          "default": null,
-+          "type": "496"
-+        },
-+        {
-+          "name": "hash-alg",
-+          "default": null,
-+          "type": "496"
-+        },
-+        {
-+          "name": "iter-time",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "492"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "406",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "262"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "407",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "408",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "497"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "409",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "data-file",
-+          "default": null,
-+          "type": "385"
-+        },
-+        {
-+          "name": "data-file-raw",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "version",
-+          "default": null,
-+          "type": "498"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "backing-fmt",
-+          "default": null,
-+          "type": "245"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "497"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "492"
-+        },
-+        {
-+          "name": "lazy-refcounts",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "refcount-bits",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "410",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "backing-fmt",
-+          "default": null,
-+          "type": "245"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "table-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "411",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "270"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "412",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "272"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "492"
-+        },
-+        {
-+          "name": "redundancy",
-+          "default": null,
-+          "type": "499"
-+        },
-+        {
-+          "name": "object-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "413",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "273"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "414",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "492"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "415",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "log-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "block-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "subformat",
-+          "default": null,
-+          "type": "500"
-+        },
-+        {
-+          "name": "block-state-zero",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "416",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "extents",
-+          "default": null,
-+          "type": "[385]"
-+        },
-+        {
-+          "name": "subformat",
-+          "default": null,
-+          "type": "501"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "adapter-type",
-+          "default": null,
-+          "type": "502"
-+        },
-+        {
-+          "name": "hwversion",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "zeroed-grain",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "417",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "385"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "subformat",
-+          "default": null,
-+          "type": "503"
-+        },
-+        {
-+          "name": "force-size",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "null",
-+      "json-type": "null",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "418",
-+      "meta-type": "enum",
-+      "values": [
-+        "inet",
-+        "unix",
-+        "vsock",
-+        "fd"
-+      ]
-+    },
-+    {
-+      "name": "419",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "401"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "420",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "447"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "421",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "448"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "422",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "435"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "423",
-+      "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": "424",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "504"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "425",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "505"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "426",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "506"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "427",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "507"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "428",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "508"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "429",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "509"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "430",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "510"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "431",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "511"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "432",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "512"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "433",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "513"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "434",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "514"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[435]",
-+      "element-type": "435",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "435",
-+      "members": [
-+        {
-+          "name": "str",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "436",
-+      "meta-type": "enum",
-+      "values": [
-+        "passthrough",
-+        "emulator"
-+      ]
-+    },
-+    {
-+      "name": "437",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "515"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "438",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "516"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "439",
-+      "meta-type": "enum",
-+      "values": [
-+        "number",
-+        "qcode"
-+      ]
-+    },
-+    {
-+      "name": "440",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "441",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "517"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "442",
-+      "meta-type": "enum",
-+      "values": [
-+        "key",
-+        "btn",
-+        "rel",
-+        "abs"
-+      ]
-+    },
-+    {
-+      "name": "443",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "518"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "444",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "519"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "445",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "520"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "446",
-+      "meta-type": "enum",
-+      "values": [
-+        "inet",
-+        "unix",
-+        "vsock",
-+        "fd"
-+      ]
-+    },
-+    {
-+      "name": "447",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "448",
-+      "members": [
-+        {
-+          "name": "cid",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "449",
-+      "meta-type": "enum",
-+      "values": [
-+        "abort",
-+        "block-dirty-bitmap-add",
-+        "block-dirty-bitmap-remove",
-+        "block-dirty-bitmap-clear",
-+        "block-dirty-bitmap-enable",
-+        "block-dirty-bitmap-disable",
-+        "block-dirty-bitmap-merge",
-+        "blockdev-backup",
-+        "blockdev-snapshot",
-+        "blockdev-snapshot-internal-sync",
-+        "blockdev-snapshot-sync",
-+        "drive-backup"
-+      ]
-+    },
-+    {
-+      "name": "450",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "521"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "451",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "35"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "452",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "36"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "453",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "37"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "454",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "30"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "455",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "26"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "456",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "67"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "457",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "25"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "458",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "29"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "459",
-+      "meta-type": "enum",
-+      "values": [
-+        "individual",
-+        "grouped"
-+      ]
-+    },
-+    {
-+      "name": "460",
-+      "meta-type": "enum",
-+      "values": [
-+        "string",
-+        "number",
-+        "int",
-+        "boolean",
-+        "null",
-+        "object",
-+        "array",
-+        "value"
-+      ]
-+    },
-+    {
-+      "name": "[461]",
-+      "element-type": "461",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "461",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "default",
-+          "default": null,
-+          "type": "any"
-+        },
-+        {
-+          "name": "features",
-+          "default": null,
-+          "type": "[str]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[462]",
-+      "element-type": "462",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "462",
-+      "members": [
-+        {
-+          "name": "case",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[463]",
-+      "element-type": "463",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "463",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "464",
-+      "meta-type": "enum",
-+      "values": [
-+        "uninitialized",
-+        "stopped",
-+        "check-stop",
-+        "operating",
-+        "load"
-+      ]
-+    },
-+    {
-+      "name": "465",
-+      "meta-type": "enum",
-+      "values": [
-+        "memory",
-+        "first-level",
-+        "second-level",
-+        "third-level"
-+      ]
-+    },
-+    {
-+      "name": "466",
-+      "meta-type": "enum",
-+      "values": [
-+        "access-latency",
-+        "read-latency",
-+        "write-latency",
-+        "access-bandwidth",
-+        "read-bandwidth",
-+        "write-bandwidth"
-+      ]
-+    },
-+    {
-+      "name": "467",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "direct",
-+        "complex"
-+      ]
-+    },
-+    {
-+      "name": "468",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "write-back",
-+        "write-through"
-+      ]
-+    },
-+    {
-+      "name": "469",
-+      "members": [
-+        {
-+          "name": "desc",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "class",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "470",
-+      "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": "471",
-+      "members": [
-+        {
-+          "name": "bus",
-+          "type": "522"
-+        },
-+        {
-+          "name": "devices",
-+          "default": null,
-+          "type": "[367]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[472]",
-+      "element-type": "472",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "472",
-+      "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": "473",
-+      "meta-type": "enum",
-+      "values": [
-+        "string",
-+        "boolean",
-+        "number",
-+        "size"
-+      ]
-+    },
-+    {
-+      "name": "474",
-+      "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": "475",
-+      "members": [
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "memaddr",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "memdev",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "476",
-+      "meta-type": "enum",
-+      "values": [
-+        "unknown",
-+        "disabled-wait",
-+        "extint-loop",
-+        "pgmint-loop",
-+        "opint-loop"
-+      ]
-+    },
-+    {
-+      "name": "477",
-+      "meta-type": "enum",
-+      "values": [
-+        "qcow2",
-+        "vmdk",
-+        "luks"
-+      ]
-+    },
-+    {
-+      "name": "478",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "523"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "479",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "524"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "480",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "525"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "481",
-+      "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",
-+        "cluster_alloc_space",
-+        "none"
-+      ]
-+    },
-+    {
-+      "name": "482",
-+      "meta-type": "enum",
-+      "values": [
-+        "read",
-+        "write",
-+        "write-zeroes",
-+        "discard",
-+        "flush",
-+        "block-status"
-+      ]
-+    },
-+    {
-+      "name": "483",
-+      "meta-type": "enum",
-+      "values": [
-+        "inet"
-+      ]
-+    },
-+    {
-+      "name": "484",
-+      "members": [
-+        {
-+          "name": "template",
-+          "default": null,
-+          "type": "485"
-+        },
-+        {
-+          "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": "485",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "constant",
-+        "cached",
-+        "all"
-+      ]
-+    },
-+    {
-+      "name": "486",
-+      "meta-type": "enum",
-+      "values": [
-+        "aes",
-+        "luks"
-+      ]
-+    },
-+    {
-+      "name": "487",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "488",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "489",
-+      "meta-type": "enum",
-+      "values": [
-+        "aes"
-+      ]
-+    },
-+    {
-+      "name": "490",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "hash",
-+        "known_hosts"
-+      ]
-+    },
-+    {
-+      "name": "491",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "526"
-+        },
-+        {
-+          "name": "hash",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "492",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "metadata",
-+        "falloc",
-+        "full"
-+      ]
-+    },
-+    {
-+      "name": "493",
-+      "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": "494",
-+      "meta-type": "enum",
-+      "values": [
-+        "ecb",
-+        "cbc",
-+        "xts",
-+        "ctr"
-+      ]
-+    },
-+    {
-+      "name": "495",
-+      "meta-type": "enum",
-+      "values": [
-+        "plain",
-+        "plain64",
-+        "essiv"
-+      ]
-+    },
-+    {
-+      "name": "496",
-+      "meta-type": "enum",
-+      "values": [
-+        "md5",
-+        "sha1",
-+        "sha224",
-+        "sha256",
-+        "sha384",
-+        "sha512",
-+        "ripemd160"
-+      ]
-+    },
-+    {
-+      "name": "497",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "qcow",
-+          "type": "487"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "528"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "527"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "498",
-+      "meta-type": "enum",
-+      "values": [
-+        "v2",
-+        "v3"
-+      ]
-+    },
-+    {
-+      "name": "499",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "full",
-+          "type": "530"
-+        },
-+        {
-+          "case": "erasure-coded",
-+          "type": "531"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "529"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "500",
-+      "meta-type": "enum",
-+      "values": [
-+        "dynamic",
-+        "fixed"
-+      ]
-+    },
-+    {
-+      "name": "501",
-+      "meta-type": "enum",
-+      "values": [
-+        "monolithicSparse",
-+        "monolithicFlat",
-+        "twoGbMaxExtentSparse",
-+        "twoGbMaxExtentFlat",
-+        "streamOptimized"
-+      ]
-+    },
-+    {
-+      "name": "502",
-+      "meta-type": "enum",
-+      "values": [
-+        "ide",
-+        "buslogic",
-+        "lsilogic",
-+        "legacyESX"
-+      ]
-+    },
-+    {
-+      "name": "503",
-+      "meta-type": "enum",
-+      "values": [
-+        "dynamic",
-+        "fixed"
-+      ]
-+    },
-+    {
-+      "name": "504",
-+      "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": "505",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "506",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "addr",
-+          "type": "282"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "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": "507",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "remote",
-+          "type": "282"
-+        },
-+        {
-+          "name": "local",
-+          "default": null,
-+          "type": "282"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "508",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "509",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "chardev",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "510",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "signal",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "511",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "512",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "fqdn",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "513",
-+      "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": "514",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "515",
-+      "members": [
-+        {
-+          "name": "path",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "cancel-path",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "516",
-+      "members": [
-+        {
-+          "name": "chardev",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "517",
-+      "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": "518",
-+      "members": [
-+        {
-+          "name": "key",
-+          "type": "318"
-+        },
-+        {
-+          "name": "down",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "519",
-+      "members": [
-+        {
-+          "name": "button",
-+          "type": "532"
-+        },
-+        {
-+          "name": "down",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "520",
-+      "members": [
-+        {
-+          "name": "axis",
-+          "type": "533"
-+        },
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "521",
-+      "members": [
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "522",
-+      "members": [
-+        {
-+          "name": "number",
-+          "type": "int"
-+        },
-+        {
-+          "name": "secondary",
-+          "type": "int"
-+        },
-+        {
-+          "name": "subordinate",
-+          "type": "int"
-+        },
-+        {
-+          "name": "io_range",
-+          "type": "534"
-+        },
-+        {
-+          "name": "memory_range",
-+          "type": "534"
-+        },
-+        {
-+          "name": "prefetchable_range",
-+          "type": "534"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "523",
-+      "members": [
-+        {
-+          "name": "compat",
-+          "type": "str"
-+        },
-+        {
-+          "name": "data-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "data-file-raw",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "lazy-refcounts",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "corrupt",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "refcount-bits",
-+          "type": "int"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "535"
-+        },
-+        {
-+          "name": "bitmaps",
-+          "default": null,
-+          "type": "[536]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "524",
-+      "members": [
-+        {
-+          "name": "create-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cid",
-+          "type": "int"
-+        },
-+        {
-+          "name": "parent-cid",
-+          "type": "int"
-+        },
-+        {
-+          "name": "extents",
-+          "type": "[239]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "525",
-+      "members": [
-+        {
-+          "name": "cipher-alg",
-+          "type": "493"
-+        },
-+        {
-+          "name": "cipher-mode",
-+          "type": "494"
-+        },
-+        {
-+          "name": "ivgen-alg",
-+          "type": "495"
-+        },
-+        {
-+          "name": "ivgen-hash-alg",
-+          "default": null,
-+          "type": "496"
-+        },
-+        {
-+          "name": "hash-alg",
-+          "type": "496"
-+        },
-+        {
-+          "name": "payload-offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "master-key-iters",
-+          "type": "int"
-+        },
-+        {
-+          "name": "uuid",
-+          "type": "str"
-+        },
-+        {
-+          "name": "slots",
-+          "type": "[537]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "526",
-+      "meta-type": "enum",
-+      "values": [
-+        "md5",
-+        "sha1"
-+      ]
-+    },
-+    {
-+      "name": "527",
-+      "meta-type": "enum",
-+      "values": [
-+        "qcow",
-+        "luks"
-+      ]
-+    },
-+    {
-+      "name": "528",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "cipher-alg",
-+          "default": null,
-+          "type": "493"
-+        },
-+        {
-+          "name": "cipher-mode",
-+          "default": null,
-+          "type": "494"
-+        },
-+        {
-+          "name": "ivgen-alg",
-+          "default": null,
-+          "type": "495"
-+        },
-+        {
-+          "name": "ivgen-hash-alg",
-+          "default": null,
-+          "type": "496"
-+        },
-+        {
-+          "name": "hash-alg",
-+          "default": null,
-+          "type": "496"
-+        },
-+        {
-+          "name": "iter-time",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "529",
-+      "meta-type": "enum",
-+      "values": [
-+        "full",
-+        "erasure-coded"
-+      ]
-+    },
-+    {
-+      "name": "530",
-+      "members": [
-+        {
-+          "name": "copies",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "531",
-+      "members": [
-+        {
-+          "name": "data-strips",
-+          "type": "int"
-+        },
-+        {
-+          "name": "parity-strips",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "532",
-+      "meta-type": "enum",
-+      "values": [
-+        "left",
-+        "middle",
-+        "right",
-+        "wheel-up",
-+        "wheel-down",
-+        "side",
-+        "extra"
-+      ]
-+    },
-+    {
-+      "name": "533",
-+      "meta-type": "enum",
-+      "values": [
-+        "x",
-+        "y"
-+      ]
-+    },
-+    {
-+      "name": "534",
-+      "members": [
-+        {
-+          "name": "base",
-+          "type": "int"
-+        },
-+        {
-+          "name": "limit",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "535",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "luks",
-+          "type": "525"
-+        },
-+        {
-+          "case": "aes",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "486"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[536]",
-+      "element-type": "536",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "536",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "granularity",
-+          "type": "int"
-+        },
-+        {
-+          "name": "flags",
-+          "type": "[538]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[239]",
-+      "element-type": "239",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "[537]",
-+      "element-type": "537",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "537",
-+      "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": "[538]",
-+      "element-type": "538",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "538",
-+      "meta-type": "enum",
-+      "values": [
-+        "in-use",
-+        "auto"
-+      ]
-+    }
-+  ],
-+  "id": "libvirt-45"
-+}
-+
-+{
-+  "execute": "query-sev-capabilities",
-+  "id": "libvirt-46"
-+}
-+
-+{
-+  "id": "libvirt-46",
-+  "error": {
-+    "class": "GenericError",
-+    "desc": "SEV feature is not available"
-+  }
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "static",
-+    "model": {
-+      "name": "host"
-+    }
-+  },
-+  "id": "libvirt-47"
-+}
-+
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": true,
-+        "mmx": true,
-+        "rdpid": false,
-+        "arat": true,
-+        "vmx-page-walk-4": true,
-+        "vmx-page-walk-5": false,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "vmx-desc-exit": true,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": true,
-+        "vmx-rdseed-exit": true,
-+        "vmx-eptp-switching": true,
-+        "kvm-asyncpf": true,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "avx512cd": false,
-+        "decodeassists": false,
-+        "vmx-exit-load-efer": true,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4.1": true,
-+        "family": 6,
-+        "vmx-vmwrite-vmexit-fields": true,
-+        "vmx-vnmi": true,
-+        "vmx-true-ctls": true,
-+        "vmx-ept-execonly": true,
-+        "vmx-exit-save-efer": true,
-+        "vmx-invept-all-context": true,
-+        "wbnoinvd": false,
-+        "avx512f": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "xcrypt": false,
-+        "vmx-exit-load-pat": true,
-+        "vmx-intr-exit": true,
-+        "min-level": 22,
-+        "vmx-flexpriority": true,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": false,
-+        "vmx-cr8-load-exit": true,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": false,
-+        "vmx-exit-save-pat": true,
-+        "xtpr": false,
-+        "tsx-ctrl": false,
-+        "vmx-ple": false,
-+        "avx512vl": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": true,
-+        "vmx-vmfunc": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "cr8legacy": false,
-+        "vmx-encls-exit": false,
-+        "stibp": true,
-+        "vmx-msr-bitmap": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": true,
-+        "vmx-pml": true,
-+        "vmx-nmi-exit": true,
-+        "vmx-invept-single-context-noglobals": true,
-+        "pn": false,
-+        "rsba": false,
-+        "dca": false,
-+        "vendor": "GenuineIntel",
-+        "vmx-unrestricted-guest": true,
-+        "vmx-cr3-store-noexit": true,
-+        "pku": false,
-+        "smx": false,
-+        "cmp-legacy": false,
-+        "avx512-4fmaps": false,
-+        "vmcb-clean": false,
-+        "hle": true,
-+        "3dnowext": false,
-+        "amd-no-ssb": false,
-+        "npt": false,
-+        "rdctl-no": false,
-+        "vmx-invvpid": true,
-+        "clwb": false,
-+        "lbrv": false,
-+        "adx": true,
-+        "ss": true,
-+        "pni": true,
-+        "svm-lock": false,
-+        "smep": true,
-+        "smap": true,
-+        "pfthreshold": false,
-+        "vmx-invpcid-exit": true,
-+        "x2apic": true,
-+        "avx512vbmi": false,
-+        "avx512vnni": false,
-+        "vmx-apicv-x2apic": true,
-+        "kvm-pv-sched-yield": true,
-+        "vmx-invlpg-exit": true,
-+        "vmx-invvpid-all-context": true,
-+        "vmx-activity-hlt": true,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "vmx-exit-ack-intr": true,
-+        "ace2-en": false,
-+        "pae": true,
-+        "pat": true,
-+        "sse": true,
-+        "phe-en": false,
-+        "vmx-tsc-offset": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": true,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": true,
-+        "mds-no": false,
-+        "pcommit": false,
-+        "vmx-vpid": true,
-+        "syscall": true,
-+        "avx512dq": false,
-+        "svm": false,
-+        "invtsc": false,
-+        "vmx-monitor-exit": true,
-+        "sse2": true,
-+        "ssbd": true,
-+        "vmx-wbinvd-exit": true,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-eoi": true,
-+        "kvm-pv-ipi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": true,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": true,
-+        "kvm-mmu": false,
-+        "sse4.2": true,
-+        "pge": true,
-+        "avx512bitalg": false,
-+        "pdcm": false,
-+        "vmx-entry-load-bndcfgs": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "model": 94,
-+        "movbe": true,
-+        "nrip-save": false,
-+        "ssse3": true,
-+        "sse4a": false,
-+        "vmx-pause-exit": true,
-+        "invpcid": true,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "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,
-+        "vmx-exit-nosave-debugctl": true,
-+        "la57": false,
-+        "vmx-invept": true,
-+        "osvw": false,
-+        "apic": true,
-+        "pmm": false,
-+        "vmx-entry-noload-debugctl": true,
-+        "vmx-eptad": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": false,
-+        "vmx-apicv-register": false,
-+        "tsc-adjust": true,
-+        "kvm-steal-time": true,
-+        "kvmclock": true,
-+        "vmx-zero-len-inject": false,
-+        "pschange-mc-no": true,
-+        "vmx-rdrand-exit": true,
-+        "lwp": false,
-+        "amd-ssbd": false,
-+        "xop": false,
-+        "ibpb": false,
-+        "avx": true,
-+        "core-capability": false,
-+        "vmx-invept-single-context": true,
-+        "movdiri": false,
-+        "acpi": false,
-+        "avx512bw": false,
-+        "ace2": false,
-+        "fsgsbase": true,
-+        "vmx-ept-2mb": true,
-+        "vmx-ept-1gb": true,
-+        "ht": false,
-+        "vmx-io-exit": true,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "popcnt": true,
-+        "vaes": false,
-+        "movdir64b": false,
-+        "xsaves": true,
-+        "vmx-shadow-vmcs": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": true,
-+        "vmx-entry-load-pat": true,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": true,
-+        "umip": true,
-+        "vmx-store-lma": true,
-+        "vmx-movdr-exit": true,
-+        "pse": true,
-+        "avx2": true,
-+        "sep": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": true,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "misalignsse": false,
-+        "split-lock-detect": false,
-+        "min-xlevel": 2147483656,
-+        "bmi1": true,
-+        "bmi2": true,
-+        "kvm-pv-unhalt": true,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "amd-stibp": false,
-+        "vmx-preemption-timer": true,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": true,
-+        "monitor": false,
-+        "vmx-vintr-pending": true,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": true,
-+        "taa-no": false,
-+        "arch-capabilities": true,
-+        "vmx-secondary-ctls": true,
-+        "vmx-xsaves": true,
-+        "clzero": false,
-+        "3dnow": false,
-+        "erms": true,
-+        "vmx-entry-ia32e-mode": true,
-+        "lahf-lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": true,
-+        "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": true,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": true,
-+        "vmx-mtf": true,
-+        "vmx-entry-load-efer": true,
-+        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
-+        "sha-ni": false,
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": true,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-47"
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "static",
-+    "model": {
-+      "name": "host",
-+      "props": {
-+        "migratable": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-48"
-+}
-+
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": true,
-+        "mmx": true,
-+        "rdpid": false,
-+        "arat": true,
-+        "vmx-page-walk-4": true,
-+        "vmx-page-walk-5": false,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "vmx-desc-exit": true,
-+        "pause-filter": false,
-+        "xsavec": true,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": true,
-+        "vmx-rdseed-exit": true,
-+        "vmx-eptp-switching": true,
-+        "kvm-asyncpf": true,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "avx512cd": false,
-+        "decodeassists": false,
-+        "vmx-exit-load-efer": true,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4.1": true,
-+        "family": 6,
-+        "vmx-vmwrite-vmexit-fields": true,
-+        "vmx-vnmi": true,
-+        "vmx-true-ctls": true,
-+        "vmx-ept-execonly": true,
-+        "vmx-exit-save-efer": true,
-+        "vmx-invept-all-context": true,
-+        "wbnoinvd": false,
-+        "avx512f": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "xcrypt": false,
-+        "vmx-exit-load-pat": true,
-+        "vmx-intr-exit": true,
-+        "min-level": 22,
-+        "vmx-flexpriority": true,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": false,
-+        "vmx-cr8-load-exit": true,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": false,
-+        "vmx-exit-save-pat": true,
-+        "xtpr": false,
-+        "tsx-ctrl": false,
-+        "vmx-ple": false,
-+        "avx512vl": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": true,
-+        "vmx-vmfunc": true,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "cr8legacy": false,
-+        "vmx-encls-exit": false,
-+        "stibp": true,
-+        "vmx-msr-bitmap": true,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": true,
-+        "vmx-pml": true,
-+        "vmx-nmi-exit": true,
-+        "vmx-invept-single-context-noglobals": true,
-+        "pn": false,
-+        "rsba": false,
-+        "dca": false,
-+        "vendor": "GenuineIntel",
-+        "vmx-unrestricted-guest": true,
-+        "vmx-cr3-store-noexit": true,
-+        "pku": false,
-+        "smx": false,
-+        "cmp-legacy": false,
-+        "avx512-4fmaps": false,
-+        "vmcb-clean": false,
-+        "hle": true,
-+        "3dnowext": false,
-+        "amd-no-ssb": false,
-+        "npt": false,
-+        "rdctl-no": false,
-+        "vmx-invvpid": true,
-+        "clwb": false,
-+        "lbrv": false,
-+        "adx": true,
-+        "ss": true,
-+        "pni": true,
-+        "svm-lock": false,
-+        "smep": true,
-+        "smap": true,
-+        "pfthreshold": false,
-+        "vmx-invpcid-exit": true,
-+        "x2apic": true,
-+        "avx512vbmi": false,
-+        "avx512vnni": false,
-+        "vmx-apicv-x2apic": true,
-+        "kvm-pv-sched-yield": true,
-+        "vmx-invlpg-exit": true,
-+        "vmx-invvpid-all-context": true,
-+        "vmx-activity-hlt": true,
-+        "flushbyasid": false,
-+        "f16c": true,
-+        "vmx-exit-ack-intr": true,
-+        "ace2-en": false,
-+        "pae": true,
-+        "pat": true,
-+        "sse": true,
-+        "phe-en": false,
-+        "vmx-tsc-offset": true,
-+        "kvm-nopiodelay": true,
-+        "tm": false,
-+        "kvmclock-stable-bit": true,
-+        "vmx-rdtsc-exit": true,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": true,
-+        "mds-no": false,
-+        "pcommit": false,
-+        "vmx-vpid": true,
-+        "syscall": true,
-+        "avx512dq": false,
-+        "svm": false,
-+        "invtsc": true,
-+        "vmx-monitor-exit": true,
-+        "sse2": true,
-+        "ssbd": true,
-+        "vmx-wbinvd-exit": true,
-+        "est": false,
-+        "kvm-poll-control": true,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-eoi": true,
-+        "kvm-pv-ipi": true,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": true,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": true,
-+        "kvm-mmu": false,
-+        "sse4.2": true,
-+        "pge": true,
-+        "avx512bitalg": false,
-+        "pdcm": false,
-+        "vmx-entry-load-bndcfgs": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "model": 94,
-+        "movbe": true,
-+        "nrip-save": false,
-+        "ssse3": true,
-+        "sse4a": false,
-+        "vmx-pause-exit": true,
-+        "invpcid": true,
-+        "pdpe1gb": true,
-+        "tsc-deadline": true,
-+        "skip-l1dfl-vmentry": true,
-+        "vmx-exit-load-perf-global-ctrl": false,
-+        "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,
-+        "vmx-exit-nosave-debugctl": true,
-+        "la57": false,
-+        "vmx-invept": true,
-+        "osvw": false,
-+        "apic": true,
-+        "pmm": false,
-+        "vmx-entry-noload-debugctl": true,
-+        "vmx-eptad": true,
-+        "spec-ctrl": true,
-+        "vmx-posted-intr": false,
-+        "vmx-apicv-register": false,
-+        "tsc-adjust": true,
-+        "kvm-steal-time": true,
-+        "kvmclock": true,
-+        "vmx-zero-len-inject": false,
-+        "pschange-mc-no": true,
-+        "vmx-rdrand-exit": true,
-+        "lwp": false,
-+        "amd-ssbd": false,
-+        "xop": false,
-+        "ibpb": false,
-+        "avx": true,
-+        "core-capability": false,
-+        "vmx-invept-single-context": true,
-+        "movdiri": false,
-+        "acpi": false,
-+        "avx512bw": false,
-+        "ace2": false,
-+        "fsgsbase": true,
-+        "vmx-ept-2mb": true,
-+        "vmx-ept-1gb": true,
-+        "ht": false,
-+        "vmx-io-exit": true,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": false,
-+        "popcnt": true,
-+        "vaes": false,
-+        "movdir64b": false,
-+        "xsaves": true,
-+        "vmx-shadow-vmcs": true,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": true,
-+        "vmx-entry-load-pat": true,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": true,
-+        "umip": true,
-+        "vmx-store-lma": true,
-+        "vmx-movdr-exit": true,
-+        "pse": true,
-+        "avx2": true,
-+        "sep": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": true,
-+        "nodeid-msr": false,
-+        "md-clear": true,
-+        "misalignsse": false,
-+        "split-lock-detect": false,
-+        "min-xlevel": 2147483656,
-+        "bmi1": true,
-+        "bmi2": true,
-+        "kvm-pv-unhalt": true,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "amd-stibp": false,
-+        "vmx-preemption-timer": true,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": true,
-+        "monitor": false,
-+        "vmx-vintr-pending": true,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": true,
-+        "taa-no": false,
-+        "arch-capabilities": true,
-+        "vmx-secondary-ctls": true,
-+        "vmx-xsaves": true,
-+        "clzero": false,
-+        "3dnow": false,
-+        "erms": true,
-+        "vmx-entry-ia32e-mode": true,
-+        "lahf-lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": true,
-+        "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": true,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": true,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": true,
-+        "vmx-mtf": true,
-+        "vmx-entry-load-efer": true,
-+        "model-id": "Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz",
-+        "sha-ni": false,
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": true,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-48"
-+}
-+
-+{
-+  "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-v1",
-+      "typename": "qemu64-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu64",
-+      "typename": "qemu64-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "qemu64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32-v1",
-+      "typename": "qemu32-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "qemu32",
-+      "typename": "qemu32-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "qemu32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom-v1",
-+      "typename": "phenom-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fxsr-opt"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "phenom",
-+      "typename": "phenom-x86_64-cpu",
-+      "unavailable-features": [
-+        "fxsr-opt"
-+      ],
-+      "alias-of": "phenom-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3-v1",
-+      "typename": "pentium3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium3",
-+      "typename": "pentium3-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "pentium3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2-v1",
-+      "typename": "pentium2-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium2",
-+      "typename": "pentium2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "pentium2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium-v1",
-+      "typename": "pentium-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "pentium",
-+      "typename": "pentium-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "pentium-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270-v1",
-+      "typename": "n270-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "n270",
-+      "typename": "n270-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "n270-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64-v1",
-+      "typename": "kvm64-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm64",
-+      "typename": "kvm64-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "kvm64-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32-v1",
-+      "typename": "kvm32-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "kvm32",
-+      "typename": "kvm32-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "kvm32-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo-v1",
-+      "typename": "coreduo-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "coreduo",
-+      "typename": "coreduo-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "coreduo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo-v1",
-+      "typename": "core2duo-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "core2duo",
-+      "typename": "core2duo-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "core2duo-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon-v1",
-+      "typename": "athlon-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "athlon",
-+      "typename": "athlon-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "athlon-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v2",
-+      "typename": "Westmere-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "spec-ctrl"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-v1",
-+      "typename": "Westmere-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere-IBRS",
-+      "typename": "Westmere-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "spec-ctrl"
-+      ],
-+      "alias-of": "Westmere-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Westmere",
-+      "typename": "Westmere-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Westmere-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v2",
-+      "typename": "Snowridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "rdseed",
-+        "sha-ni",
-+        "umip",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "core-capability",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge-v1",
-+      "typename": "Snowridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "rdseed",
-+        "sha-ni",
-+        "umip",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "core-capability",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "split-lock-detect"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Snowridge",
-+      "typename": "Snowridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "rdseed",
-+        "sha-ni",
-+        "umip",
-+        "gfni",
-+        "cldemote",
-+        "movdiri",
-+        "movdir64b",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "core-capability",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "split-lock-detect"
-+      ],
-+      "alias-of": "Snowridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v3",
-+      "typename": "Skylake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v2",
-+      "typename": "Skylake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-v1",
-+      "typename": "Skylake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server-noTSX-IBRS",
-+      "typename": "Skylake-Server-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Skylake-Server-v3",
-+      "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",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Skylake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Server",
-+      "typename": "Skylake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Skylake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v3",
-+      "typename": "Skylake-Client-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v2",
-+      "typename": "Skylake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-v1",
-+      "typename": "Skylake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client-noTSX-IBRS",
-+      "typename": "Skylake-Client-noTSX-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Skylake-Client-v3",
-+      "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",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Skylake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Skylake-Client",
-+      "typename": "Skylake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Skylake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v2",
-+      "typename": "SandyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "spec-ctrl"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-v1",
-+      "typename": "SandyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge-IBRS",
-+      "typename": "SandyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "spec-ctrl"
-+      ],
-+      "alias-of": "SandyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "SandyBridge",
-+      "typename": "SandyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx"
-+      ],
-+      "alias-of": "SandyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn-v1",
-+      "typename": "Penryn-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Penryn",
-+      "typename": "Penryn-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Penryn-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5-v1",
-+      "typename": "Opteron_G5-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G5",
-+      "typename": "Opteron_G5-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "xop",
-+        "fma4",
-+        "tbm",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Opteron_G5-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4-v1",
-+      "typename": "Opteron_G4-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "xop",
-+        "fma4",
-+        "nrip-save"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G4",
-+      "typename": "Opteron_G4-x86_64-cpu",
-+      "unavailable-features": [
-+        "avx",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "xop",
-+        "fma4",
-+        "nrip-save"
-+      ],
-+      "alias-of": "Opteron_G4-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3-v1",
-+      "typename": "Opteron_G3-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "misalignsse"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G3",
-+      "typename": "Opteron_G3-x86_64-cpu",
-+      "unavailable-features": [
-+        "misalignsse"
-+      ],
-+      "alias-of": "Opteron_G3-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2-v1",
-+      "typename": "Opteron_G2-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G2",
-+      "typename": "Opteron_G2-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Opteron_G2-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1-v1",
-+      "typename": "Opteron_G1-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Opteron_G1",
-+      "typename": "Opteron_G1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Opteron_G1-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v2",
-+      "typename": "Nehalem-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "spec-ctrl"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-v1",
-+      "typename": "Nehalem-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem-IBRS",
-+      "typename": "Nehalem-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "spec-ctrl"
-+      ],
-+      "alias-of": "Nehalem-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Nehalem",
-+      "typename": "Nehalem-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Nehalem-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill-v1",
-+      "typename": "KnightsMill-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "avx512f",
-+        "rdseed",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "3dnowprefetch"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "KnightsMill",
-+      "typename": "KnightsMill-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "avx512f",
-+        "rdseed",
-+        "avx512pf",
-+        "avx512er",
-+        "avx512cd",
-+        "avx512-vpopcntdq",
-+        "avx512-4vnniw",
-+        "avx512-4fmaps",
-+        "3dnowprefetch"
-+      ],
-+      "alias-of": "KnightsMill-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v2",
-+      "typename": "IvyBridge-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "spec-ctrl"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-v1",
-+      "typename": "IvyBridge-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge-IBRS",
-+      "typename": "IvyBridge-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "spec-ctrl"
-+      ],
-+      "alias-of": "IvyBridge-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "IvyBridge",
-+      "typename": "IvyBridge-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c"
-+      ],
-+      "alias-of": "IvyBridge-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v2",
-+      "typename": "Icelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-v1",
-+      "typename": "Icelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server-noTSX",
-+      "typename": "Icelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "alias-of": "Icelake-Server-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Server",
-+      "typename": "Icelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "alias-of": "Icelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v2",
-+      "typename": "Icelake-Client-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-v1",
-+      "typename": "Icelake-Client-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client-noTSX",
-+      "typename": "Icelake-Client-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "alias-of": "Icelake-Client-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Icelake-Client",
-+      "typename": "Icelake-Client-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "avx512vbmi",
-+        "umip",
-+        "avx512vbmi2",
-+        "gfni",
-+        "vaes",
-+        "vpclmulqdq",
-+        "avx512vnni",
-+        "avx512bitalg",
-+        "avx512-vpopcntdq",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "wbnoinvd",
-+        "xsavec"
-+      ],
-+      "alias-of": "Icelake-Client-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v4",
-+      "typename": "Haswell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "spec-ctrl"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v3",
-+      "typename": "Haswell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "spec-ctrl"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v2",
-+      "typename": "Haswell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-v1",
-+      "typename": "Haswell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "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",
-+        "avx2",
-+        "invpcid",
-+        "spec-ctrl"
-+      ],
-+      "alias-of": "Haswell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-noTSX",
-+      "typename": "Haswell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid"
-+      ],
-+      "alias-of": "Haswell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell-IBRS",
-+      "typename": "Haswell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "spec-ctrl"
-+      ],
-+      "alias-of": "Haswell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Haswell",
-+      "typename": "Haswell-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm"
-+      ],
-+      "alias-of": "Haswell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v3",
-+      "typename": "EPYC-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "ibpb",
-+        "nrip-save",
-+        "xsavec",
-+        "xsaves"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v2",
-+      "typename": "EPYC-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "ibpb",
-+        "nrip-save",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-v1",
-+      "typename": "EPYC-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "nrip-save",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome-v1",
-+      "typename": "EPYC-Rome-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "umip",
-+        "rdpid",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "ibpb",
-+        "amd-stibp",
-+        "nrip-save",
-+        "xsavec",
-+        "xsaves"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-Rome",
-+      "typename": "EPYC-Rome-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "umip",
-+        "rdpid",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "perfctr-core",
-+        "clzero",
-+        "xsaveerptr",
-+        "wbnoinvd",
-+        "ibpb",
-+        "amd-stibp",
-+        "nrip-save",
-+        "xsavec",
-+        "xsaves"
-+      ],
-+      "alias-of": "EPYC-Rome-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC-IBPB",
-+      "typename": "EPYC-IBPB-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "ibpb",
-+        "nrip-save",
-+        "xsavec"
-+      ],
-+      "alias-of": "EPYC-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "EPYC",
-+      "typename": "EPYC-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "sha-ni",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "nrip-save",
-+        "xsavec"
-+      ],
-+      "alias-of": "EPYC-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana-v1",
-+      "typename": "Dhyana-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "ibpb",
-+        "nrip-save",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Dhyana",
-+      "typename": "Dhyana-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "rdseed",
-+        "fxsr-opt",
-+        "misalignsse",
-+        "3dnowprefetch",
-+        "osvw",
-+        "topoext",
-+        "ibpb",
-+        "nrip-save",
-+        "xsavec"
-+      ],
-+      "alias-of": "Dhyana-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v2",
-+      "typename": "Denverton-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "rdseed",
-+        "sha-ni",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "skip-l1dfl-vmentry"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton-v1",
-+      "typename": "Denverton-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "rdseed",
-+        "sha-ni",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "skip-l1dfl-vmentry"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Denverton",
-+      "typename": "Denverton-x86_64-cpu",
-+      "unavailable-features": [
-+        "x2apic",
-+        "tsc-deadline",
-+        "rdseed",
-+        "sha-ni",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "skip-l1dfl-vmentry"
-+      ],
-+      "alias-of": "Denverton-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake-v1",
-+      "typename": "Cooperlake-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "stibp",
-+        "arch-capabilities",
-+        "ssbd",
-+        "avx512-bf16",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "skip-l1dfl-vmentry",
-+        "mds-no",
-+        "pschange-mc-no",
-+        "taa-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cooperlake",
-+      "typename": "Cooperlake-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "stibp",
-+        "arch-capabilities",
-+        "ssbd",
-+        "avx512-bf16",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "skip-l1dfl-vmentry",
-+        "mds-no",
-+        "pschange-mc-no",
-+        "taa-no"
-+      ],
-+      "alias-of": "Cooperlake-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe-v1",
-+      "typename": "Conroe-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Conroe",
-+      "typename": "Conroe-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "Conroe-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v3",
-+      "typename": "Cascadelake-Server-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "skip-l1dfl-vmentry",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v2",
-+      "typename": "Cascadelake-Server-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "skip-l1dfl-vmentry",
-+        "mds-no"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-v1",
-+      "typename": "Cascadelake-Server-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server-noTSX",
-+      "typename": "Cascadelake-Server-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "arch-capabilities",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec",
-+        "rdctl-no",
-+        "ibrs-all",
-+        "skip-l1dfl-vmentry",
-+        "mds-no"
-+      ],
-+      "alias-of": "Cascadelake-Server-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Cascadelake-Server",
-+      "typename": "Cascadelake-Server-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "avx512f",
-+        "avx512dq",
-+        "rdseed",
-+        "avx512cd",
-+        "avx512bw",
-+        "avx512vl",
-+        "avx512vnni",
-+        "spec-ctrl",
-+        "ssbd",
-+        "3dnowprefetch",
-+        "xsavec"
-+      ],
-+      "alias-of": "Cascadelake-Server-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v4",
-+      "typename": "Broadwell-v4-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v3",
-+      "typename": "Broadwell-v3-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v2",
-+      "typename": "Broadwell-v2-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "3dnowprefetch"
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-v1",
-+      "typename": "Broadwell-v1-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "3dnowprefetch"
-+      ],
-+      "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",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch"
-+      ],
-+      "alias-of": "Broadwell-v4",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-noTSX",
-+      "typename": "Broadwell-noTSX-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "avx2",
-+        "invpcid",
-+        "rdseed",
-+        "3dnowprefetch"
-+      ],
-+      "alias-of": "Broadwell-v2",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell-IBRS",
-+      "typename": "Broadwell-IBRS-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "spec-ctrl",
-+        "3dnowprefetch"
-+      ],
-+      "alias-of": "Broadwell-v3",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "Broadwell",
-+      "typename": "Broadwell-x86_64-cpu",
-+      "unavailable-features": [
-+        "fma",
-+        "pcid",
-+        "x2apic",
-+        "tsc-deadline",
-+        "avx",
-+        "f16c",
-+        "hle",
-+        "avx2",
-+        "invpcid",
-+        "rtm",
-+        "rdseed",
-+        "3dnowprefetch"
-+      ],
-+      "alias-of": "Broadwell-v1",
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486-v1",
-+      "typename": "486-v1-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "static": false,
-+      "migration-safe": true
-+    },
-+    {
-+      "name": "486",
-+      "typename": "486-x86_64-cpu",
-+      "unavailable-features": [
-+      ],
-+      "alias-of": "486-v1",
-+      "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": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": false,
-+        "mmx": true,
-+        "rdpid": false,
-+        "arat": true,
-+        "vmx-page-walk-4": false,
-+        "vmx-page-walk-5": false,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "vmx-desc-exit": false,
-+        "pause-filter": false,
-+        "xsavec": false,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": false,
-+        "vmx-rdseed-exit": false,
-+        "vmx-eptp-switching": false,
-+        "kvm-asyncpf": false,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "avx512cd": false,
-+        "decodeassists": false,
-+        "vmx-exit-load-efer": false,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4.1": true,
-+        "family": 6,
-+        "vmx-vmwrite-vmexit-fields": false,
-+        "vmx-vnmi": false,
-+        "vmx-true-ctls": false,
-+        "vmx-ept-execonly": false,
-+        "vmx-exit-save-efer": false,
-+        "vmx-invept-all-context": false,
-+        "wbnoinvd": false,
-+        "avx512f": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "xcrypt": false,
-+        "vmx-exit-load-pat": false,
-+        "vmx-intr-exit": false,
-+        "min-level": 13,
-+        "vmx-flexpriority": false,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": false,
-+        "vmx-cr8-load-exit": false,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": false,
-+        "vmx-exit-save-pat": false,
-+        "xtpr": false,
-+        "tsx-ctrl": false,
-+        "vmx-ple": false,
-+        "avx512vl": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": false,
-+        "vmx-vmfunc": false,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "cr8legacy": true,
-+        "vmx-encls-exit": false,
-+        "stibp": false,
-+        "vmx-msr-bitmap": false,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": false,
-+        "vmx-pml": false,
-+        "vmx-nmi-exit": false,
-+        "vmx-invept-single-context-noglobals": false,
-+        "pn": false,
-+        "rsba": false,
-+        "dca": false,
-+        "vendor": "AuthenticAMD",
-+        "vmx-unrestricted-guest": false,
-+        "vmx-cr3-store-noexit": false,
-+        "pku": true,
-+        "smx": false,
-+        "cmp-legacy": false,
-+        "avx512-4fmaps": false,
-+        "vmcb-clean": false,
-+        "hle": false,
-+        "3dnowext": true,
-+        "amd-no-ssb": false,
-+        "npt": true,
-+        "rdctl-no": false,
-+        "vmx-invvpid": false,
-+        "clwb": true,
-+        "lbrv": false,
-+        "adx": true,
-+        "ss": true,
-+        "pni": true,
-+        "svm-lock": false,
-+        "smep": true,
-+        "smap": true,
-+        "pfthreshold": false,
-+        "vmx-invpcid-exit": false,
-+        "x2apic": false,
-+        "avx512vbmi": false,
-+        "avx512vnni": false,
-+        "vmx-apicv-x2apic": false,
-+        "kvm-pv-sched-yield": false,
-+        "vmx-invlpg-exit": false,
-+        "vmx-invvpid-all-context": false,
-+        "vmx-activity-hlt": false,
-+        "flushbyasid": false,
-+        "f16c": false,
-+        "vmx-exit-ack-intr": false,
-+        "ace2-en": false,
-+        "pae": true,
-+        "pat": true,
-+        "sse": true,
-+        "phe-en": false,
-+        "vmx-tsc-offset": false,
-+        "kvm-nopiodelay": false,
-+        "tm": false,
-+        "kvmclock-stable-bit": false,
-+        "vmx-rdtsc-exit": false,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": false,
-+        "mds-no": false,
-+        "pcommit": true,
-+        "vmx-vpid": false,
-+        "syscall": true,
-+        "avx512dq": false,
-+        "svm": true,
-+        "invtsc": false,
-+        "vmx-monitor-exit": false,
-+        "sse2": true,
-+        "ssbd": false,
-+        "vmx-wbinvd-exit": false,
-+        "est": false,
-+        "kvm-poll-control": false,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-eoi": false,
-+        "kvm-pv-ipi": false,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": false,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": false,
-+        "kvm-mmu": false,
-+        "sse4.2": true,
-+        "pge": true,
-+        "avx512bitalg": false,
-+        "pdcm": false,
-+        "vmx-entry-load-bndcfgs": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "model": 6,
-+        "movbe": true,
-+        "nrip-save": false,
-+        "ssse3": true,
-+        "sse4a": true,
-+        "vmx-pause-exit": false,
-+        "invpcid": false,
-+        "pdpe1gb": true,
-+        "tsc-deadline": false,
-+        "skip-l1dfl-vmentry": false,
-+        "vmx-exit-load-perf-global-ctrl": 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,
-+        "vmx-exit-nosave-debugctl": false,
-+        "la57": true,
-+        "vmx-invept": false,
-+        "osvw": false,
-+        "apic": true,
-+        "pmm": false,
-+        "vmx-entry-noload-debugctl": false,
-+        "vmx-eptad": false,
-+        "spec-ctrl": false,
-+        "vmx-posted-intr": false,
-+        "vmx-apicv-register": false,
-+        "tsc-adjust": false,
-+        "kvm-steal-time": false,
-+        "kvmclock": false,
-+        "vmx-zero-len-inject": false,
-+        "pschange-mc-no": false,
-+        "vmx-rdrand-exit": false,
-+        "lwp": false,
-+        "amd-ssbd": false,
-+        "xop": false,
-+        "ibpb": false,
-+        "avx": false,
-+        "core-capability": false,
-+        "vmx-invept-single-context": false,
-+        "movdiri": false,
-+        "acpi": true,
-+        "avx512bw": false,
-+        "ace2": false,
-+        "fsgsbase": true,
-+        "vmx-ept-2mb": false,
-+        "vmx-ept-1gb": false,
-+        "ht": false,
-+        "vmx-io-exit": false,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": true,
-+        "popcnt": true,
-+        "vaes": false,
-+        "movdir64b": false,
-+        "xsaves": false,
-+        "vmx-shadow-vmcs": false,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": false,
-+        "vmx-entry-load-pat": false,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": false,
-+        "umip": false,
-+        "vmx-store-lma": false,
-+        "vmx-movdr-exit": false,
-+        "pse": true,
-+        "avx2": false,
-+        "sep": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": false,
-+        "nodeid-msr": false,
-+        "md-clear": false,
-+        "misalignsse": false,
-+        "split-lock-detect": false,
-+        "min-xlevel": 2147483658,
-+        "bmi1": true,
-+        "bmi2": true,
-+        "kvm-pv-unhalt": false,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "amd-stibp": false,
-+        "vmx-preemption-timer": false,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": false,
-+        "monitor": true,
-+        "vmx-vintr-pending": false,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": false,
-+        "taa-no": false,
-+        "arch-capabilities": false,
-+        "vmx-secondary-ctls": false,
-+        "vmx-xsaves": false,
-+        "clzero": false,
-+        "3dnow": true,
-+        "erms": true,
-+        "vmx-entry-ia32e-mode": false,
-+        "lahf-lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": false,
-+        "fxsr-opt": false,
-+        "xstore": false,
-+        "rtm": false,
-+        "kvm-hint-dedicated": false,
-+        "lmce": false,
-+        "perfctr-nb": false,
-+        "rdrand": true,
-+        "rdseed": false,
-+        "avx512-4vnniw": false,
-+        "vme": false,
-+        "vmx": false,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": false,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": false,
-+        "vmx-mtf": false,
-+        "vmx-entry-load-efer": false,
-+        "model-id": "QEMU TCG CPU version 2.5+",
-+        "sha-ni": false,
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": false,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "static",
-+    "model": {
-+      "name": "max",
-+      "props": {
-+        "migratable": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "return": {
-+    "model": {
-+      "name": "base",
-+      "props": {
-+        "vmx-entry-load-rtit-ctl": false,
-+        "cmov": true,
-+        "ia64": false,
-+        "ssb-no": false,
-+        "aes": true,
-+        "vmx-apicv-xapic": false,
-+        "mmx": true,
-+        "rdpid": false,
-+        "arat": true,
-+        "vmx-page-walk-4": false,
-+        "vmx-page-walk-5": false,
-+        "gfni": false,
-+        "ibrs-all": false,
-+        "vmx-desc-exit": false,
-+        "pause-filter": false,
-+        "xsavec": false,
-+        "intel-pt": false,
-+        "vmx-cr8-store-exit": false,
-+        "vmx-rdseed-exit": false,
-+        "vmx-eptp-switching": false,
-+        "kvm-asyncpf": false,
-+        "perfctr-core": false,
-+        "mpx": true,
-+        "pbe": false,
-+        "avx512cd": false,
-+        "decodeassists": false,
-+        "vmx-exit-load-efer": false,
-+        "vmx-exit-clear-bndcfgs": false,
-+        "sse4.1": true,
-+        "family": 6,
-+        "vmx-vmwrite-vmexit-fields": false,
-+        "vmx-vnmi": false,
-+        "vmx-true-ctls": false,
-+        "vmx-ept-execonly": false,
-+        "vmx-exit-save-efer": false,
-+        "vmx-invept-all-context": false,
-+        "wbnoinvd": false,
-+        "avx512f": false,
-+        "msr": true,
-+        "mce": true,
-+        "mca": true,
-+        "xcrypt": false,
-+        "vmx-exit-load-pat": false,
-+        "vmx-intr-exit": false,
-+        "min-level": 13,
-+        "vmx-flexpriority": false,
-+        "xgetbv1": true,
-+        "cid": false,
-+        "ds": false,
-+        "fxsr": true,
-+        "avx512-bf16": false,
-+        "vmx-cr8-load-exit": false,
-+        "xsaveopt": true,
-+        "vmx-apicv-vid": false,
-+        "vmx-exit-save-pat": false,
-+        "xtpr": false,
-+        "tsx-ctrl": false,
-+        "vmx-ple": false,
-+        "avx512vl": false,
-+        "avx512-vpopcntdq": false,
-+        "phe": false,
-+        "extapic": false,
-+        "3dnowprefetch": false,
-+        "vmx-vmfunc": false,
-+        "vmx-activity-shutdown": false,
-+        "avx512vbmi2": false,
-+        "cr8legacy": true,
-+        "vmx-encls-exit": false,
-+        "stibp": false,
-+        "vmx-msr-bitmap": false,
-+        "xcrypt-en": false,
-+        "vmx-mwait-exit": false,
-+        "vmx-pml": false,
-+        "vmx-nmi-exit": false,
-+        "vmx-invept-single-context-noglobals": false,
-+        "pn": false,
-+        "rsba": false,
-+        "dca": false,
-+        "vendor": "AuthenticAMD",
-+        "vmx-unrestricted-guest": false,
-+        "vmx-cr3-store-noexit": false,
-+        "pku": true,
-+        "smx": false,
-+        "cmp-legacy": false,
-+        "avx512-4fmaps": false,
-+        "vmcb-clean": false,
-+        "hle": false,
-+        "3dnowext": true,
-+        "amd-no-ssb": false,
-+        "npt": true,
-+        "rdctl-no": false,
-+        "vmx-invvpid": false,
-+        "clwb": true,
-+        "lbrv": false,
-+        "adx": true,
-+        "ss": true,
-+        "pni": true,
-+        "svm-lock": false,
-+        "smep": true,
-+        "smap": true,
-+        "pfthreshold": false,
-+        "vmx-invpcid-exit": false,
-+        "x2apic": false,
-+        "avx512vbmi": false,
-+        "avx512vnni": false,
-+        "vmx-apicv-x2apic": false,
-+        "kvm-pv-sched-yield": false,
-+        "vmx-invlpg-exit": false,
-+        "vmx-invvpid-all-context": false,
-+        "vmx-activity-hlt": false,
-+        "flushbyasid": false,
-+        "f16c": false,
-+        "vmx-exit-ack-intr": false,
-+        "ace2-en": false,
-+        "pae": true,
-+        "pat": true,
-+        "sse": true,
-+        "phe-en": false,
-+        "vmx-tsc-offset": false,
-+        "kvm-nopiodelay": false,
-+        "tm": false,
-+        "kvmclock-stable-bit": false,
-+        "vmx-rdtsc-exit": false,
-+        "hypervisor": true,
-+        "vmx-rdtscp-exit": false,
-+        "mds-no": false,
-+        "pcommit": true,
-+        "vmx-vpid": false,
-+        "syscall": true,
-+        "avx512dq": false,
-+        "svm": true,
-+        "invtsc": false,
-+        "vmx-monitor-exit": false,
-+        "sse2": true,
-+        "ssbd": false,
-+        "vmx-wbinvd-exit": false,
-+        "est": false,
-+        "kvm-poll-control": false,
-+        "avx512ifma": false,
-+        "tm2": false,
-+        "kvm-pv-eoi": false,
-+        "kvm-pv-ipi": false,
-+        "cx8": true,
-+        "vmx-invvpid-single-addr": false,
-+        "waitpkg": false,
-+        "cldemote": false,
-+        "vmx-ept": false,
-+        "kvm-mmu": false,
-+        "sse4.2": true,
-+        "pge": true,
-+        "avx512bitalg": false,
-+        "pdcm": false,
-+        "vmx-entry-load-bndcfgs": false,
-+        "vmx-exit-clear-rtit-ctl": false,
-+        "model": 6,
-+        "movbe": true,
-+        "nrip-save": false,
-+        "ssse3": true,
-+        "sse4a": true,
-+        "vmx-pause-exit": false,
-+        "invpcid": false,
-+        "pdpe1gb": true,
-+        "tsc-deadline": false,
-+        "skip-l1dfl-vmentry": false,
-+        "vmx-exit-load-perf-global-ctrl": 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,
-+        "vmx-exit-nosave-debugctl": false,
-+        "la57": true,
-+        "vmx-invept": false,
-+        "osvw": false,
-+        "apic": true,
-+        "pmm": false,
-+        "vmx-entry-noload-debugctl": false,
-+        "vmx-eptad": false,
-+        "spec-ctrl": false,
-+        "vmx-posted-intr": false,
-+        "vmx-apicv-register": false,
-+        "tsc-adjust": false,
-+        "kvm-steal-time": false,
-+        "kvmclock": false,
-+        "vmx-zero-len-inject": false,
-+        "pschange-mc-no": false,
-+        "vmx-rdrand-exit": false,
-+        "lwp": false,
-+        "amd-ssbd": false,
-+        "xop": false,
-+        "ibpb": false,
-+        "avx": false,
-+        "core-capability": false,
-+        "vmx-invept-single-context": false,
-+        "movdiri": false,
-+        "acpi": true,
-+        "avx512bw": false,
-+        "ace2": false,
-+        "fsgsbase": true,
-+        "vmx-ept-2mb": false,
-+        "vmx-ept-1gb": false,
-+        "ht": false,
-+        "vmx-io-exit": false,
-+        "nx": true,
-+        "pclmulqdq": true,
-+        "mmxext": true,
-+        "popcnt": true,
-+        "vaes": false,
-+        "movdir64b": false,
-+        "xsaves": false,
-+        "vmx-shadow-vmcs": false,
-+        "lm": true,
-+        "vmx-exit-save-preemption-timer": false,
-+        "vmx-entry-load-pat": false,
-+        "vmx-entry-load-perf-global-ctrl": false,
-+        "vmx-io-bitmap": false,
-+        "umip": false,
-+        "vmx-store-lma": false,
-+        "vmx-movdr-exit": false,
-+        "pse": true,
-+        "avx2": false,
-+        "sep": true,
-+        "virt-ssbd": false,
-+        "vmx-cr3-load-noexit": false,
-+        "nodeid-msr": false,
-+        "md-clear": false,
-+        "misalignsse": false,
-+        "split-lock-detect": false,
-+        "min-xlevel": 2147483658,
-+        "bmi1": true,
-+        "bmi2": true,
-+        "kvm-pv-unhalt": false,
-+        "tsc-scale": false,
-+        "topoext": false,
-+        "amd-stibp": false,
-+        "vmx-preemption-timer": false,
-+        "clflushopt": true,
-+        "vmx-vnmi-pending": false,
-+        "monitor": true,
-+        "vmx-vintr-pending": false,
-+        "avx512er": false,
-+        "pmm-en": false,
-+        "pcid": false,
-+        "taa-no": false,
-+        "arch-capabilities": false,
-+        "vmx-secondary-ctls": false,
-+        "vmx-xsaves": false,
-+        "clzero": false,
-+        "3dnow": true,
-+        "erms": true,
-+        "vmx-entry-ia32e-mode": false,
-+        "lahf-lm": true,
-+        "vpclmulqdq": false,
-+        "vmx-ins-outs": false,
-+        "fxsr-opt": false,
-+        "xstore": false,
-+        "rtm": false,
-+        "kvm-hint-dedicated": false,
-+        "lmce": false,
-+        "perfctr-nb": false,
-+        "rdrand": true,
-+        "rdseed": false,
-+        "avx512-4vnniw": false,
-+        "vme": false,
-+        "vmx": false,
-+        "dtes64": false,
-+        "mtrr": true,
-+        "rdtscp": true,
-+        "xsaveerptr": false,
-+        "pse36": true,
-+        "kvm-pv-tlb-flush": false,
-+        "vmx-activity-wait-sipi": false,
-+        "tbm": false,
-+        "wdt": false,
-+        "vmx-rdpmc-exit": false,
-+        "vmx-mtf": false,
-+        "vmx-entry-load-efer": false,
-+        "model-id": "QEMU TCG CPU version 2.5+",
-+        "sha-ni": false,
-+        "abm": true,
-+        "vmx-ept-advanced-exitinfo": false,
-+        "avx512pf": false,
-+        "vmx-hlt-exit": false,
-+        "xstore-en": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-5"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.12",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.5",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-4.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.5",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "none",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.4",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.10",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.9",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.11",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-3.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.4",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.3",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-4.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.9",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "isapc",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "486-x86_64-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.4",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-3.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.12",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.0.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-1.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-5.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false,
-+      "alias": "q35"
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.8",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.10",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-3.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-4.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "microvm",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.3",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-1.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": true
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-4.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-5.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "is-default": true,
-+      "cpu-max": 255,
-+      "deprecated": false,
-+      "alias": "pc"
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-2.8",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.5",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-i440fx-3.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": true,
-+      "name": "pc-q35-2.11",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "qemu64-x86_64-cpu",
-+      "cpu-max": 288,
-+      "deprecated": false
-+    }
-+  ],
-+  "id": "libvirt-5"
-+}
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-new file mode 100644
-index 0000000000..d0b5f18c02
---- /dev/null
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
-@@ -0,0 +1,2842 @@
-+<qemuCaps>
-+  <emulator>/usr/bin/qemu-system-x86_64</emulator>
-+  <qemuctime>0</qemuctime>
-+  <selfctime>0</selfctime>
-+  <selfvers>0</selfvers>
-+  <flag name='kvm'/>
-+  <flag name='no-hpet'/>
-+  <flag name='spice'/>
-+  <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='hda-micro'/>
-+  <flag name='dump-guest-memory'/>
-+  <flag name='nec-usb-xhci'/>
-+  <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='vnc'/>
-+  <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='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='mem-merge'/>
-+  <flag name='drive-discard'/>
-+  <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='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='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='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='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='usb-storage.werror'/>
-+  <flag name='egl-headless'/>
-+  <flag name='vfio-pci.display'/>
-+  <flag name='blockdev'/>
-+  <flag name='memory-backend-memfd'/>
-+  <flag name='memory-backend-memfd.hugetlb'/>
-+  <flag name='iothread.poll-max-ns'/>
-+  <flag name='egl-headless.rendernode'/>
-+  <flag name='memory-backend-file.align'/>
-+  <flag name='memory-backend-file.pmem'/>
-+  <flag name='nvdimm.unarmed'/>
-+  <flag name='scsi-disk.device_id'/>
-+  <flag name='virtio-pci-non-transitional'/>
-+  <flag name='overcommit'/>
-+  <flag name='query-current-machine'/>
-+  <flag name='bitmap-merge'/>
-+  <flag name='nbd-bitmap'/>
-+  <flag name='x86-max-cpu'/>
-+  <flag name='cpu-unavailable-features'/>
-+  <flag name='canonical-cpu-features'/>
-+  <flag name='bochs-display'/>
-+  <flag name='migration-file-drop-cache'/>
-+  <flag name='dbus-vmstate'/>
-+  <flag name='vhost-user-gpu'/>
-+  <flag name='vhost-user-vga'/>
-+  <flag name='ramfb'/>
-+  <flag name='blockdev-file-dynamic-auto-read-only'/>
-+  <flag name='savevm-monitor-nodes'/>
-+  <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-+  <flag name='virtio-net.failover'/>
-+  <flag name='vhost-user-fs'/>
-+  <flag name='blockdev-snapshot.allow-write-only-overlay'/>
-+  <flag name='storage.werror'/>
-+  <flag name='pcie-root-port.hotplug'/>
-+  <version>4002091</version>
-+  <kvmVersion>0</kvmVersion>
-+  <microcodeVersion>43100241</microcodeVersion>
-+  <package>v5.0.0-rc1</package>
-+  <arch>x86_64</arch>
-+  <hostCPU type='kvm' model='base' migratability='yes'>
-+    <property name='vmx-entry-load-rtit-ctl' type='boolean' value='false'/>
-+    <property name='cmov' type='boolean' value='true' migratable='yes'/>
-+    <property name='ia64' type='boolean' value='false'/>
-+    <property name='ssb-no' type='boolean' value='false'/>
-+    <property name='aes' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-apicv-xapic' 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='vmx-page-walk-4' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-page-walk-5' type='boolean' value='false'/>
-+    <property name='gfni' type='boolean' value='false'/>
-+    <property name='ibrs-all' type='boolean' value='false'/>
-+    <property name='vmx-desc-exit' 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='intel-pt' type='boolean' value='false'/>
-+    <property name='vmx-cr8-store-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-rdseed-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-eptp-switching' 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='mpx' type='boolean' value='true' migratable='yes'/>
-+    <property name='pbe' type='boolean' value='false'/>
-+    <property name='avx512cd' type='boolean' value='false'/>
-+    <property name='decodeassists' type='boolean' value='false'/>
-+    <property name='vmx-exit-load-efer' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-exit-clear-bndcfgs' type='boolean' value='false'/>
-+    <property name='sse4.1' type='boolean' value='true' migratable='yes'/>
-+    <property name='family' type='number' value='6'/>
-+    <property name='vmx-vmwrite-vmexit-fields' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-vnmi' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-true-ctls' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-ept-execonly' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-exit-save-efer' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invept-all-context' type='boolean' value='true' migratable='yes'/>
-+    <property name='wbnoinvd' type='boolean' value='false'/>
-+    <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='xcrypt' type='boolean' value='false'/>
-+    <property name='vmx-exit-load-pat' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-intr-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='min-level' type='number' value='22'/>
-+    <property name='vmx-flexpriority' type='boolean' value='true' migratable='yes'/>
-+    <property name='xgetbv1' type='boolean' value='true' migratable='yes'/>
-+    <property name='cid' type='boolean' value='false'/>
-+    <property name='ds' type='boolean' value='false'/>
-+    <property name='fxsr' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512-bf16' type='boolean' value='false'/>
-+    <property name='vmx-cr8-load-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='xsaveopt' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-apicv-vid' type='boolean' value='false'/>
-+    <property name='vmx-exit-save-pat' type='boolean' value='true' migratable='yes'/>
-+    <property name='xtpr' type='boolean' value='false'/>
-+    <property name='tsx-ctrl' type='boolean' value='false'/>
-+    <property name='vmx-ple' 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='vmx-vmfunc' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-activity-shutdown' type='boolean' value='false'/>
-+    <property name='avx512vbmi2' type='boolean' value='false'/>
-+    <property name='cr8legacy' type='boolean' value='false'/>
-+    <property name='vmx-encls-exit' type='boolean' value='false'/>
-+    <property name='stibp' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-msr-bitmap' type='boolean' value='true' migratable='yes'/>
-+    <property name='xcrypt-en' type='boolean' value='false'/>
-+    <property name='vmx-mwait-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-pml' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-nmi-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invept-single-context-noglobals' type='boolean' value='true' migratable='yes'/>
-+    <property name='pn' type='boolean' value='false'/>
-+    <property name='rsba' type='boolean' value='false'/>
-+    <property name='dca' type='boolean' value='false'/>
-+    <property name='vendor' type='string' value='GenuineIntel'/>
-+    <property name='vmx-unrestricted-guest' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-cr3-store-noexit' type='boolean' value='true' migratable='yes'/>
-+    <property name='pku' type='boolean' value='false'/>
-+    <property name='smx' type='boolean' value='false'/>
-+    <property name='cmp-legacy' type='boolean' value='false'/>
-+    <property name='avx512-4fmaps' type='boolean' value='false'/>
-+    <property name='vmcb-clean' type='boolean' value='false'/>
-+    <property name='hle' type='boolean' value='true' migratable='yes'/>
-+    <property name='3dnowext' type='boolean' value='false'/>
-+    <property name='amd-no-ssb' type='boolean' value='false'/>
-+    <property name='npt' type='boolean' value='false'/>
-+    <property name='rdctl-no' type='boolean' value='false'/>
-+    <property name='vmx-invvpid' type='boolean' value='true' migratable='yes'/>
-+    <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='smep' type='boolean' value='true' migratable='yes'/>
-+    <property name='smap' type='boolean' value='true' migratable='yes'/>
-+    <property name='pfthreshold' type='boolean' value='false'/>
-+    <property name='vmx-invpcid-exit' 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='vmx-apicv-x2apic' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-pv-sched-yield' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invlpg-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invvpid-all-context' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-activity-hlt' type='boolean' value='true' migratable='yes'/>
-+    <property name='flushbyasid' type='boolean' value='false'/>
-+    <property name='f16c' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-exit-ack-intr' type='boolean' value='true' migratable='yes'/>
-+    <property name='ace2-en' type='boolean' value='false'/>
-+    <property name='pae' type='boolean' value='true' migratable='yes'/>
-+    <property name='pat' 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='vmx-tsc-offset' 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='vmx-rdtsc-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='hypervisor' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-rdtscp-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='mds-no' type='boolean' value='false'/>
-+    <property name='pcommit' type='boolean' value='false'/>
-+    <property name='vmx-vpid' type='boolean' value='true' migratable='yes'/>
-+    <property name='syscall' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512dq' type='boolean' value='false'/>
-+    <property name='svm' type='boolean' value='false'/>
-+    <property name='invtsc' type='boolean' value='true' migratable='no'/>
-+    <property name='vmx-monitor-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='sse2' type='boolean' value='true' migratable='yes'/>
-+    <property name='ssbd' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-wbinvd-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='est' type='boolean' value='false'/>
-+    <property name='kvm-poll-control' type='boolean' value='true' migratable='yes'/>
-+    <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='kvm-pv-ipi' type='boolean' value='true' migratable='yes'/>
-+    <property name='cx8' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invvpid-single-addr' type='boolean' value='true' migratable='yes'/>
-+    <property name='waitpkg' type='boolean' value='false'/>
-+    <property name='cldemote' type='boolean' value='false'/>
-+    <property name='vmx-ept' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-mmu' type='boolean' value='false'/>
-+    <property name='sse4.2' type='boolean' value='true' migratable='yes'/>
-+    <property name='pge' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512bitalg' type='boolean' value='false'/>
-+    <property name='pdcm' type='boolean' value='false'/>
-+    <property name='vmx-entry-load-bndcfgs' type='boolean' value='false'/>
-+    <property name='vmx-exit-clear-rtit-ctl' type='boolean' value='false'/>
-+    <property name='model' type='number' value='94'/>
-+    <property name='movbe' type='boolean' value='true' migratable='yes'/>
-+    <property name='nrip-save' type='boolean' value='false'/>
-+    <property name='ssse3' type='boolean' value='true' migratable='yes'/>
-+    <property name='sse4a' type='boolean' value='false'/>
-+    <property name='vmx-pause-exit' type='boolean' value='true' migratable='yes'/>
-+    <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='skip-l1dfl-vmentry' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-exit-load-perf-global-ctrl' type='boolean' value='false'/>
-+    <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='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='ds-cpl' type='boolean' value='false'/>
-+    <property name='ibs' type='boolean' value='false'/>
-+    <property name='fma4' type='boolean' value='false'/>
-+    <property name='vmx-exit-nosave-debugctl' type='boolean' value='true' migratable='yes'/>
-+    <property name='la57' type='boolean' value='false'/>
-+    <property name='vmx-invept' type='boolean' value='true' migratable='yes'/>
-+    <property name='osvw' type='boolean' value='false'/>
-+    <property name='apic' type='boolean' value='true' migratable='yes'/>
-+    <property name='pmm' type='boolean' value='false'/>
-+    <property name='vmx-entry-noload-debugctl' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-eptad' type='boolean' value='true' migratable='yes'/>
-+    <property name='spec-ctrl' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-posted-intr' type='boolean' value='false'/>
-+    <property name='vmx-apicv-register' type='boolean' value='false'/>
-+    <property name='tsc-adjust' 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='vmx-zero-len-inject' type='boolean' value='false'/>
-+    <property name='pschange-mc-no' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-rdrand-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='lwp' type='boolean' value='false'/>
-+    <property name='amd-ssbd' type='boolean' value='false'/>
-+    <property name='xop' type='boolean' value='false'/>
-+    <property name='ibpb' type='boolean' value='false'/>
-+    <property name='avx' type='boolean' value='true' migratable='yes'/>
-+    <property name='core-capability' type='boolean' value='false'/>
-+    <property name='vmx-invept-single-context' type='boolean' value='true' migratable='yes'/>
-+    <property name='movdiri' type='boolean' value='false'/>
-+    <property name='acpi' type='boolean' value='false'/>
-+    <property name='avx512bw' type='boolean' value='false'/>
-+    <property name='ace2' type='boolean' value='false'/>
-+    <property name='fsgsbase' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-ept-2mb' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-ept-1gb' type='boolean' value='true' migratable='yes'/>
-+    <property name='ht' type='boolean' value='false'/>
-+    <property name='vmx-io-exit' type='boolean' value='true' migratable='yes'/>
-+    <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='vaes' type='boolean' value='false'/>
-+    <property name='movdir64b' type='boolean' value='false'/>
-+    <property name='xsaves' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-shadow-vmcs' type='boolean' value='true' migratable='yes'/>
-+    <property name='lm' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-exit-save-preemption-timer' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-entry-load-pat' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-entry-load-perf-global-ctrl' type='boolean' value='false'/>
-+    <property name='vmx-io-bitmap' type='boolean' value='true' migratable='yes'/>
-+    <property name='umip' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-store-lma' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-movdr-exit' 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='virt-ssbd' type='boolean' value='false'/>
-+    <property name='vmx-cr3-load-noexit' type='boolean' value='true' migratable='yes'/>
-+    <property name='nodeid-msr' type='boolean' value='false'/>
-+    <property name='md-clear' type='boolean' value='true' migratable='yes'/>
-+    <property name='misalignsse' type='boolean' value='false'/>
-+    <property name='split-lock-detect' type='boolean' value='false'/>
-+    <property name='min-xlevel' type='number' value='2147483656'/>
-+    <property name='bmi1' type='boolean' value='true' migratable='yes'/>
-+    <property name='bmi2' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-pv-unhalt' type='boolean' value='true' migratable='yes'/>
-+    <property name='tsc-scale' type='boolean' value='false'/>
-+    <property name='topoext' type='boolean' value='false'/>
-+    <property name='amd-stibp' type='boolean' value='false'/>
-+    <property name='vmx-preemption-timer' type='boolean' value='true' migratable='yes'/>
-+    <property name='clflushopt' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-vnmi-pending' type='boolean' value='true' migratable='yes'/>
-+    <property name='monitor' type='boolean' value='false'/>
-+    <property name='vmx-vintr-pending' 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='true' migratable='yes'/>
-+    <property name='taa-no' type='boolean' value='false'/>
-+    <property name='arch-capabilities' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-secondary-ctls' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-xsaves' type='boolean' value='true' migratable='yes'/>
-+    <property name='clzero' type='boolean' value='false'/>
-+    <property name='3dnow' type='boolean' value='false'/>
-+    <property name='erms' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-entry-ia32e-mode' 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='vmx-ins-outs' type='boolean' value='true' migratable='yes'/>
-+    <property name='fxsr-opt' type='boolean' value='false'/>
-+    <property name='xstore' type='boolean' value='false'/>
-+    <property name='rtm' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-hint-dedicated' type='boolean' value='false'/>
-+    <property name='lmce' type='boolean' value='true' migratable='yes'/>
-+    <property name='perfctr-nb' 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='vme' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx' 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='xsaveerptr' type='boolean' value='false'/>
-+    <property name='pse36' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-pv-tlb-flush' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-activity-wait-sipi' type='boolean' value='false'/>
-+    <property name='tbm' type='boolean' value='false'/>
-+    <property name='wdt' type='boolean' value='false'/>
-+    <property name='vmx-rdpmc-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-mtf' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-entry-load-efer' type='boolean' value='true' migratable='yes'/>
-+    <property name='model-id' type='string' value='Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz'/>
-+    <property name='sha-ni' type='boolean' value='false'/>
-+    <property name='abm' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-ept-advanced-exitinfo' type='boolean' value='false'/>
-+    <property name='avx512pf' type='boolean' value='false'/>
-+    <property name='vmx-hlt-exit' type='boolean' value='true' migratable='yes'/>
-+    <property name='xstore-en' type='boolean' value='false'/>
-+  </hostCPU>
-+  <cpu type='kvm' name='max' typename='max-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='host' typename='host-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='base' typename='base-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='qemu64-v1' typename='qemu64-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='qemu64' typename='qemu64-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='qemu32-v1' typename='qemu32-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='qemu32' typename='qemu32-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='phenom-v1' typename='phenom-v1-x86_64-cpu' 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='phenom' typename='phenom-x86_64-cpu' 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-v1' typename='pentium3-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='pentium3' typename='pentium3-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='pentium2-v1' typename='pentium2-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='pentium2' typename='pentium2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='pentium-v1' typename='pentium-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='pentium' typename='pentium-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='n270-v1' typename='n270-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='n270' typename='n270-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='kvm64-v1' typename='kvm64-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='kvm64' typename='kvm64-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='kvm32-v1' typename='kvm32-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='kvm32' typename='kvm32-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='coreduo-v1' typename='coreduo-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='coreduo' typename='coreduo-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='core2duo-v1' typename='core2duo-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='core2duo' typename='core2duo-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='athlon-v1' typename='athlon-v1-x86_64-cpu' usable='no'>
-+    <blocker name='mmxext'/>
-+    <blocker name='3dnowext'/>
-+    <blocker name='3dnow'/>
-+  </cpu>
-+  <cpu type='kvm' name='athlon' typename='athlon-x86_64-cpu' usable='no'>
-+    <blocker name='mmxext'/>
-+    <blocker name='3dnowext'/>
-+    <blocker name='3dnow'/>
-+  </cpu>
-+  <cpu type='kvm' name='Westmere-v2' typename='Westmere-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Westmere-v1' typename='Westmere-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Westmere-IBRS' typename='Westmere-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Westmere' typename='Westmere-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Snowridge-v2' typename='Snowridge-v2-x86_64-cpu' usable='no'>
-+    <blocker name='clwb'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='gfni'/>
-+    <blocker name='cldemote'/>
-+    <blocker name='movdiri'/>
-+    <blocker name='movdir64b'/>
-+    <blocker name='core-capability'/>
-+    <blocker name='split-lock-detect'/>
-+  </cpu>
-+  <cpu type='kvm' name='Snowridge-v1' typename='Snowridge-v1-x86_64-cpu' usable='no'>
-+    <blocker name='clwb'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='gfni'/>
-+    <blocker name='cldemote'/>
-+    <blocker name='movdiri'/>
-+    <blocker name='movdir64b'/>
-+    <blocker name='core-capability'/>
-+    <blocker name='split-lock-detect'/>
-+  </cpu>
-+  <cpu type='kvm' name='Snowridge' typename='Snowridge-x86_64-cpu' usable='no'>
-+    <blocker name='clwb'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='gfni'/>
-+    <blocker name='cldemote'/>
-+    <blocker name='movdiri'/>
-+    <blocker name='movdir64b'/>
-+    <blocker name='core-capability'/>
-+    <blocker name='split-lock-detect'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Server-v3' typename='Skylake-Server-v3-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Server-v2' typename='Skylake-Server-v2-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Server-v1' typename='Skylake-Server-v1-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Server-noTSX-IBRS' typename='Skylake-Server-noTSX-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Server-IBRS' typename='Skylake-Server-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Server' typename='Skylake-Server-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Skylake-Client-v3' typename='Skylake-Client-v3-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Skylake-Client-v2' typename='Skylake-Client-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Skylake-Client-v1' typename='Skylake-Client-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Skylake-Client-noTSX-IBRS' typename='Skylake-Client-noTSX-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Skylake-Client-IBRS' typename='Skylake-Client-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Skylake-Client' typename='Skylake-Client-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='SandyBridge-v2' typename='SandyBridge-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='SandyBridge-v1' typename='SandyBridge-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='SandyBridge-IBRS' typename='SandyBridge-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='SandyBridge' typename='SandyBridge-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Penryn-v1' typename='Penryn-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Penryn' typename='Penryn-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Opteron_G5-v1' typename='Opteron_G5-v1-x86_64-cpu' usable='no'>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='xop'/>
-+    <blocker name='fma4'/>
-+    <blocker name='tbm'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Opteron_G5' typename='Opteron_G5-x86_64-cpu' usable='no'>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='xop'/>
-+    <blocker name='fma4'/>
-+    <blocker name='tbm'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Opteron_G4-v1' typename='Opteron_G4-v1-x86_64-cpu' usable='no'>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='xop'/>
-+    <blocker name='fma4'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Opteron_G4' typename='Opteron_G4-x86_64-cpu' usable='no'>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='xop'/>
-+    <blocker name='fma4'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Opteron_G3-v1' typename='Opteron_G3-v1-x86_64-cpu' usable='no'>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+  </cpu>
-+  <cpu type='kvm' name='Opteron_G3' typename='Opteron_G3-x86_64-cpu' usable='no'>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+  </cpu>
-+  <cpu type='kvm' name='Opteron_G2-v1' typename='Opteron_G2-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Opteron_G2' typename='Opteron_G2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Opteron_G1-v1' typename='Opteron_G1-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Opteron_G1' typename='Opteron_G1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Nehalem-v2' typename='Nehalem-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Nehalem-v1' typename='Nehalem-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Nehalem-IBRS' typename='Nehalem-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Nehalem' typename='Nehalem-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='KnightsMill-v1' typename='KnightsMill-v1-x86_64-cpu' 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='KnightsMill' typename='KnightsMill-x86_64-cpu' 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-v2' typename='IvyBridge-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='IvyBridge-v1' typename='IvyBridge-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='IvyBridge-IBRS' typename='IvyBridge-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='IvyBridge' typename='IvyBridge-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Icelake-Server-v2' typename='Icelake-Server-v2-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='la57'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Server-v1' typename='Icelake-Server-v1-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='la57'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Server-noTSX' typename='Icelake-Server-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='la57'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Server' typename='Icelake-Server-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='la57'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Client-v2' typename='Icelake-Client-v2-x86_64-cpu' usable='no'>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Client-v1' typename='Icelake-Client-v1-x86_64-cpu' usable='no'>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Client-noTSX' typename='Icelake-Client-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Icelake-Client' typename='Icelake-Client-x86_64-cpu' usable='no'>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Haswell-v4' typename='Haswell-v4-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell-v3' typename='Haswell-v3-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell-v2' typename='Haswell-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell-v1' typename='Haswell-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell-noTSX-IBRS' typename='Haswell-noTSX-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell-noTSX' typename='Haswell-noTSX-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell-IBRS' typename='Haswell-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Haswell' typename='Haswell-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='EPYC-v3' typename='EPYC-v3-x86_64-cpu' 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='perfctr-core'/>
-+    <blocker name='clzero'/>
-+    <blocker name='xsaveerptr'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='EPYC-v2' typename='EPYC-v2-x86_64-cpu' 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'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='EPYC-v1' typename='EPYC-v1-x86_64-cpu' 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='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='EPYC-Rome-v1' typename='EPYC-Rome-v1-x86_64-cpu' usable='no'>
-+    <blocker name='clwb'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='rdpid'/>
-+    <blocker name='mmxext'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='cr8legacy'/>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='osvw'/>
-+    <blocker name='perfctr-core'/>
-+    <blocker name='clzero'/>
-+    <blocker name='xsaveerptr'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='amd-stibp'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='EPYC-Rome' typename='EPYC-Rome-x86_64-cpu' usable='no'>
-+    <blocker name='clwb'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='rdpid'/>
-+    <blocker name='mmxext'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='cr8legacy'/>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='osvw'/>
-+    <blocker name='perfctr-core'/>
-+    <blocker name='clzero'/>
-+    <blocker name='xsaveerptr'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='amd-stibp'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='EPYC-IBPB' typename='EPYC-IBPB-x86_64-cpu' 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'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='EPYC' typename='EPYC-x86_64-cpu' 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='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Dhyana-v1' typename='Dhyana-v1-x86_64-cpu' usable='no'>
-+    <blocker name='mmxext'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='cr8legacy'/>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='osvw'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Dhyana' typename='Dhyana-x86_64-cpu' usable='no'>
-+    <blocker name='mmxext'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='cr8legacy'/>
-+    <blocker name='sse4a'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='osvw'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='npt'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='kvm' name='Denverton-v2' typename='Denverton-v2-x86_64-cpu' usable='no'>
-+    <blocker name='sha-ni'/>
-+    <blocker name='rdctl-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Denverton-v1' typename='Denverton-v1-x86_64-cpu' usable='no'>
-+    <blocker name='sha-ni'/>
-+    <blocker name='rdctl-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Denverton' typename='Denverton-x86_64-cpu' usable='no'>
-+    <blocker name='sha-ni'/>
-+    <blocker name='rdctl-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Cooperlake-v1' typename='Cooperlake-v1-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512-bf16'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='mds-no'/>
-+    <blocker name='taa-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Cooperlake' typename='Cooperlake-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512-bf16'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='mds-no'/>
-+    <blocker name='taa-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Conroe-v1' typename='Conroe-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Conroe' typename='Conroe-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Cascadelake-Server-v3' typename='Cascadelake-Server-v3-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='mds-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Cascadelake-Server-v2' typename='Cascadelake-Server-v2-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='mds-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Cascadelake-Server-v1' typename='Cascadelake-Server-v1-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Cascadelake-Server-noTSX' typename='Cascadelake-Server-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='mds-no'/>
-+  </cpu>
-+  <cpu type='kvm' name='Cascadelake-Server' typename='Cascadelake-Server-x86_64-cpu' usable='no'>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='clwb'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='pku'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='pku'/>
-+  </cpu>
-+  <cpu type='kvm' name='Broadwell-v4' typename='Broadwell-v4-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell-v3' typename='Broadwell-v3-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell-v2' typename='Broadwell-v2-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell-v1' typename='Broadwell-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell-noTSX-IBRS' typename='Broadwell-noTSX-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell-noTSX' typename='Broadwell-noTSX-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell-IBRS' typename='Broadwell-IBRS-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='Broadwell' typename='Broadwell-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='486-v1' typename='486-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='kvm' name='486' typename='486-x86_64-cpu' usable='yes'/>
-+  <machine type='kvm' name='pc-i440fx-5.0' alias='pc' hotplugCpus='yes' maxCpus='255' default='yes' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-4.2' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-4.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-1.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-3.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-4.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-1.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-4.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='isapc' hotplugCpus='yes' maxCpus='1' defaultCPU='486-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-3.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-1.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-4.0.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-5.0' alias='q35' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-3.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-4.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='microvm' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-1.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-4.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-i440fx-3.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='kvm' name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <hostCPU type='tcg' model='base' migratability='yes'>
-+    <property name='vmx-entry-load-rtit-ctl' type='boolean' value='false'/>
-+    <property name='cmov' type='boolean' value='true' migratable='yes'/>
-+    <property name='ia64' type='boolean' value='false'/>
-+    <property name='ssb-no' type='boolean' value='false'/>
-+    <property name='aes' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-apicv-xapic' type='boolean' value='false'/>
-+    <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='vmx-page-walk-4' type='boolean' value='false'/>
-+    <property name='vmx-page-walk-5' type='boolean' value='false'/>
-+    <property name='gfni' type='boolean' value='false'/>
-+    <property name='ibrs-all' type='boolean' value='false'/>
-+    <property name='vmx-desc-exit' 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='vmx-cr8-store-exit' type='boolean' value='false'/>
-+    <property name='vmx-rdseed-exit' type='boolean' value='false'/>
-+    <property name='vmx-eptp-switching' type='boolean' value='false'/>
-+    <property name='kvm-asyncpf' 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='avx512cd' type='boolean' value='false'/>
-+    <property name='decodeassists' type='boolean' value='false'/>
-+    <property name='vmx-exit-load-efer' type='boolean' value='false'/>
-+    <property name='vmx-exit-clear-bndcfgs' type='boolean' value='false'/>
-+    <property name='sse4.1' type='boolean' value='true' migratable='yes'/>
-+    <property name='family' type='number' value='6'/>
-+    <property name='vmx-vmwrite-vmexit-fields' type='boolean' value='false'/>
-+    <property name='vmx-vnmi' type='boolean' value='false'/>
-+    <property name='vmx-true-ctls' type='boolean' value='false'/>
-+    <property name='vmx-ept-execonly' type='boolean' value='false'/>
-+    <property name='vmx-exit-save-efer' type='boolean' value='false'/>
-+    <property name='vmx-invept-all-context' type='boolean' value='false'/>
-+    <property name='wbnoinvd' type='boolean' value='false'/>
-+    <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='xcrypt' type='boolean' value='false'/>
-+    <property name='vmx-exit-load-pat' type='boolean' value='false'/>
-+    <property name='vmx-intr-exit' type='boolean' value='false'/>
-+    <property name='min-level' type='number' value='13'/>
-+    <property name='vmx-flexpriority' type='boolean' value='false'/>
-+    <property name='xgetbv1' type='boolean' value='true' migratable='yes'/>
-+    <property name='cid' type='boolean' value='false'/>
-+    <property name='ds' type='boolean' value='false'/>
-+    <property name='fxsr' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512-bf16' type='boolean' value='false'/>
-+    <property name='vmx-cr8-load-exit' type='boolean' value='false'/>
-+    <property name='xsaveopt' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-apicv-vid' type='boolean' value='false'/>
-+    <property name='vmx-exit-save-pat' type='boolean' value='false'/>
-+    <property name='xtpr' type='boolean' value='false'/>
-+    <property name='tsx-ctrl' type='boolean' value='false'/>
-+    <property name='vmx-ple' 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='vmx-vmfunc' type='boolean' value='false'/>
-+    <property name='vmx-activity-shutdown' type='boolean' value='false'/>
-+    <property name='avx512vbmi2' type='boolean' value='false'/>
-+    <property name='cr8legacy' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-encls-exit' type='boolean' value='false'/>
-+    <property name='stibp' type='boolean' value='false'/>
-+    <property name='vmx-msr-bitmap' type='boolean' value='false'/>
-+    <property name='xcrypt-en' type='boolean' value='false'/>
-+    <property name='vmx-mwait-exit' type='boolean' value='false'/>
-+    <property name='vmx-pml' type='boolean' value='false'/>
-+    <property name='vmx-nmi-exit' type='boolean' value='false'/>
-+    <property name='vmx-invept-single-context-noglobals' type='boolean' value='false'/>
-+    <property name='pn' type='boolean' value='false'/>
-+    <property name='rsba' type='boolean' value='false'/>
-+    <property name='dca' type='boolean' value='false'/>
-+    <property name='vendor' type='string' value='AuthenticAMD'/>
-+    <property name='vmx-unrestricted-guest' type='boolean' value='false'/>
-+    <property name='vmx-cr3-store-noexit' type='boolean' value='false'/>
-+    <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='avx512-4fmaps' type='boolean' value='false'/>
-+    <property name='vmcb-clean' type='boolean' value='false'/>
-+    <property name='hle' type='boolean' value='false'/>
-+    <property name='3dnowext' type='boolean' value='true' migratable='yes'/>
-+    <property name='amd-no-ssb' type='boolean' value='false'/>
-+    <property name='npt' type='boolean' value='true' migratable='yes'/>
-+    <property name='rdctl-no' type='boolean' value='false'/>
-+    <property name='vmx-invvpid' type='boolean' value='false'/>
-+    <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='smep' type='boolean' value='true' migratable='yes'/>
-+    <property name='smap' type='boolean' value='true' migratable='yes'/>
-+    <property name='pfthreshold' type='boolean' value='false'/>
-+    <property name='vmx-invpcid-exit' type='boolean' value='false'/>
-+    <property name='x2apic' type='boolean' value='false'/>
-+    <property name='avx512vbmi' type='boolean' value='false'/>
-+    <property name='avx512vnni' type='boolean' value='false'/>
-+    <property name='vmx-apicv-x2apic' type='boolean' value='false'/>
-+    <property name='kvm-pv-sched-yield' type='boolean' value='false'/>
-+    <property name='vmx-invlpg-exit' type='boolean' value='false'/>
-+    <property name='vmx-invvpid-all-context' type='boolean' value='false'/>
-+    <property name='vmx-activity-hlt' type='boolean' value='false'/>
-+    <property name='flushbyasid' type='boolean' value='false'/>
-+    <property name='f16c' type='boolean' value='false'/>
-+    <property name='vmx-exit-ack-intr' type='boolean' value='false'/>
-+    <property name='ace2-en' type='boolean' value='false'/>
-+    <property name='pae' type='boolean' value='true' migratable='yes'/>
-+    <property name='pat' 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='vmx-tsc-offset' 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='vmx-rdtsc-exit' type='boolean' value='false'/>
-+    <property name='hypervisor' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-rdtscp-exit' type='boolean' value='false'/>
-+    <property name='mds-no' type='boolean' value='false'/>
-+    <property name='pcommit' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-vpid' type='boolean' value='false'/>
-+    <property name='syscall' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512dq' type='boolean' value='false'/>
-+    <property name='svm' type='boolean' value='true' migratable='yes'/>
-+    <property name='invtsc' type='boolean' value='false'/>
-+    <property name='vmx-monitor-exit' type='boolean' value='false'/>
-+    <property name='sse2' type='boolean' value='true' migratable='yes'/>
-+    <property name='ssbd' type='boolean' value='false'/>
-+    <property name='vmx-wbinvd-exit' type='boolean' value='false'/>
-+    <property name='est' type='boolean' value='false'/>
-+    <property name='kvm-poll-control' 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='kvm-pv-ipi' type='boolean' value='false'/>
-+    <property name='cx8' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invvpid-single-addr' type='boolean' value='false'/>
-+    <property name='waitpkg' type='boolean' value='false'/>
-+    <property name='cldemote' type='boolean' value='false'/>
-+    <property name='vmx-ept' type='boolean' value='false'/>
-+    <property name='kvm-mmu' type='boolean' value='false'/>
-+    <property name='sse4.2' type='boolean' value='true' migratable='yes'/>
-+    <property name='pge' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512bitalg' type='boolean' value='false'/>
-+    <property name='pdcm' type='boolean' value='false'/>
-+    <property name='vmx-entry-load-bndcfgs' type='boolean' value='false'/>
-+    <property name='vmx-exit-clear-rtit-ctl' type='boolean' value='false'/>
-+    <property name='model' type='number' value='6'/>
-+    <property name='movbe' type='boolean' value='true' migratable='yes'/>
-+    <property name='nrip-save' type='boolean' value='false'/>
-+    <property name='ssse3' type='boolean' value='true' migratable='yes'/>
-+    <property name='sse4a' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-pause-exit' type='boolean' value='false'/>
-+    <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='skip-l1dfl-vmentry' type='boolean' value='false'/>
-+    <property name='vmx-exit-load-perf-global-ctrl' 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='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='ds-cpl' type='boolean' value='false'/>
-+    <property name='ibs' type='boolean' value='false'/>
-+    <property name='fma4' type='boolean' value='false'/>
-+    <property name='vmx-exit-nosave-debugctl' type='boolean' value='false'/>
-+    <property name='la57' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-invept' type='boolean' value='false'/>
-+    <property name='osvw' type='boolean' value='false'/>
-+    <property name='apic' type='boolean' value='true' migratable='yes'/>
-+    <property name='pmm' type='boolean' value='false'/>
-+    <property name='vmx-entry-noload-debugctl' type='boolean' value='false'/>
-+    <property name='vmx-eptad' type='boolean' value='false'/>
-+    <property name='spec-ctrl' type='boolean' value='false'/>
-+    <property name='vmx-posted-intr' type='boolean' value='false'/>
-+    <property name='vmx-apicv-register' type='boolean' value='false'/>
-+    <property name='tsc-adjust' type='boolean' value='false'/>
-+    <property name='kvm-steal-time' type='boolean' value='false'/>
-+    <property name='kvmclock' type='boolean' value='false'/>
-+    <property name='vmx-zero-len-inject' type='boolean' value='false'/>
-+    <property name='pschange-mc-no' type='boolean' value='false'/>
-+    <property name='vmx-rdrand-exit' type='boolean' value='false'/>
-+    <property name='lwp' type='boolean' value='false'/>
-+    <property name='amd-ssbd' type='boolean' value='false'/>
-+    <property name='xop' type='boolean' value='false'/>
-+    <property name='ibpb' type='boolean' value='false'/>
-+    <property name='avx' type='boolean' value='false'/>
-+    <property name='core-capability' type='boolean' value='false'/>
-+    <property name='vmx-invept-single-context' type='boolean' value='false'/>
-+    <property name='movdiri' type='boolean' value='false'/>
-+    <property name='acpi' type='boolean' value='true' migratable='yes'/>
-+    <property name='avx512bw' type='boolean' value='false'/>
-+    <property name='ace2' type='boolean' value='false'/>
-+    <property name='fsgsbase' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-ept-2mb' type='boolean' value='false'/>
-+    <property name='vmx-ept-1gb' type='boolean' value='false'/>
-+    <property name='ht' type='boolean' value='false'/>
-+    <property name='vmx-io-exit' 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='vaes' type='boolean' value='false'/>
-+    <property name='movdir64b' type='boolean' value='false'/>
-+    <property name='xsaves' type='boolean' value='false'/>
-+    <property name='vmx-shadow-vmcs' type='boolean' value='false'/>
-+    <property name='lm' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-exit-save-preemption-timer' type='boolean' value='false'/>
-+    <property name='vmx-entry-load-pat' type='boolean' value='false'/>
-+    <property name='vmx-entry-load-perf-global-ctrl' type='boolean' value='false'/>
-+    <property name='vmx-io-bitmap' type='boolean' value='false'/>
-+    <property name='umip' type='boolean' value='false'/>
-+    <property name='vmx-store-lma' type='boolean' value='false'/>
-+    <property name='vmx-movdr-exit' 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='virt-ssbd' type='boolean' value='false'/>
-+    <property name='vmx-cr3-load-noexit' type='boolean' value='false'/>
-+    <property name='nodeid-msr' type='boolean' value='false'/>
-+    <property name='md-clear' type='boolean' value='false'/>
-+    <property name='misalignsse' type='boolean' value='false'/>
-+    <property name='split-lock-detect' type='boolean' value='false'/>
-+    <property name='min-xlevel' type='number' value='2147483658'/>
-+    <property name='bmi1' type='boolean' value='true' migratable='yes'/>
-+    <property name='bmi2' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-pv-unhalt' type='boolean' value='false'/>
-+    <property name='tsc-scale' type='boolean' value='false'/>
-+    <property name='topoext' type='boolean' value='false'/>
-+    <property name='amd-stibp' type='boolean' value='false'/>
-+    <property name='vmx-preemption-timer' type='boolean' value='false'/>
-+    <property name='clflushopt' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-vnmi-pending' type='boolean' value='false'/>
-+    <property name='monitor' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-vintr-pending' 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='false'/>
-+    <property name='taa-no' type='boolean' value='false'/>
-+    <property name='arch-capabilities' type='boolean' value='false'/>
-+    <property name='vmx-secondary-ctls' type='boolean' value='false'/>
-+    <property name='vmx-xsaves' type='boolean' value='false'/>
-+    <property name='clzero' type='boolean' value='false'/>
-+    <property name='3dnow' type='boolean' value='true' migratable='yes'/>
-+    <property name='erms' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-entry-ia32e-mode' type='boolean' value='false'/>
-+    <property name='lahf-lm' type='boolean' value='true' migratable='yes'/>
-+    <property name='vpclmulqdq' type='boolean' value='false'/>
-+    <property name='vmx-ins-outs' type='boolean' value='false'/>
-+    <property name='fxsr-opt' type='boolean' value='false'/>
-+    <property name='xstore' type='boolean' value='false'/>
-+    <property name='rtm' type='boolean' value='false'/>
-+    <property name='kvm-hint-dedicated' type='boolean' value='false'/>
-+    <property name='lmce' type='boolean' value='false'/>
-+    <property name='perfctr-nb' type='boolean' value='false'/>
-+    <property name='rdrand' type='boolean' value='true' migratable='yes'/>
-+    <property name='rdseed' type='boolean' value='false'/>
-+    <property name='avx512-4vnniw' type='boolean' value='false'/>
-+    <property name='vme' type='boolean' value='false'/>
-+    <property name='vmx' 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='xsaveerptr' type='boolean' value='false'/>
-+    <property name='pse36' type='boolean' value='true' migratable='yes'/>
-+    <property name='kvm-pv-tlb-flush' type='boolean' value='false'/>
-+    <property name='vmx-activity-wait-sipi' type='boolean' value='false'/>
-+    <property name='tbm' type='boolean' value='false'/>
-+    <property name='wdt' type='boolean' value='false'/>
-+    <property name='vmx-rdpmc-exit' type='boolean' value='false'/>
-+    <property name='vmx-mtf' type='boolean' value='false'/>
-+    <property name='vmx-entry-load-efer' type='boolean' value='false'/>
-+    <property name='model-id' type='string' value='QEMU TCG CPU version 2.5+'/>
-+    <property name='sha-ni' type='boolean' value='false'/>
-+    <property name='abm' type='boolean' value='true' migratable='yes'/>
-+    <property name='vmx-ept-advanced-exitinfo' type='boolean' value='false'/>
-+    <property name='avx512pf' type='boolean' value='false'/>
-+    <property name='vmx-hlt-exit' type='boolean' value='false'/>
-+    <property name='xstore-en' type='boolean' value='false'/>
-+  </hostCPU>
-+  <cpu type='tcg' name='max' typename='max-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='host' typename='host-x86_64-cpu' usable='no'>
-+    <blocker name='kvm'/>
-+  </cpu>
-+  <cpu type='tcg' name='base' typename='base-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='qemu64-v1' typename='qemu64-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='qemu64' typename='qemu64-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='qemu32-v1' typename='qemu32-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='qemu32' typename='qemu32-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='phenom-v1' typename='phenom-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fxsr-opt'/>
-+  </cpu>
-+  <cpu type='tcg' name='phenom' typename='phenom-x86_64-cpu' usable='no'>
-+    <blocker name='fxsr-opt'/>
-+  </cpu>
-+  <cpu type='tcg' name='pentium3-v1' typename='pentium3-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='pentium3' typename='pentium3-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='pentium2-v1' typename='pentium2-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='pentium2' typename='pentium2-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='pentium-v1' typename='pentium-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='pentium' typename='pentium-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='n270-v1' typename='n270-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='n270' typename='n270-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='kvm64-v1' typename='kvm64-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='kvm64' typename='kvm64-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='kvm32-v1' typename='kvm32-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='kvm32' typename='kvm32-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='coreduo-v1' typename='coreduo-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='coreduo' typename='coreduo-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='core2duo-v1' typename='core2duo-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='core2duo' typename='core2duo-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='athlon-v1' typename='athlon-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='athlon' typename='athlon-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Westmere-v2' typename='Westmere-v2-x86_64-cpu' usable='no'>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Westmere-v1' typename='Westmere-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Westmere-IBRS' typename='Westmere-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Westmere' typename='Westmere-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Snowridge-v2' typename='Snowridge-v2-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='umip'/>
-+    <blocker name='gfni'/>
-+    <blocker name='cldemote'/>
-+    <blocker name='movdiri'/>
-+    <blocker name='movdir64b'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='core-capability'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='split-lock-detect'/>
-+  </cpu>
-+  <cpu type='tcg' name='Snowridge-v1' typename='Snowridge-v1-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='umip'/>
-+    <blocker name='gfni'/>
-+    <blocker name='cldemote'/>
-+    <blocker name='movdiri'/>
-+    <blocker name='movdir64b'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='core-capability'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='split-lock-detect'/>
-+  </cpu>
-+  <cpu type='tcg' name='Snowridge' typename='Snowridge-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='umip'/>
-+    <blocker name='gfni'/>
-+    <blocker name='cldemote'/>
-+    <blocker name='movdiri'/>
-+    <blocker name='movdir64b'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='core-capability'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='split-lock-detect'/>
-+  </cpu>
-+  <cpu type='tcg' name='Skylake-Server-v3' typename='Skylake-Server-v3-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <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-v2' typename='Skylake-Server-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-v1' typename='Skylake-Server-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-Server-noTSX-IBRS' typename='Skylake-Server-noTSX-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <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-IBRS' typename='Skylake-Server-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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' typename='Skylake-Server-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-v3' typename='Skylake-Client-v3-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Skylake-Client-v2' typename='Skylake-Client-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-v1' typename='Skylake-Client-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='Skylake-Client-noTSX-IBRS' typename='Skylake-Client-noTSX-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Skylake-Client-IBRS' typename='Skylake-Client-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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' typename='Skylake-Client-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-v2' typename='SandyBridge-v2-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='SandyBridge-v1' typename='SandyBridge-v1-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+  </cpu>
-+  <cpu type='tcg' name='SandyBridge-IBRS' typename='SandyBridge-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='SandyBridge' typename='SandyBridge-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+  </cpu>
-+  <cpu type='tcg' name='Penryn-v1' typename='Penryn-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Penryn' typename='Penryn-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Opteron_G5-v1' typename='Opteron_G5-v1-x86_64-cpu' 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'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='tcg' name='Opteron_G5' typename='Opteron_G5-x86_64-cpu' 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'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='tcg' name='Opteron_G4-v1' typename='Opteron_G4-v1-x86_64-cpu' usable='no'>
-+    <blocker name='avx'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xop'/>
-+    <blocker name='fma4'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='tcg' name='Opteron_G4' typename='Opteron_G4-x86_64-cpu' usable='no'>
-+    <blocker name='avx'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xop'/>
-+    <blocker name='fma4'/>
-+    <blocker name='nrip-save'/>
-+  </cpu>
-+  <cpu type='tcg' name='Opteron_G3-v1' typename='Opteron_G3-v1-x86_64-cpu' usable='no'>
-+    <blocker name='misalignsse'/>
-+  </cpu>
-+  <cpu type='tcg' name='Opteron_G3' typename='Opteron_G3-x86_64-cpu' usable='no'>
-+    <blocker name='misalignsse'/>
-+  </cpu>
-+  <cpu type='tcg' name='Opteron_G2-v1' typename='Opteron_G2-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Opteron_G2' typename='Opteron_G2-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Opteron_G1-v1' typename='Opteron_G1-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Opteron_G1' typename='Opteron_G1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Nehalem-v2' typename='Nehalem-v2-x86_64-cpu' usable='no'>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Nehalem-v1' typename='Nehalem-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Nehalem-IBRS' typename='Nehalem-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Nehalem' typename='Nehalem-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='KnightsMill-v1' typename='KnightsMill-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='KnightsMill' typename='KnightsMill-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-v2' typename='IvyBridge-v2-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='IvyBridge-v1' typename='IvyBridge-v1-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+  </cpu>
-+  <cpu type='tcg' name='IvyBridge-IBRS' typename='IvyBridge-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='IvyBridge' typename='IvyBridge-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Server-v2' typename='Icelake-Server-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Server-v1' typename='Icelake-Server-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Server-noTSX' typename='Icelake-Server-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Server' typename='Icelake-Server-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Client-v2' typename='Icelake-Client-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Client-v1' typename='Icelake-Client-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Client-noTSX' typename='Icelake-Client-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Icelake-Client' typename='Icelake-Client-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512vbmi'/>
-+    <blocker name='umip'/>
-+    <blocker name='avx512vbmi2'/>
-+    <blocker name='gfni'/>
-+    <blocker name='vaes'/>
-+    <blocker name='vpclmulqdq'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='avx512bitalg'/>
-+    <blocker name='avx512-vpopcntdq'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-v4' typename='Haswell-v4-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-v3' typename='Haswell-v3-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-v2' typename='Haswell-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-v1' typename='Haswell-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-noTSX-IBRS' typename='Haswell-noTSX-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-noTSX' typename='Haswell-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell-IBRS' typename='Haswell-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+    <blocker name='spec-ctrl'/>
-+  </cpu>
-+  <cpu type='tcg' name='Haswell' typename='Haswell-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC-v3' typename='EPYC-v3-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='perfctr-core'/>
-+    <blocker name='clzero'/>
-+    <blocker name='xsaveerptr'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='nrip-save'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='xsaves'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC-v2' typename='EPYC-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='nrip-save'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC-v1' typename='EPYC-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='nrip-save'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC-Rome-v1' typename='EPYC-Rome-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='umip'/>
-+    <blocker name='rdpid'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='osvw'/>
-+    <blocker name='topoext'/>
-+    <blocker name='perfctr-core'/>
-+    <blocker name='clzero'/>
-+    <blocker name='xsaveerptr'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='amd-stibp'/>
-+    <blocker name='nrip-save'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='xsaves'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC-Rome' typename='EPYC-Rome-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='umip'/>
-+    <blocker name='rdpid'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='osvw'/>
-+    <blocker name='topoext'/>
-+    <blocker name='perfctr-core'/>
-+    <blocker name='clzero'/>
-+    <blocker name='xsaveerptr'/>
-+    <blocker name='wbnoinvd'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='amd-stibp'/>
-+    <blocker name='nrip-save'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='xsaves'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC-IBPB' typename='EPYC-IBPB-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='nrip-save'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='EPYC' typename='EPYC-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='nrip-save'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Dhyana-v1' typename='Dhyana-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='osvw'/>
-+    <blocker name='topoext'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='nrip-save'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Dhyana' typename='Dhyana-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='fxsr-opt'/>
-+    <blocker name='misalignsse'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='osvw'/>
-+    <blocker name='topoext'/>
-+    <blocker name='ibpb'/>
-+    <blocker name='nrip-save'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Denverton-v2' typename='Denverton-v2-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+  </cpu>
-+  <cpu type='tcg' name='Denverton-v1' typename='Denverton-v1-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+  </cpu>
-+  <cpu type='tcg' name='Denverton' typename='Denverton-x86_64-cpu' usable='no'>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='sha-ni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+  </cpu>
-+  <cpu type='tcg' name='Cooperlake-v1' typename='Cooperlake-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='stibp'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='avx512-bf16'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+    <blocker name='mds-no'/>
-+    <blocker name='pschange-mc-no'/>
-+    <blocker name='taa-no'/>
-+  </cpu>
-+  <cpu type='tcg' name='Cooperlake' typename='Cooperlake-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='stibp'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='avx512-bf16'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+    <blocker name='mds-no'/>
-+    <blocker name='pschange-mc-no'/>
-+    <blocker name='taa-no'/>
-+  </cpu>
-+  <cpu type='tcg' name='Conroe-v1' typename='Conroe-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Conroe' typename='Conroe-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='Cascadelake-Server-v3' typename='Cascadelake-Server-v3-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+    <blocker name='mds-no'/>
-+  </cpu>
-+  <cpu type='tcg' name='Cascadelake-Server-v2' typename='Cascadelake-Server-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+    <blocker name='mds-no'/>
-+  </cpu>
-+  <cpu type='tcg' name='Cascadelake-Server-v1' typename='Cascadelake-Server-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Cascadelake-Server-noTSX' typename='Cascadelake-Server-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='avx512f'/>
-+    <blocker name='avx512dq'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='avx512cd'/>
-+    <blocker name='avx512bw'/>
-+    <blocker name='avx512vl'/>
-+    <blocker name='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='arch-capabilities'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+    <blocker name='rdctl-no'/>
-+    <blocker name='ibrs-all'/>
-+    <blocker name='skip-l1dfl-vmentry'/>
-+    <blocker name='mds-no'/>
-+  </cpu>
-+  <cpu type='tcg' name='Cascadelake-Server' typename='Cascadelake-Server-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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='avx512vnni'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='ssbd'/>
-+    <blocker name='3dnowprefetch'/>
-+    <blocker name='xsavec'/>
-+  </cpu>
-+  <cpu type='tcg' name='Broadwell-v4' typename='Broadwell-v4-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='3dnowprefetch'/>
-+  </cpu>
-+  <cpu type='tcg' name='Broadwell-v3' typename='Broadwell-v3-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-v2' typename='Broadwell-v2-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='3dnowprefetch'/>
-+  </cpu>
-+  <cpu type='tcg' name='Broadwell-v1' typename='Broadwell-v1-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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-IBRS' typename='Broadwell-noTSX-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='spec-ctrl'/>
-+    <blocker name='3dnowprefetch'/>
-+  </cpu>
-+  <cpu type='tcg' name='Broadwell-noTSX' typename='Broadwell-noTSX-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='3dnowprefetch'/>
-+  </cpu>
-+  <cpu type='tcg' name='Broadwell-IBRS' typename='Broadwell-IBRS-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <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' typename='Broadwell-x86_64-cpu' usable='no'>
-+    <blocker name='fma'/>
-+    <blocker name='pcid'/>
-+    <blocker name='x2apic'/>
-+    <blocker name='tsc-deadline'/>
-+    <blocker name='avx'/>
-+    <blocker name='f16c'/>
-+    <blocker name='hle'/>
-+    <blocker name='avx2'/>
-+    <blocker name='invpcid'/>
-+    <blocker name='rtm'/>
-+    <blocker name='rdseed'/>
-+    <blocker name='3dnowprefetch'/>
-+  </cpu>
-+  <cpu type='tcg' name='486-v1' typename='486-v1-x86_64-cpu' usable='yes'/>
-+  <cpu type='tcg' name='486' typename='486-x86_64-cpu' usable='yes'/>
-+  <machine type='tcg' name='pc-i440fx-5.0' alias='pc' hotplugCpus='yes' maxCpus='255' default='yes' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.12' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-4.2' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-4.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-1.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-1.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.10' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-1.7' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.9' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.11' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-3.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-4.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-1.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-4.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.9' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='isapc' hotplugCpus='yes' maxCpus='1' defaultCPU='486-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-1.4' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-3.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.12' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.1' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-1.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-4.0.1' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-1.6' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-5.0' alias='q35' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.8' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.10' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-3.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-4.0' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='microvm' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.3' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-1.2' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-4.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-2.8' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.5' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-i440fx-3.0' hotplugCpus='yes' maxCpus='255' defaultCPU='qemu64-x86_64-cpu'/>
-+  <machine type='tcg' name='pc-q35-2.11' hotplugCpus='yes' maxCpus='288' defaultCPU='qemu64-x86_64-cpu'/>
-+</qemuCaps>
-diff --git a/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args b/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args
-index 6e32f918f3..65974ca759 100644
---- a/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-cdrom-tray.x86_64-latest.args
-@@ -13,7 +13,6 @@ QEMU_AUDIO_DRV=none \
- -object secret,id=masterKey0,format=raw,\
- file=/tmp/lib/domain--1-test/master-key.aes \
- -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \
---cpu qemu64 \
- -m 1024 \
- -overcommit mem-lock=off \
- -smp 1,sockets=1,cores=1,threads=1 \
-diff --git a/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args b/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args
-index 646d63aa90..58bab55572 100644
---- a/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-copy_on_read.x86_64-latest.args
-@@ -13,7 +13,6 @@ QEMU_AUDIO_DRV=none \
- -object secret,id=masterKey0,format=raw,\
- file=/tmp/lib/domain--1-test/master-key.aes \
- -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \
---cpu qemu64 \
- -m 1024 \
- -overcommit mem-lock=off \
- -smp 1,sockets=1,cores=1,threads=1 \
-diff --git a/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args b/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args
-index 59dcd98322..381956291c 100644
---- a/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-detect-zeroes.x86_64-latest.args
-@@ -13,7 +13,6 @@ QEMU_AUDIO_DRV=none \
- -object secret,id=masterKey0,format=raw,\
- file=/tmp/lib/domain--1-test/master-key.aes \
- -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \
---cpu qemu64 \
- -m 1024 \
- -overcommit mem-lock=off \
- -smp 1,sockets=1,cores=1,threads=1 \
-diff --git a/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args b/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args
-index 1b0ffee6e8..76df9d2d4d 100644
---- a/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/vhost-vsock.x86_64-latest.args
-@@ -13,7 +13,6 @@ QEMU_AUDIO_DRV=none \
- -object secret,id=masterKey0,format=raw,\
- file=/tmp/lib/domain--1-test/master-key.aes \
- -machine pc-0.13,accel=tcg,usb=off,dump-guest-core=off \
---cpu qemu64 \
- -m 1024 \
- -overcommit mem-lock=off \
- -smp 1,sockets=1,cores=1,threads=1 \
-diff --git a/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml b/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml
-index 669992bcf6..2a99f35cf8 100644
---- a/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml
-@@ -12,9 +12,6 @@
-   <features>
-     <acpi/>
-   </features>
--  <cpu mode='custom' match='exact' check='none'>
--    <model fallback='forbid'>qemu64</model>
--  </cpu>
-   <clock offset='utc'/>
-   <on_poweroff>destroy</on_poweroff>
-   <on_reboot>restart</on_reboot>
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-only-stop-external-devices-after-the-domain.patch b/SOURCES/libvirt-qemu-only-stop-external-devices-after-the-domain.patch
deleted file mode 100644
index a5475cb..0000000
--- a/SOURCES/libvirt-qemu-only-stop-external-devices-after-the-domain.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From cd9f9fa54ff87661a0958027baa0c13fca57d2fc Mon Sep 17 00:00:00 2001
-Message-Id: <cd9f9fa54ff87661a0958027baa0c13fca57d2fc@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 13 May 2020 15:49:12 +0200
-Subject: [PATCH] qemu: only stop external devices after the domain
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-A failure in qemuProcessLaunch would lead to qemuExtDevicesStop
-being called twice - once in the cleanup section and then again
-in qemuProcessStop.
-
-However, the first one is called while the QEMU process is
-still running, which is too soon for the swtpm process, because
-the swtmp_ioctl command can lock up:
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1822523
-
-Remove the first call and only leave the one in qemuProcessStop,
-which is called after the QEMU process is killed.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 006782a8bc5a27125211946fcb12a40f7d4ed12a)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <5a8b7f93e0b74cfb27f4bf780eebc7e756a5dcde.1589377631.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_process.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index dffff04554..95c0315e53 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -6962,8 +6962,6 @@ qemuProcessLaunch(virConnectPtr conn,
-     ret = 0;
- 
-  cleanup:
--    if (ret < 0)
--        qemuExtDevicesStop(driver, vm);
-     qemuDomainSecretDestroy(vm);
-     return ret;
- }
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-pass-virDomainObjPtr-to-qemuExtDevicesSetupCgroup.patch b/SOURCES/libvirt-qemu-pass-virDomainObjPtr-to-qemuExtDevicesSetupCgroup.patch
deleted file mode 100644
index 5b8062a..0000000
--- a/SOURCES/libvirt-qemu-pass-virDomainObjPtr-to-qemuExtDevicesSetupCgroup.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 745aed1c66fcde8c8bf14d67622f02a838dd7ae2 Mon Sep 17 00:00:00 2001
-Message-Id: <745aed1c66fcde8c8bf14d67622f02a838dd7ae2@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:37 +0100
-Subject: [PATCH] qemu: pass virDomainObjPtr to qemuExtDevicesSetupCgroup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 6baf97ef2c7416f3d81bdc6cf20f121b62c8fd4f)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <fcb334eecdc7d85740f1aa5f7cd9f3d151996f99.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_cgroup.c    | 2 +-
- src/qemu/qemu_extdevice.c | 3 ++-
- src/qemu/qemu_extdevice.h | 2 +-
- 3 files changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
-index 45701b4c6e..57a1231855 100644
---- a/src/qemu/qemu_cgroup.c
-+++ b/src/qemu/qemu_cgroup.c
-@@ -1262,7 +1262,7 @@ qemuSetupCgroupForExtDevices(virDomainObjPtr vm,
-                            false, &cgroup_temp) < 0)
-         goto cleanup;
- 
--    ret = qemuExtDevicesSetupCgroup(driver, vm->def, cgroup_temp);
-+    ret = qemuExtDevicesSetupCgroup(driver, vm, cgroup_temp);
- 
-  cleanup:
-     virCgroupFree(&cgroup_temp);
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index 7f3bb104d9..bb73787b8d 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -236,9 +236,10 @@ qemuExtDevicesHasDevice(virDomainDefPtr def)
- 
- int
- qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
--                          virDomainDefPtr def,
-+                          virDomainObjPtr vm,
-                           virCgroupPtr cgroup)
- {
-+    virDomainDefPtr def = vm->def;
-     size_t i;
- 
-     for (i = 0; i < def->nvideos; i++) {
-diff --git a/src/qemu/qemu_extdevice.h b/src/qemu/qemu_extdevice.h
-index df29968e16..49373a15a1 100644
---- a/src/qemu/qemu_extdevice.h
-+++ b/src/qemu/qemu_extdevice.h
-@@ -58,5 +58,5 @@ void qemuExtDevicesStop(virQEMUDriverPtr driver,
- bool qemuExtDevicesHasDevice(virDomainDefPtr def);
- 
- int qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
--                              virDomainDefPtr def,
-+                              virDomainObjPtr vm,
-                               virCgroupPtr cgroup);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-preserve-error-on-bandwidth-rollback.patch b/SOURCES/libvirt-qemu-preserve-error-on-bandwidth-rollback.patch
deleted file mode 100644
index d60acfa..0000000
--- a/SOURCES/libvirt-qemu-preserve-error-on-bandwidth-rollback.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From f4c935bfa5bd3e4f4856dfdf660be0fa50d42798 Mon Sep 17 00:00:00 2001
-Message-Id: <f4c935bfa5bd3e4f4856dfdf660be0fa50d42798@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Mon, 10 Feb 2020 17:05:54 +0100
-Subject: [PATCH] qemu: preserve error on bandwidth rollback
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We call APIs that reset the error in the rollback code.
-Preserve the error from the original call that failed.
-
-This turns the boringly cryptic:
-  error: Unable to set interface parameters
-  error: An error occurred, but the cause is unknown
-to the unexpectedly anarchist:
-  error: internal error: Child process (/usr/sbin/tc filter add
-  dev vnet1 parent ffff: protocol all u32 match u32 0 0 police
-  rate 4294968kbps burst 4294968kb mtu 64kb drop flowid :1)
-  unexpected exit status 1: Illegal "rate"
-  Illegal "police"
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Fixes: f02e21cb3379a41cd42f2d8116f2d10dabace83b
-https://bugzilla.redhat.com/show_bug.cgi?id=1800505
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 457b0e74888f61b759e334d91479c258663835d5)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <a49ef696966d8b8ca28d298ffab16c3a77b1102a.1581350626.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_driver.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 08f492fa24..af81c4a6e4 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -11642,6 +11642,9 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
- 
-         if (virNetDevBandwidthSet(net->ifname, newBandwidth, false,
-                                   !virDomainNetTypeSharesHostView(net)) < 0) {
-+            virErrorPtr orig_err;
-+
-+            virErrorPreserveLast(&orig_err);
-             ignore_value(virNetDevBandwidthSet(net->ifname,
-                                                net->bandwidth,
-                                                false,
-@@ -11650,6 +11653,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
-                 ignore_value(virDomainNetBandwidthUpdate(net,
-                                                          net->bandwidth));
-             }
-+            virErrorRestore(&orig_err);
-             goto endjob;
-         }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-prevent-attempts-to-detach-a-device-on-a-controller-with-hotplug-off.patch b/SOURCES/libvirt-qemu-prevent-attempts-to-detach-a-device-on-a-controller-with-hotplug-off.patch
deleted file mode 100644
index 5c0bf52..0000000
--- a/SOURCES/libvirt-qemu-prevent-attempts-to-detach-a-device-on-a-controller-with-hotplug-off.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 176ca1e59775810524a2375927725fbe419d9e5c Mon Sep 17 00:00:00 2001
-Message-Id: <176ca1e59775810524a2375927725fbe419d9e5c@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Mon, 18 May 2020 14:53:04 -0400
-Subject: [PATCH] qemu: prevent attempts to detach a device on a controller
- with hotplug='off'
-
-Although the original patches to support controllers with
-hotplug='off' were checking during hotplug/attach requests that the
-device was being plugged into a PCI controller that didn't have
-hotplug disabled, but I forgot to do the same for device detach (the
-main impetus for adding the feature was to prevent unplugs originating
-from within the guest, so it slipped my mind). So although the guest
-OS was ultimately unable to honor the unplug request, libvirt could
-still be used to make such a request, and since device attach/detach
-are asynchronous operations, the caller to libvirt would receive a
-success status back (the device would stubbornly/correctly remain in
-the domain status XML however)
-
-This patch remedies that, by looking at the controller for the device
-in the detach request, and immediately failing the operation if that
-controller has hotplug=off.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit c0e04c2e62957fe872b5bc3d89d5b1d95f10450c)
-
-https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200518185304.188810-1-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_hotplug.c | 30 ++++++++++++++++++++++++++++++
- 1 file changed, 30 insertions(+)
-
-diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
-index 3ccc01f0b7..29e1a41f9d 100644
---- a/src/qemu/qemu_hotplug.c
-+++ b/src/qemu/qemu_hotplug.c
-@@ -5846,6 +5846,36 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
-         return -1;
-     }
- 
-+    if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
-+
-+        virDomainControllerDefPtr controller;
-+        int controllerIdx = virDomainControllerFind(vm->def,
-+                                                    VIR_DOMAIN_CONTROLLER_TYPE_PCI,
-+                                                    info->addr.pci.bus);
-+        if (controllerIdx < 0) {
-+            virReportError(VIR_ERR_OPERATION_FAILED,
-+                           _("cannot hot unplug %s device with PCI guest address: "
-+                             VIR_PCI_DEVICE_ADDRESS_FMT
-+                             " - controller not found"),
-+                           virDomainDeviceTypeToString(detach.type),
-+                           info->addr.pci.domain, info->addr.pci.bus,
-+                           info->addr.pci.slot, info->addr.pci.function);
-+            return -1;
-+        }
-+
-+        controller = vm->def->controllers[controllerIdx];
-+        if (controller->opts.pciopts.hotplug == VIR_TRISTATE_SWITCH_OFF) {
-+            virReportError(VIR_ERR_OPERATION_FAILED,
-+                           _("cannot hot unplug %s device with PCI guest address: "
-+                             VIR_PCI_DEVICE_ADDRESS_FMT
-+                             " - not allowed by controller"),
-+                           virDomainDeviceTypeToString(detach.type),
-+                           info->addr.pci.domain, info->addr.pci.bus,
-+                           info->addr.pci.slot, info->addr.pci.function);
-+            return -1;
-+        }
-+    }
-+
-     /*
-      * Issue the qemu monitor command to delete the device (based on
-      * its alias), and optionally wait a short time in case the
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-put-virtiofsd-in-the-emulator-cgroup.patch b/SOURCES/libvirt-qemu-put-virtiofsd-in-the-emulator-cgroup.patch
deleted file mode 100644
index 7ce2a85..0000000
--- a/SOURCES/libvirt-qemu-put-virtiofsd-in-the-emulator-cgroup.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From 6c6f1a32c07941d6fe6208e1ad12dc137dbe7c41 Mon Sep 17 00:00:00 2001
-Message-Id: <6c6f1a32c07941d6fe6208e1ad12dc137dbe7c41@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:47 +0100
-Subject: [PATCH] qemu: put virtiofsd in the emulator cgroup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Wire up the code to put virtiofsd in the emulator cgroup on domain
-startup.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 9de5d69c218faa0e25c5d6a56ab5f6bacbd1a132)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <7653ce933656c9a13c9afa2a019ef11fb192bdc4.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_extdevice.c | 15 +++++++++++++++
- src/qemu/qemu_virtiofs.c  | 26 ++++++++++++++++++++++++++
- src/qemu/qemu_virtiofs.h  |  5 +++++
- 3 files changed, 46 insertions(+)
-
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index bfa770f45a..f66bafb62f 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -248,6 +248,13 @@ qemuExtDevicesHasDevice(virDomainDefPtr def)
-     if (def->tpm && def->tpm->type == VIR_DOMAIN_TPM_TYPE_EMULATOR)
-         return true;
- 
-+    for (i = 0; i < def->nfss; i++) {
-+        virDomainFSDefPtr fs = def->fss[i];
-+
-+        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS)
-+            return true;
-+    }
-+
-     return false;
- }
- 
-@@ -272,5 +279,13 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
-         qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
-         return -1;
- 
-+    for (i = 0; i < def->nfss; i++) {
-+        virDomainFSDefPtr fs = def->fss[i];
-+
-+        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS &&
-+            qemuVirtioFSSetupCgroup(vm, fs, cgroup) < 0)
-+            return -1;
-+    }
-+
-     return 0;
- }
-diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
-index 09ab2cef27..194855ece8 100644
---- a/src/qemu/qemu_virtiofs.c
-+++ b/src/qemu/qemu_virtiofs.c
-@@ -299,3 +299,29 @@ qemuVirtioFSStop(virQEMUDriverPtr driver G_GNUC_UNUSED,
-  cleanup:
-     virErrorRestore(&orig_err);
- }
-+
-+
-+int
-+qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
-+                        virDomainFSDefPtr fs,
-+                        virCgroupPtr cgroup)
-+{
-+    g_autofree char *pidfile = NULL;
-+    pid_t pid = -1;
-+    int rc;
-+
-+    if (!(pidfile = qemuVirtioFSCreatePidFilename(vm, fs->info.alias)))
-+        return -1;
-+
-+    rc = virPidFileReadPathIfAlive(pidfile, &pid, NULL);
-+    if (rc < 0 || pid == (pid_t) -1) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-+                       _("virtiofsd died unexpectedly"));
-+        return -1;
-+    }
-+
-+    if (virCgroupAddProcess(cgroup, pid) < 0)
-+        return -1;
-+
-+    return 0;
-+}
-diff --git a/src/qemu/qemu_virtiofs.h b/src/qemu/qemu_virtiofs.h
-index b2f0c57d0c..1db59917c6 100644
---- a/src/qemu/qemu_virtiofs.h
-+++ b/src/qemu/qemu_virtiofs.h
-@@ -35,3 +35,8 @@ void
- qemuVirtioFSStop(virQEMUDriverPtr driver,
-                  virDomainObjPtr vm,
-                  virDomainFSDefPtr fs);
-+
-+int
-+qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
-+                        virDomainFSDefPtr fs,
-+                        virCgroupPtr cgroup);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-remove-qemuDomainObjBegin-EndJobWithAgent.patch b/SOURCES/libvirt-qemu-remove-qemuDomainObjBegin-EndJobWithAgent.patch
deleted file mode 100644
index 0c478d3..0000000
--- a/SOURCES/libvirt-qemu-remove-qemuDomainObjBegin-EndJobWithAgent.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From bac1c96fbf2bd9d6ef728a813fda793ce1e99267 Mon Sep 17 00:00:00 2001
-Message-Id: <bac1c96fbf2bd9d6ef728a813fda793ce1e99267@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Thu, 20 Feb 2020 10:52:27 -0600
-Subject: [PATCH] qemu: remove qemuDomainObjBegin/EndJobWithAgent()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This function potentially grabs both a monitor job and an agent job at
-the same time. This is problematic because it means that a malicious (or
-just buggy) guest agent can cause a denial of service on the host. The
-presence of this function makes it easy to do the wrong thing and hold
-both jobs at the same time. All existing uses have already been removed
-by previous commits.
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 3c436c22a4f94c85c2b5e7b5fb84af48219d78e3)
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1759566
-Message-Id: <20200220165227.11491-6-jjongsma@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/THREADS.txt   | 58 +++++-------------------------------------
- src/qemu/qemu_domain.c | 56 ++++------------------------------------
- src/qemu/qemu_domain.h |  7 -----
- 3 files changed, 11 insertions(+), 110 deletions(-)
-
-diff --git a/src/qemu/THREADS.txt b/src/qemu/THREADS.txt
-index aa428fda6a..a7d8709a43 100644
---- a/src/qemu/THREADS.txt
-+++ b/src/qemu/THREADS.txt
-@@ -61,11 +61,12 @@ There are a number of locks on various objects
- 
-     Agent job condition is then used when thread wishes to talk to qemu
-     agent monitor. It is possible to acquire just agent job
--    (qemuDomainObjBeginAgentJob), or only normal job
--    (qemuDomainObjBeginJob) or both at the same time
--    (qemuDomainObjBeginJobWithAgent). Which type of job to grab depends
--    whether caller wishes to communicate only with agent socket, or only
--    with qemu monitor socket or both, respectively.
-+    (qemuDomainObjBeginAgentJob), or only normal job (qemuDomainObjBeginJob)
-+    but not both at the same time. Holding an agent job and a normal job would
-+    allow an unresponsive or malicious agent to block normal libvirt API and
-+    potentially result in a denial of service. Which type of job to grab
-+    depends whether caller wishes to communicate only with agent socket, or
-+    only with qemu monitor socket.
- 
-     Immediately after acquiring the virDomainObjPtr lock, any method
-     which intends to update state must acquire asynchronous, normal or
-@@ -141,18 +142,6 @@ To acquire the agent job condition
- 
- 
- 
--To acquire both normal and agent job condition
--
--  qemuDomainObjBeginJobWithAgent()
--    - Waits until there is no normal and no agent job set
--    - Sets both job.active and job.agentActive with required job types
--
--  qemuDomainObjEndJobWithAgent()
--    - Sets both job.active and job.agentActive to 0
--    - Signals on job.cond condition
--
--
--
- To acquire the asynchronous job condition
- 
-   qemuDomainObjBeginAsyncJob()
-@@ -292,41 +281,6 @@ Design patterns
-      virDomainObjEndAPI(&obj);
- 
- 
-- * Invoking both monitor and agent commands on a virDomainObjPtr
--
--     virDomainObjPtr obj;
--     qemuAgentPtr agent;
--
--     obj = qemuDomObjFromDomain(dom);
--
--     qemuDomainObjBeginJobWithAgent(obj, QEMU_JOB_TYPE, QEMU_AGENT_JOB_TYPE);
--
--     if (!virDomainObjIsActive(dom))
--         goto cleanup;
--
--     ...do prep work...
--
--     if (!qemuDomainAgentAvailable(obj, true))
--         goto cleanup;
--
--     agent = qemuDomainObjEnterAgent(obj);
--     qemuAgentXXXX(agent, ..);
--     qemuDomainObjExitAgent(obj, agent);
--
--     ...
--
--     qemuDomainObjEnterMonitor(obj);
--     qemuMonitorXXXX(priv->mon);
--     qemuDomainObjExitMonitor(obj);
--
--     /* Alternatively, talk to the monitor first and then talk to the agent. */
--
--     ...do final work...
--
--     qemuDomainObjEndJobWithAgent(obj);
--     virDomainObjEndAPI(&obj);
--
--
-  * Running asynchronous job
- 
-      virDomainObjPtr obj;
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 0baa80582c..f037f0812e 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -9734,26 +9734,6 @@ qemuDomainObjBeginAgentJob(virQEMUDriverPtr driver,
-                                          QEMU_ASYNC_JOB_NONE, false);
- }
- 
--/**
-- * qemuDomainObjBeginJobWithAgent:
-- *
-- * Grabs both monitor and agent types of job. Use if caller talks to
-- * both monitor and guest agent. However, if @job (or @agentJob) is
-- * QEMU_JOB_NONE (or QEMU_AGENT_JOB_NONE) only agent job is acquired (or
-- * monitor job).
-- *
-- * To end job call qemuDomainObjEndJobWithAgent.
-- */
--int
--qemuDomainObjBeginJobWithAgent(virQEMUDriverPtr driver,
--                               virDomainObjPtr obj,
--                               qemuDomainJob job,
--                               qemuDomainAgentJob agentJob)
--{
--    return qemuDomainObjBeginJobInternal(driver, obj, job, agentJob,
--                                         QEMU_ASYNC_JOB_NONE, false);
--}
--
- int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
-                                virDomainObjPtr obj,
-                                qemuDomainAsyncJob asyncJob,
-@@ -9868,31 +9848,6 @@ qemuDomainObjEndAgentJob(virDomainObjPtr obj)
-     virCondBroadcast(&priv->job.cond);
- }
- 
--void
--qemuDomainObjEndJobWithAgent(virQEMUDriverPtr driver,
--                             virDomainObjPtr obj)
--{
--    qemuDomainObjPrivatePtr priv = obj->privateData;
--    qemuDomainJob job = priv->job.active;
--    qemuDomainAgentJob agentJob = priv->job.agentActive;
--
--    priv->jobs_queued--;
--
--    VIR_DEBUG("Stopping both jobs: %s %s (async=%s vm=%p name=%s)",
--              qemuDomainJobTypeToString(job),
--              qemuDomainAgentJobTypeToString(agentJob),
--              qemuDomainAsyncJobTypeToString(priv->job.asyncJob),
--              obj, obj->def->name);
--
--    qemuDomainObjResetJob(priv);
--    qemuDomainObjResetAgentJob(priv);
--    if (qemuDomainTrackJob(job))
--        qemuDomainObjSaveStatus(driver, obj);
--    /* We indeed need to wake up ALL threads waiting because
--     * grabbing a job requires checking more variables. */
--    virCondBroadcast(&priv->job.cond);
--}
--
- void
- qemuDomainObjEndAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj)
- {
-@@ -9926,9 +9881,9 @@ qemuDomainObjAbortAsyncJob(virDomainObjPtr obj)
-  * obj must be locked before calling
-  *
-  * To be called immediately before any QEMU monitor API call
-- * Must have already either called qemuDomainObjBeginJob() or
-- * qemuDomainObjBeginJobWithAgent() and checked that the VM is
-- * still active; may not be used for nested async jobs.
-+ * Must have already called qemuDomainObjBeginJob() and checked
-+ * that the VM is still active; may not be used for nested async
-+ * jobs.
-  *
-  * To be followed with qemuDomainObjExitMonitor() once complete
-  */
-@@ -10050,9 +10005,8 @@ qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver,
-  * obj must be locked before calling
-  *
-  * To be called immediately before any QEMU agent API call.
-- * Must have already called qemuDomainObjBeginAgentJob() or
-- * qemuDomainObjBeginJobWithAgent() and checked that the VM is
-- * still active.
-+ * Must have already called qemuDomainObjBeginAgentJob() and
-+ * checked that the VM is still active.
-  *
-  * To be followed with qemuDomainObjExitAgent() once complete
-  */
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index cdcb6ecc7a..c581b3a162 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -651,11 +651,6 @@ int qemuDomainObjBeginAgentJob(virQEMUDriverPtr driver,
-                                virDomainObjPtr obj,
-                                qemuDomainAgentJob agentJob)
-     G_GNUC_WARN_UNUSED_RESULT;
--int qemuDomainObjBeginJobWithAgent(virQEMUDriverPtr driver,
--                                   virDomainObjPtr obj,
--                                   qemuDomainJob job,
--                                   qemuDomainAgentJob agentJob)
--    G_GNUC_WARN_UNUSED_RESULT;
- int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
-                                virDomainObjPtr obj,
-                                qemuDomainAsyncJob asyncJob,
-@@ -674,8 +669,6 @@ int qemuDomainObjBeginJobNowait(virQEMUDriverPtr driver,
- void qemuDomainObjEndJob(virQEMUDriverPtr driver,
-                          virDomainObjPtr obj);
- void qemuDomainObjEndAgentJob(virDomainObjPtr obj);
--void qemuDomainObjEndJobWithAgent(virQEMUDriverPtr driver,
--                                  virDomainObjPtr obj);
- void qemuDomainObjEndAsyncJob(virQEMUDriverPtr driver,
-                               virDomainObjPtr obj);
- void qemuDomainObjAbortAsyncJob(virDomainObjPtr obj);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-rename-qemuAgentGetFSInfoInternalDisk.patch b/SOURCES/libvirt-qemu-rename-qemuAgentGetFSInfoInternalDisk.patch
deleted file mode 100644
index f5a4707..0000000
--- a/SOURCES/libvirt-qemu-rename-qemuAgentGetFSInfoInternalDisk.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From f1ffcda533c6c95e70044aeee86d017ae6132876 Mon Sep 17 00:00:00 2001
-Message-Id: <f1ffcda533c6c95e70044aeee86d017ae6132876@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Thu, 20 Feb 2020 10:52:23 -0600
-Subject: [PATCH] qemu: rename qemuAgentGetFSInfoInternalDisk()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function name doesn't give a good idea of what the function does.
-Rename to qemuAgentGetFSInfoFillDisks() to make it more obvious than it
-is filling in the disk information in the fsinfo struct.
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit e888c0f66752bb6516d63a612c20f565cbf9c0ca)
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1759566
-Message-Id: <20200220165227.11491-2-jjongsma@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_agent.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index f759785050..0f099f3b2a 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -1925,9 +1925,9 @@ qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent)
- }
- 
- static int
--qemuAgentGetFSInfoInternalDisk(virJSONValuePtr jsondisks,
--                               qemuAgentFSInfoPtr fsinfo,
--                               virDomainDefPtr vmdef)
-+qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-+                            qemuAgentFSInfoPtr fsinfo,
-+                            virDomainDefPtr vmdef)
- {
-     size_t ndisks;
-     size_t i;
-@@ -2139,7 +2139,7 @@ qemuAgentGetFSInfoInternal(qemuAgentPtr mon,
-             goto cleanup;
-         }
- 
--        if (qemuAgentGetFSInfoInternalDisk(disk, info_ret[i], vmdef) < 0)
-+        if (qemuAgentGetFSInfoFillDisks(disk, info_ret[i], vmdef) < 0)
-             goto cleanup;
-     }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-snapshot-Allow-snapshots-of-read-only-disks-when-we-can-create-them.patch b/SOURCES/libvirt-qemu-snapshot-Allow-snapshots-of-read-only-disks-when-we-can-create-them.patch
deleted file mode 100644
index 2812437..0000000
--- a/SOURCES/libvirt-qemu-snapshot-Allow-snapshots-of-read-only-disks-when-we-can-create-them.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From a229c76e2a5008dbdbcad996ae4f75a3d51b709f Mon Sep 17 00:00:00 2001
-Message-Id: <a229c76e2a5008dbdbcad996ae4f75a3d51b709f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 12 May 2020 17:24:10 +0200
-Subject: [PATCH] qemu: snapshot: Allow snapshots of read-only disks when we
- can create them
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-With -blockdev or when reusing externally created images and thus
-without the need for formatting the image we actually can support
-snapshots of read-only disks. Arguably it's not very useful so they are
-not done by default but users of libvirt such as oVirt are actually
-using this.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1832204
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit fe574ea1f52daebddfdc91dd27234059c375e4bf)
-Message-Id: <2f8f6e53de334a6e3c2d91711fe4dbd81d8b3ee8.1589296861.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@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 26215f8d6a..7ae8641577 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -14968,7 +14968,7 @@ qemuDomainSnapshotPrepareDiskExternal(virDomainDiskDefPtr disk,
-     int err;
-     int rc;
- 
--    if (disk->src->readonly) {
-+    if (disk->src->readonly && !(reuse || blockdev)) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                        _("external snapshot for readonly disk %s "
-                          "is not supported"), disk->dst);
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-snapshot-Always-rewrite-backingStore-data-when-reusing-existing-images.patch b/SOURCES/libvirt-qemu-snapshot-Always-rewrite-backingStore-data-when-reusing-existing-images.patch
deleted file mode 100644
index 003b246..0000000
--- a/SOURCES/libvirt-qemu-snapshot-Always-rewrite-backingStore-data-when-reusing-existing-images.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 647f43ec778b6d5dafb256d5dbe4ad1f0a4e9776 Mon Sep 17 00:00:00 2001
-Message-Id: <647f43ec778b6d5dafb256d5dbe4ad1f0a4e9776@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:47 +0100
-Subject: [PATCH] qemu: snapshot: Always rewrite backingStore data when reusing
- existing images
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Don't adopt the backing store data when reusing images provided by the
-user. This will force a backing chain re-probe as users might have
-passed in something unexpected in the overlay where our view of the
-backing chain would not correspond.
-
-This is done only for inactive snapshots as there we have way less
-verification.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 8e9e73a984165d5e9a82ba1f4531bb30482db5a8)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1524278
-Message-Id: <baa37a0240d05d2441a54e7ad1c1a8648c7e7f65.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index e651c9e819..5c72db2544 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -14678,7 +14678,8 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
-         if (virStorageSourceInitChainElement(newsrc, defdisk->src, false) < 0)
-             goto cleanup;
- 
--        if (virStorageSourceHasBacking(defdisk->src)) {
-+        if (!reuse &&
-+            virStorageSourceHasBacking(defdisk->src)) {
-             defdisk->src->readonly = true;
-             newsrc->backingStore = g_steal_pointer(&defdisk->src);
-         } else {
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-snapshot-Prevent-too-nested-domain-XML-when-doing-inactive-snapshot.patch b/SOURCES/libvirt-qemu-snapshot-Prevent-too-nested-domain-XML-when-doing-inactive-snapshot.patch
deleted file mode 100644
index 48e23b3..0000000
--- a/SOURCES/libvirt-qemu-snapshot-Prevent-too-nested-domain-XML-when-doing-inactive-snapshot.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 97dafbcc080bdb3253dbd451c94ab8f687b156ba Mon Sep 17 00:00:00 2001
-Message-Id: <97dafbcc080bdb3253dbd451c94ab8f687b156ba@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:48 +0100
-Subject: [PATCH] qemu: snapshot: Prevent too-nested domain XML when doing
- inactive snapshot
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Similarly to 510d154a0b41aa70aadabc0918d16dee22882394 we need to prevent
-doing too deeply nested backing chains and reject them with a sane error
-message.
-
-Add a loop to go through the snapshots prior to attempting actually
-creating them to prevent some possible inconsistent scenarios.
-
-We don't need to do it when reusing backing chains as we'll be
-re-detecting the backing chain in that case anyways.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit b168fa88b85dec181882816ab65a59a6c4500667)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1524278
-Message-Id: <3272682df55dcc564055a2badb0c61d4680c81a9.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 5c72db2544..833cf9f3d9 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -14632,6 +14632,9 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
-         if (!snapdisk->src->format)
-             snapdisk->src->format = VIR_STORAGE_FILE_QCOW2;
- 
-+        if (qemuDomainStorageSourceValidateDepth(defdisk->src, 1, defdisk->dst) < 0)
-+            return -1;
-+
-         /* creates cmd line args: qemu-img create -f qcow2 -o */
-         if (!(cmd = virCommandNewArgList(qemuImgPath,
-                                          "create",
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-snapshot-go-through-cleanup-on-error.patch b/SOURCES/libvirt-qemu-snapshot-go-through-cleanup-on-error.patch
deleted file mode 100644
index d1fefbd..0000000
--- a/SOURCES/libvirt-qemu-snapshot-go-through-cleanup-on-error.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 1196c633f969dd9457b9b431fbcd944e35249b5f Mon Sep 17 00:00:00 2001
-Message-Id: <1196c633f969dd9457b9b431fbcd944e35249b5f@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:58 +0100
-Subject: [PATCH] qemu: snapshot: go through cleanup on error
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-A recent commit added an error check for too-nested backing chains
-followed by a return, even though errors above jump to cleanup.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Fixes: b168fa88b85dec181882816ab65a59a6c4500667
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit c07ef7c563c7d661fd4b59bac190cd1db44bd3e5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1524278
-Message-Id: <5903cd3cb7845ed3151492457a4e92e57a15fef0.1580824112.git.pkrempa@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 833cf9f3d9..e19e1da0bb 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -14633,7 +14633,7 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver,
-             snapdisk->src->format = VIR_STORAGE_FILE_QCOW2;
- 
-         if (qemuDomainStorageSourceValidateDepth(defdisk->src, 1, defdisk->dst) < 0)
--            return -1;
-+            goto cleanup;
- 
-         /* creates cmd line args: qemu-img create -f qcow2 -o */
-         if (!(cmd = virCommandNewArgList(qemuImgPath,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-store-complete-agent-filesystem-information.patch b/SOURCES/libvirt-qemu-store-complete-agent-filesystem-information.patch
deleted file mode 100644
index 7d76633..0000000
--- a/SOURCES/libvirt-qemu-store-complete-agent-filesystem-information.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 668555bc90e36fd571ff3ac5aa798e951a84ee19 Mon Sep 17 00:00:00 2001
-Message-Id: <668555bc90e36fd571ff3ac5aa798e951a84ee19@dist-git>
-From: Jonathon Jongsma <jjongsma@redhat.com>
-Date: Thu, 20 Feb 2020 10:52:24 -0600
-Subject: [PATCH] qemu: store complete agent filesystem information
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In an effort to avoid holding both an agent and normal job at the same
-time, we shouldn't access the vm definition from within qemu_agent.c
-(i.e. while the agent job is being held). In preparation, we need to
-store the full filesystem disk information in qemuAgentDiskInfo.  In a
-following commit, we can pass this information back to the caller and
-the caller can search the vm definition to match the filsystem disk to
-an alias.
-
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit bdb8a800b4920cf9184fd2fd117b17c67ba74dfb)
-Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1759566
-Message-Id: <20200220165227.11491-3-jjongsma@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_agent.c | 36 ++++++++++++++++++++----------------
- 1 file changed, 20 insertions(+), 16 deletions(-)
-
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index 0f099f3b2a..077b5538de 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -1849,6 +1849,11 @@ typedef qemuAgentDiskInfo *qemuAgentDiskInfoPtr;
- struct _qemuAgentDiskInfo {
-     char *alias;
-     char *serial;
-+    virPCIDeviceAddress pci_controller;
-+    char *bus_type;
-+    unsigned int bus;
-+    unsigned int target;
-+    unsigned int unit;
-     char *devnode;
- };
- 
-@@ -1872,6 +1877,7 @@ qemuAgentDiskInfoFree(qemuAgentDiskInfoPtr info)
- 
-     VIR_FREE(info->serial);
-     VIR_FREE(info->alias);
-+    VIR_FREE(info->bus_type);
-     VIR_FREE(info->devnode);
-     VIR_FREE(info);
- }
-@@ -1952,10 +1958,6 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-         qemuAgentDiskInfoPtr disk;
-         virDomainDiskDefPtr diskDef;
-         const char *val;
--        unsigned int bus;
--        unsigned int target;
--        unsigned int unit;
--        virPCIDeviceAddress pci_address;
- 
-         if (!jsondisk) {
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-@@ -1969,6 +1971,9 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-             return -1;
-         disk = fsinfo->disks[i];
- 
-+        if ((val = virJSONValueObjectGetString(jsondisk, "bus-type")))
-+            disk->bus_type = g_strdup(val);
-+
-         if ((val = virJSONValueObjectGetString(jsondisk, "serial")))
-             disk->serial = g_strdup(val);
- 
-@@ -1985,9 +1990,9 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-             } \
-         } while (0)
- 
--        GET_DISK_ADDR(jsondisk, &bus, "bus");
--        GET_DISK_ADDR(jsondisk, &target, "target");
--        GET_DISK_ADDR(jsondisk, &unit, "unit");
-+        GET_DISK_ADDR(jsondisk, &disk->bus, "bus");
-+        GET_DISK_ADDR(jsondisk, &disk->target, "target");
-+        GET_DISK_ADDR(jsondisk, &disk->unit, "unit");
- 
-         if (!(pci = virJSONValueObjectGet(jsondisk, "pci-controller"))) {
-             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-@@ -1996,18 +2001,17 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-             return -1;
-         }
- 
--        GET_DISK_ADDR(pci, &pci_address.domain, "domain");
--        GET_DISK_ADDR(pci, &pci_address.bus, "bus");
--        GET_DISK_ADDR(pci, &pci_address.slot, "slot");
--        GET_DISK_ADDR(pci, &pci_address.function, "function");
-+        GET_DISK_ADDR(pci, &disk->pci_controller.domain, "domain");
-+        GET_DISK_ADDR(pci, &disk->pci_controller.bus, "bus");
-+        GET_DISK_ADDR(pci, &disk->pci_controller.slot, "slot");
-+        GET_DISK_ADDR(pci, &disk->pci_controller.function, "function");
- 
- #undef GET_DISK_ADDR
--
-         if (!(diskDef = virDomainDiskByAddress(vmdef,
--                                               &pci_address,
--                                               bus,
--                                               target,
--                                               unit)))
-+                                               &disk->pci_controller,
-+                                               disk->bus,
-+                                               disk->target,
-+                                               disk->unit)))
-             continue;
- 
-         disk->alias = g_strdup(diskDef->dst);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-substitute-missing-model-name-for-host-passthrough.patch b/SOURCES/libvirt-qemu-substitute-missing-model-name-for-host-passthrough.patch
deleted file mode 100644
index 2bb13d9..0000000
--- a/SOURCES/libvirt-qemu-substitute-missing-model-name-for-host-passthrough.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 961deedc28962b55c37430f974016aced31e1120 Mon Sep 17 00:00:00 2001
-Message-Id: <961deedc28962b55c37430f974016aced31e1120@dist-git>
-From: Collin Walling <walling@linux.ibm.com>
-Date: Fri, 2 Oct 2020 10:13:11 +0200
-Subject: [PATCH] qemu: substitute missing model name for host-passthrough
-
-Before:
-  $ uname -m
-  s390x
-  $ cat passthrough-cpu.xml
-  <cpu check="none" mode="host-passthrough" />
-  $ virsh hypervisor-cpu-compare passthrough-cpu.xml
-  error: Failed to compare hypervisor CPU with passthrough-cpu.xml
-  error: internal error: unable to execute QEMU command 'query-cpu-model-comp
-  arison': Invalid parameter type for 'modelb.name', expected: string
-
-After:
-  $ virsh hypervisor-cpu-compare passthrough-cpu.xml
-  CPU described in passthrough-cpu.xml is identical to the CPU provided by hy
-  pervisor on the host
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Signed-off-by: Collin Walling <walling@linux.ibm.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit 9c6996124f4ef1635fbfe47090dadaf5a12b42e9)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1850680
-
-Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
-Message-Id: <20201002081311.449901-2-twiederh@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_driver.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index b5df0c63d4..f8a259e020 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -13539,6 +13539,15 @@ qemuConnectCompareHypervisorCPU(virConnectPtr conn,
-         if (virCPUDefParseXMLString(xmlCPU, VIR_CPU_TYPE_AUTO, &cpu) < 0)
-             goto cleanup;
- 
-+        if (!cpu->model) {
-+            if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
-+                cpu->model = g_strdup("host");
-+            } else {
-+                virReportError(VIR_ERR_INVALID_ARG, "%s",
-+                               _("cpu parameter is missing a model name"));
-+                goto cleanup;
-+            }
-+        }
-         ret = qemuConnectCPUModelComparison(qemuCaps, cfg->libDir,
-                                             cfg->user, cfg->group,
-                                             hvCPU, cpu, failIncompatible);
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-qemu-support-interface-teaming-functionality.patch b/SOURCES/libvirt-qemu-support-interface-teaming-functionality.patch
deleted file mode 100644
index 524c2aa..0000000
--- a/SOURCES/libvirt-qemu-support-interface-teaming-functionality.patch
+++ /dev/null
@@ -1,222 +0,0 @@
-From 16ba1d0258765d9c3b5e2da666ed6d4d933e26d9 Mon Sep 17 00:00:00 2001
-Message-Id: <16ba1d0258765d9c3b5e2da666ed6d4d933e26d9@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 30 Jan 2020 14:12:41 -0500
-Subject: [PATCH] qemu: support interface <teaming> functionality
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The QEMU driver uses the <teaming type='persistent|transient'
-persistent='blah'/> element to setup a "failover" pair of devices -
-the persistent device must be a virtio emulated NIC, with the only
-extra configuration being the addition of ",failover=on" to the device
-commandline, and the transient device must be a hostdev NIC
-(<interface type='hostdev'> or <interface type='network'> with a
-network that is a pool of SRIOV VFs) where the extra configuration is
-the addition of ",failover_pair_id=$aliasOfVirtio" to the device
-commandline. These new options are supported in QEMU 4.2.0 and later.
-
-Extra qemu-specific validation is added to ensure that the device
-type/model is appropriate and that the qemu binary supports these
-commandline options.
-
-The result of this will be:
-
-1) The virtio device presented to the guest will have an extra bit set
-in its PCI capabilities indicating that it can be used as a failover
-backup device. The virtio guest driver will need to be equipped to do
-something with this information - this is included in the Linux
-virtio-net driver in kernel 4.18 and above (and also backported to
-some older distro kernels). Unfortunately there is no way for libvirt
-to learn whether or not the guest driver supports failover - if it
-doesn't then the extra PCI capability will be ignored and the guest OS
-will just see two independent devices. (NB: the current virtio guest
-driver also requires that the MAC addresses of the two NICs match in
-order to pair them into a bond).
-
-2) When a migration is requested, QEMu will automatically unplug the
-transient/hostdev NIC from the guest on the source host before
-starting migration, and automatically re-plug a similar device after
-restarting the guest CPUs on the destination host. While the transient
-NIC is unplugged, all network traffic will go through the
-persistent/virtio device, but when the hostdev NIC is plugged in, it
-will get all the traffic. This means that in normal circumstances the
-guest gets the performance advantage of vfio-assigned "real hardware"
-networking, but it can still be migrated with the only downside being
-a performance penalty (due to using an emulated NIC) during the
-migration.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit eb9f6cc4b3464707cf689fda9812e5129003bf27)
-
-https://bugzilla.redhat.com/1693587
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200130191244.24174-4-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_command.c                       |  9 +++++
- src/qemu/qemu_domain.c                        | 36 +++++++++++++++--
- .../qemuxml2argvdata/net-virtio-teaming.args  | 40 +++++++++++++++++++
- tests/qemuxml2argvtest.c                      |  4 ++
- 4 files changed, 86 insertions(+), 3 deletions(-)
- create mode 100644 tests/qemuxml2argvdata/net-virtio-teaming.args
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 7a184c229e..d144855b0d 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -3833,6 +3833,8 @@ qemuBuildNicDevStr(virDomainDefPtr def,
-         }
-         virBufferAsprintf(&buf, ",host_mtu=%u", net->mtu);
-     }
-+    if (usingVirtio && net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_PERSISTENT)
-+       virBufferAddLit(&buf, ",failover=on");
- 
-     virBufferAsprintf(&buf, ",netdev=host%s", net->info.alias);
-     virBufferAsprintf(&buf, ",id=%s", net->info.alias);
-@@ -4704,6 +4706,13 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def,
-     if (qemuBuildRomStr(&buf, dev->info) < 0)
-         return NULL;
- 
-+    if (dev->parentnet &&
-+        dev->parentnet->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT &&
-+        dev->parentnet->teaming.persistent) {
-+        virBufferAsprintf(&buf,  ",failover_pair_id=%s",
-+                          dev->parentnet->teaming.persistent);
-+    }
-+
-     return virBufferContentAndReset(&buf);
- }
- 
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 91a9f0481b..e37404340f 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -6391,12 +6391,20 @@ qemuDomainValidateActualNetDef(const virDomainNetDef *net,
-         return -1;
-     }
- 
-+    if (net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT &&
-+        actualType != VIR_DOMAIN_NET_TYPE_HOSTDEV) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                       _("interface %s - teaming transient device must be type='hostdev', not '%s'"),
-+                       macstr, virDomainNetTypeToString(actualType));
-+        return -1;
-+    }
-     return 0;
- }
- 
- 
- static int
--qemuDomainDeviceDefValidateNetwork(const virDomainNetDef *net)
-+qemuDomainDeviceDefValidateNetwork(const virDomainNetDef *net,
-+                                   virQEMUCapsPtr qemuCaps)
- {
-     bool hasIPv4 = false;
-     bool hasIPv6 = false;
-@@ -6481,7 +6489,29 @@ qemuDomainDeviceDefValidateNetwork(const virDomainNetDef *net)
-         return -1;
-     }
- 
--    if (net->coalesce && !qemuDomainNetSupportsCoalesce(net->type)) {
-+    if (net->teaming.type != VIR_DOMAIN_NET_TEAMING_TYPE_NONE &&
-+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_NET_FAILOVER)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("virtio-net failover (teaming) is not supported with this QEMU binary"));
-+        return -1;
-+    }
-+    if (net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_PERSISTENT
-+        && !virDomainNetIsVirtioModel(net)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                       _("virtio-net teaming persistent interface must be <model type='virtio'/>, not '%s'"),
-+                       virDomainNetGetModelString(net));
-+        return -1;
-+    }
-+    if (net->teaming.type == VIR_DOMAIN_NET_TEAMING_TYPE_TRANSIENT &&
-+        net->type != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
-+        net->type != VIR_DOMAIN_NET_TYPE_NETWORK) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                       _("virtio-net teaming transient interface must be type='hostdev', not '%s'"),
-+                       virDomainNetTypeToString(net->type));
-+        return -1;
-+    }
-+
-+   if (net->coalesce && !qemuDomainNetSupportsCoalesce(net->type)) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                        _("coalesce settings on interface type %s are not supported"),
-                        virDomainNetTypeToString(net->type));
-@@ -8377,7 +8407,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
- 
-     switch ((virDomainDeviceType)dev->type) {
-     case VIR_DOMAIN_DEVICE_NET:
--        ret = qemuDomainDeviceDefValidateNetwork(dev->data.net);
-+        ret = qemuDomainDeviceDefValidateNetwork(dev->data.net, qemuCaps);
-         break;
- 
-     case VIR_DOMAIN_DEVICE_CHR:
-diff --git a/tests/qemuxml2argvdata/net-virtio-teaming.args b/tests/qemuxml2argvdata/net-virtio-teaming.args
-new file mode 100644
-index 0000000000..19e7260843
---- /dev/null
-+++ b/tests/qemuxml2argvdata/net-virtio-teaming.args
-@@ -0,0 +1,40 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest1 \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-i386 \
-+-name QEMUGuest1 \
-+-S \
-+-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,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-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-+-netdev user,id=hostua-backup0 \
-+-device virtio-net-pci,failover=on,netdev=hostua-backup0,id=ua-backup0,\
-+mac=00:11:22:33:44:55,bus=pci.0,addr=0x3 \
-+-netdev user,id=hostua-backup1 \
-+-device virtio-net-pci,failover=on,netdev=hostua-backup1,id=ua-backup1,\
-+mac=66:44:33:22:11:00,bus=pci.0,addr=0x4 \
-+-device vfio-pci,host=0000:03:07.1,id=hostdev0,bus=pci.0,addr=0x5,\
-+failover_pair_id=ua-backup0 \
-+-device vfio-pci,host=0000:03:07.2,id=hostdev1,bus=pci.0,addr=0x6,\
-+failover_pair_id=ua-backup1 \
-+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index b923590930..4d26fe0b55 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1308,6 +1308,10 @@ mymain(void)
-             QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE,
-             QEMU_CAPS_VIRTIO_NET_TX_QUEUE_SIZE);
-     DO_TEST_PARSE_ERROR("net-virtio-rxqueuesize-invalid-size", NONE);
-+    DO_TEST("net-virtio-teaming",
-+            QEMU_CAPS_VIRTIO_NET_FAILOVER,
-+            QEMU_CAPS_DEVICE_VFIO_PCI);
-+    DO_TEST_PARSE_ERROR("net-virtio-teaming", NONE);
-     DO_TEST("net-eth", NONE);
-     DO_TEST("net-eth-ifname", NONE);
-     DO_TEST("net-eth-names", NONE);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu-use-QEMU_CAPS_STORAGE_WERROR-for-disk-error-attributes.patch b/SOURCES/libvirt-qemu-use-QEMU_CAPS_STORAGE_WERROR-for-disk-error-attributes.patch
deleted file mode 100644
index 20a9b01..0000000
--- a/SOURCES/libvirt-qemu-use-QEMU_CAPS_STORAGE_WERROR-for-disk-error-attributes.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-From 94f0a246fd5e53d24feff99704fca0e812c3f50d Mon Sep 17 00:00:00 2001
-Message-Id: <94f0a246fd5e53d24feff99704fca0e812c3f50d@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 1 Apr 2020 17:19:27 +0200
-Subject: [PATCH] qemu: use QEMU_CAPS_STORAGE_WERROR for disk-error attributes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When moving the formatting of this attributes from -drive
-to -device, the QEMU_CAPS_USB_STORAGE_WERROR capability
-was used, because usb-storage was the last device to gain
-this capability.
-
-However this lead to the assumption that QEMU binaries
-without the usb-storage device do not support this,
-leading to breakage on s390x with blockdev.
-
-Fixes: bb4f3543bbf3ebbffa833ae7df55c298920243eb
-https://bugzilla.redhat.com/show_bug.cgi?id=1819250
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 29fc9e96a9db30000137e648b775b6b08e05d43b)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <890258bf43d483173d07687f2eff72c03a243580.1585754141.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_command.c                              |  4 ++--
- .../disk-error-policy-s390x.s390x-2.12.0.args        | 12 ++++++------
- .../disk-error-policy-s390x.s390x-latest.args        | 12 ++++++------
- 3 files changed, 14 insertions(+), 14 deletions(-)
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index de97504ce1..4653e6ac3c 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -1805,7 +1805,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk,
- 
-     /* werror/rerror are really frontend attributes, but older
-      * qemu requires them on -drive instead of -device */
--    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_STORAGE_WERROR))
-+    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_STORAGE_WERROR))
-         qemuBuildDiskFrontendAttributeErrorPolicy(disk, &opt);
- 
-     if (disk->src->readonly)
-@@ -2256,7 +2256,7 @@ qemuBuildDiskDeviceStr(const virDomainDef *def,
- 
-     qemuBuildDiskFrontendAttributes(disk, &opt);
- 
--    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_USB_STORAGE_WERROR))
-+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_STORAGE_WERROR))
-         qemuBuildDiskFrontendAttributeErrorPolicy(disk, &opt);
- 
-     return virBufferContentAndReset(&opt);
-diff --git a/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args
-index cf932d1fad..6b93b74ec1 100644
---- a/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args
-+++ b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args
-@@ -26,17 +26,17 @@ file=/tmp/lib/domain--1-guest/master-key.aes \
- -no-shutdown \
- -boot strict=on \
- -drive file=/var/images/image1,format=qcow2,if=none,id=drive-virtio-disk0,\
--werror=stop,rerror=stop,cache=none \
-+cache=none \
- -device virtio-blk-ccw,scsi=off,devno=fe.0.0000,drive=drive-virtio-disk0,\
--id=virtio-disk0,bootindex=1,write-cache=on \
-+id=virtio-disk0,bootindex=1,write-cache=on,werror=stop,rerror=stop \
- -drive file=/var/images/image2,format=qcow2,if=none,id=drive-virtio-disk1,\
--werror=enospc,cache=none \
-+cache=none \
- -device virtio-blk-ccw,scsi=off,devno=fe.0.0001,drive=drive-virtio-disk1,\
--id=virtio-disk1,write-cache=on \
-+id=virtio-disk1,write-cache=on,werror=enospc \
- -drive file=/var/images/image3,format=qcow2,if=none,id=drive-virtio-disk2,\
--werror=report,rerror=ignore,cache=none \
-+cache=none \
- -device virtio-blk-ccw,scsi=off,devno=fe.0.0002,drive=drive-virtio-disk2,\
--id=virtio-disk2,write-cache=on \
-+id=virtio-disk2,write-cache=on,werror=report,rerror=ignore \
- -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
- resourcecontrol=deny \
- -msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args
-index 5748ad7823..b1604675a1 100644
---- a/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args
-+++ b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args
-@@ -26,17 +26,17 @@ file=/tmp/lib/domain--1-guest/master-key.aes \
- -no-shutdown \
- -boot strict=on \
- -drive file=/var/images/image1,format=qcow2,if=none,id=drive-virtio-disk0,\
--werror=stop,rerror=stop,cache=none \
-+cache=none \
- -device virtio-blk-ccw,scsi=off,devno=fe.0.0000,drive=drive-virtio-disk0,\
--id=virtio-disk0,bootindex=1,write-cache=on \
-+id=virtio-disk0,bootindex=1,write-cache=on,werror=stop,rerror=stop \
- -drive file=/var/images/image2,format=qcow2,if=none,id=drive-virtio-disk1,\
--werror=enospc,cache=none \
-+cache=none \
- -device virtio-blk-ccw,scsi=off,devno=fe.0.0001,drive=drive-virtio-disk1,\
--id=virtio-disk1,write-cache=on \
-+id=virtio-disk1,write-cache=on,werror=enospc \
- -drive file=/var/images/image3,format=qcow2,if=none,id=drive-virtio-disk2,\
--werror=report,rerror=ignore,cache=none \
-+cache=none \
- -device virtio-blk-ccw,scsi=off,devno=fe.0.0002,drive=drive-virtio-disk2,\
--id=virtio-disk2,write-cache=on \
-+id=virtio-disk2,write-cache=on,werror=report,rerror=ignore \
- -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
- resourcecontrol=deny \
- -msg timestamp=on
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu-use-def-instead-of-vm-def-in-qemuExtDevicesStart.patch b/SOURCES/libvirt-qemu-use-def-instead-of-vm-def-in-qemuExtDevicesStart.patch
deleted file mode 100644
index f8cd2ff..0000000
--- a/SOURCES/libvirt-qemu-use-def-instead-of-vm-def-in-qemuExtDevicesStart.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From ea0983a0cca71ba3fdefe94881fe75ee624adf5f Mon Sep 17 00:00:00 2001
-Message-Id: <ea0983a0cca71ba3fdefe94881fe75ee624adf5f@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:30 +0100
-Subject: [PATCH] qemu: use def instead of vm->def in qemuExtDevicesStart
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We have a helper variable to make the code more concise,
-use it consistently.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit e2ca6eb08731255b9b7cf3e938d20f4eae9fb427)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <3876fc88964781aec976d1a92b810aa9cf53c656.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_extdevice.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index 463f76c21a..1869a42f11 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -159,11 +159,11 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
-     int ret = 0;
-     size_t i;
- 
--    if (qemuExtDevicesInitPaths(driver, vm->def) < 0)
-+    if (qemuExtDevicesInitPaths(driver, def) < 0)
-         return -1;
- 
--    for (i = 0; i < vm->def->nvideos; i++) {
--        virDomainVideoDefPtr video = vm->def->videos[i];
-+    for (i = 0; i < def->nvideos; i++) {
-+        virDomainVideoDefPtr video = def->videos[i];
- 
-         if (video->backend == VIR_DOMAIN_VIDEO_BACKEND_TYPE_VHOSTUSER) {
-             ret = qemuExtVhostUserGPUStart(driver, vm, video);
-@@ -172,7 +172,7 @@ qemuExtDevicesStart(virQEMUDriverPtr driver,
-         }
-     }
- 
--    if (vm->def->tpm)
-+    if (def->tpm)
-         ret = qemuExtTPMStart(driver, vm, incomingMigration);
- 
-     for (i = 0; i < def->nnets; i++) {
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-use-the-vhost-user-schemas-to-find-binary.patch b/SOURCES/libvirt-qemu-use-the-vhost-user-schemas-to-find-binary.patch
deleted file mode 100644
index 965141d..0000000
--- a/SOURCES/libvirt-qemu-use-the-vhost-user-schemas-to-find-binary.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From f15a4eb66ecbfb80340bbab65150b22ab3a313fe Mon Sep 17 00:00:00 2001
-Message-Id: <f15a4eb66ecbfb80340bbab65150b22ab3a313fe@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:48 +0100
-Subject: [PATCH] qemu: use the vhost-user schemas to find binary
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Look into /usr/share/qemu/vhost-user to see whether we can find
-a suitable virtiofsd binary, in case the user did not provide one
-in the domain XML.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 071a1ab92fbbd58f68fb4929d004d6155759067e)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <e422c33d2c825f91b90eb10ef1530406a3492e0e.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_extdevice.c  |  9 +++++++++
- src/qemu/qemu_vhost_user.c | 39 ++++++++++++++++++++++++++++++++++++++
- src/qemu/qemu_vhost_user.h |  4 ++++
- src/qemu/qemu_virtiofs.c   | 11 +++++++++++
- src/qemu/qemu_virtiofs.h   |  4 ++++
- 5 files changed, 67 insertions(+)
-
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index f66bafb62f..07b9117f57 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -105,6 +105,15 @@ qemuExtDevicesPrepareDomain(virQEMUDriverPtr driver,
-         }
-     }
- 
-+    for (i = 0; i < vm->def->nfss; i++) {
-+        virDomainFSDefPtr fs = vm->def->fss[i];
-+
-+        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) {
-+            if (qemuVirtioFSPrepareDomain(driver, fs) < 0)
-+                return -1;
-+        }
-+    }
-+
-     return ret;
- }
- 
-diff --git a/src/qemu/qemu_vhost_user.c b/src/qemu/qemu_vhost_user.c
-index 4c25b30664..a3d5ac0fc7 100644
---- a/src/qemu/qemu_vhost_user.c
-+++ b/src/qemu/qemu_vhost_user.c
-@@ -416,3 +416,42 @@ qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
-     VIR_FREE(vus);
-     return ret;
- }
-+
-+
-+int
-+qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
-+                          virDomainFSDefPtr fs)
-+{
-+    qemuVhostUserPtr *vus = NULL;
-+    ssize_t nvus = 0;
-+    ssize_t i;
-+    int ret = -1;
-+
-+    if ((nvus = qemuVhostUserFetchParsedConfigs(driver->privileged,
-+                                                &vus, NULL)) < 0)
-+        goto end;
-+
-+    for (i = 0; i < nvus; i++) {
-+        qemuVhostUserPtr vu = vus[i];
-+
-+        if (vu->type != QEMU_VHOST_USER_TYPE_FS)
-+            continue;
-+
-+        fs->binary = g_strdup(vu->binary);
-+        break;
-+    }
-+
-+    if (i == nvus) {
-+        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
-+                       _("Unable to find a satisfying virtiofsd"));
-+        goto end;
-+    }
-+
-+    ret = 0;
-+
-+ end:
-+    for (i = 0; i < nvus; i++)
-+        qemuVhostUserFree(vus[i]);
-+    g_free(vus);
-+    return ret;
-+}
-diff --git a/src/qemu/qemu_vhost_user.h b/src/qemu/qemu_vhost_user.h
-index 369ba00caa..e505c8a473 100644
---- a/src/qemu/qemu_vhost_user.h
-+++ b/src/qemu/qemu_vhost_user.h
-@@ -45,3 +45,7 @@ qemuVhostUserFetchConfigs(char ***configs,
- int
- qemuVhostUserFillDomainGPU(virQEMUDriverPtr driver,
-                            virDomainVideoDefPtr video);
-+
-+int
-+qemuVhostUserFillDomainFS(virQEMUDriverPtr driver,
-+                          virDomainFSDefPtr fs);
-diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
-index 194855ece8..d579ce1d33 100644
---- a/src/qemu/qemu_virtiofs.c
-+++ b/src/qemu/qemu_virtiofs.c
-@@ -28,6 +28,7 @@
- #include "qemu_conf.h"
- #include "qemu_extdevice.h"
- #include "qemu_security.h"
-+#include "qemu_vhost_user.h"
- #include "qemu_virtiofs.h"
- #include "virpidfile.h"
- #include "virqemu.h"
-@@ -325,3 +326,13 @@ qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
- 
-     return 0;
- }
-+
-+int
-+qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
-+                          virDomainFSDefPtr fs)
-+{
-+    if (fs->binary)
-+        return 0;
-+
-+    return qemuVhostUserFillDomainFS(driver, fs);
-+}
-diff --git a/src/qemu/qemu_virtiofs.h b/src/qemu/qemu_virtiofs.h
-index 1db59917c6..7de4ea6190 100644
---- a/src/qemu/qemu_virtiofs.h
-+++ b/src/qemu/qemu_virtiofs.h
-@@ -40,3 +40,7 @@ int
- qemuVirtioFSSetupCgroup(virDomainObjPtr vm,
-                         virDomainFSDefPtr fs,
-                         virCgroupPtr cgroup);
-+
-+int
-+qemuVirtioFSPrepareDomain(virQEMUDriverPtr driver,
-+                          virDomainFSDefPtr fs);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-validate-virtiofs-filesystems.patch b/SOURCES/libvirt-qemu-validate-virtiofs-filesystems.patch
deleted file mode 100644
index 40be59b..0000000
--- a/SOURCES/libvirt-qemu-validate-virtiofs-filesystems.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 3366d4df5aac258013848cf5df7c95d45693c1e0 Mon Sep 17 00:00:00 2001
-Message-Id: <3366d4df5aac258013848cf5df7c95d45693c1e0@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:44 +0100
-Subject: [PATCH] qemu: validate virtiofs filesystems
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reject unsupported configurations.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
-(cherry picked from commit efaf46811c909ee5333360fba1d75ae82352964a)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <1fcb6b7d58c3791799c5d436edaa2faa07e92305.1583322091.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_domain.c | 82 +++++++++++++++++++++++++++++++++++++++---
- 1 file changed, 77 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 402b079b09..79d8de2e42 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -8329,11 +8329,52 @@ qemuDomainDeviceDefValidateIOMMU(const virDomainIOMMUDef *iommu,
-     return 0;
- }
- 
-+static int
-+qemuDomainDefValidateVirtioFSSharedMemory(const virDomainDef *def)
-+{
-+    size_t numa_nodes = virDomainNumaGetNodeCount(def->numa);
-+    size_t i;
-+
-+    if (numa_nodes == 0) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("virtiofs requires one or more NUMA nodes"));
-+        return -1;
-+    }
-+
-+    for (i = 0; i < numa_nodes; i++) {
-+        virDomainMemoryAccess node_access =
-+            virDomainNumaGetNodeMemoryAccessMode(def->numa, i);
-+
-+        switch (node_access) {
-+        case VIR_DOMAIN_MEMORY_ACCESS_DEFAULT:
-+            if (def->mem.access != VIR_DOMAIN_MEMORY_ACCESS_SHARED) {
-+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                               _("virtiofs requires shared memory"));
-+                return -1;
-+            }
-+            break;
-+        case VIR_DOMAIN_MEMORY_ACCESS_SHARED:
-+            break;
-+        case VIR_DOMAIN_MEMORY_ACCESS_PRIVATE:
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs requires shared memory"));
-+            return -1;
-+
-+        case VIR_DOMAIN_MEMORY_ACCESS_LAST:
-+        default:
-+            virReportEnumRangeError(virDomainMemoryAccess, node_access);
-+            return -1;
-+
-+        }
-+    }
-+    return 0;
-+}
- 
- static int
- qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
--                              const virDomainDef *def G_GNUC_UNUSED,
--                              virQEMUCapsPtr qemuCaps G_GNUC_UNUSED)
-+                              const virDomainDef *def,
-+                              virQEMUDriverPtr driver,
-+                              virQEMUCapsPtr qemuCaps)
- {
-     if (fs->type != VIR_DOMAIN_FS_TYPE_MOUNT) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-@@ -8362,8 +8403,39 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
-         return -1;
- 
-     case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
--        /* TODO: vhost-user-fs-pci */
--        return 0;
-+        if (!virQEMUDriverIsPrivileged(driver)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs is not yet supported in session mode"));
-+            return -1;
-+        }
-+        if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs only supports passthrough accessmode"));
-+            return -1;
-+        }
-+        if (fs->wrpolicy != VIR_DOMAIN_FS_WRPOLICY_DEFAULT) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs does not support wrpolicy"));
-+            return -1;
-+        }
-+        if (fs->model != VIR_DOMAIN_FS_MODEL_DEFAULT) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs does not support model"));
-+            return -1;
-+        }
-+        if (fs->format != VIR_STORAGE_FILE_NONE) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs does not support format"));
-+            return -1;
-+        }
-+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VHOST_USER_FS)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("virtiofs is not supported with this QEMU binary"));
-+            return -1;
-+        }
-+        if (qemuDomainDefValidateVirtioFSSharedMemory(def) < 0)
-+            return -1;
-+        break;
- 
-     case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
-     default:
-@@ -8542,7 +8614,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
-         break;
- 
-     case VIR_DOMAIN_DEVICE_FS:
--        ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, qemuCaps);
-+        ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, driver, qemuCaps);
-         break;
- 
-     case VIR_DOMAIN_DEVICE_NVRAM:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemu-virtiofs-shorten-pid-filename.patch b/SOURCES/libvirt-qemu-virtiofs-shorten-pid-filename.patch
deleted file mode 100644
index 357d4f9..0000000
--- a/SOURCES/libvirt-qemu-virtiofs-shorten-pid-filename.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From aa95c0fea0aa938873717ccb91319b2c3e48d000 Mon Sep 17 00:00:00 2001
-Message-Id: <aa95c0fea0aa938873717ccb91319b2c3e48d000@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 24 Mar 2020 11:30:17 +0100
-Subject: [PATCH] qemu: virtiofs: shorten pid filename
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There is no need to repeat the shortName, since it's
-already present in the directory path.
-
-Also use just 'fs' instead of 'virtiofsd'.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1816577
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Suggested-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 7055af6c2253666cd0b7c4c459c5a019da789140)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <619956878ec3e09fe6481c7e25b2820753aa57e5.1585045801.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_virtiofs.c | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
-index d579ce1d33..b47e19a562 100644
---- a/src/qemu/qemu_virtiofs.c
-+++ b/src/qemu/qemu_virtiofs.c
-@@ -42,13 +42,9 @@ qemuVirtioFSCreatePidFilename(virDomainObjPtr vm,
-                               const char *alias)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
--    g_autofree char *shortName = NULL;
-     g_autofree char *name = NULL;
- 
--    if (!(shortName = virDomainDefGetShortName(vm->def)))
--        return NULL;
--
--    name = g_strdup_printf("%s-%s-virtiofsd", shortName, alias);
-+    name = g_strdup_printf("%s-fs", alias);
- 
-     return virPidFileBuildPath(priv->libDir, name);
- }
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemu-virtiofs-shorten-socket-filename.patch b/SOURCES/libvirt-qemu-virtiofs-shorten-socket-filename.patch
deleted file mode 100644
index 66e1e52..0000000
--- a/SOURCES/libvirt-qemu-virtiofs-shorten-socket-filename.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 33bca0809e436c0040aa17d546c2145e5432b023 Mon Sep 17 00:00:00 2001
-Message-Id: <33bca0809e436c0040aa17d546c2145e5432b023@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 24 Mar 2020 11:30:18 +0100
-Subject: [PATCH] qemu: virtiofs: shorten socket filename
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use just 'fs' instead of 'virtiofsd'.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1816577
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 223b370aaa6fcbcbfbd4045fde4ae67e047180ad)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <ecf76c8829f804dcdb83eeb90f236316a240795e.1585045801.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_virtiofs.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
-index b47e19a562..d9ace4aafe 100644
---- a/src/qemu/qemu_virtiofs.c
-+++ b/src/qemu/qemu_virtiofs.c
-@@ -56,7 +56,7 @@ qemuVirtioFSCreateSocketFilename(virDomainObjPtr vm,
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
- 
--    return virFileBuildPath(priv->libDir, alias, "-virtiofsd.sock");
-+    return virFileBuildPath(priv->libDir, alias, "-fs.sock");
- }
- 
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuAgentFSInfoFormatParams-Remove-pointless-returned-value.patch b/SOURCES/libvirt-qemuAgentFSInfoFormatParams-Remove-pointless-returned-value.patch
deleted file mode 100644
index d811826..0000000
--- a/SOURCES/libvirt-qemuAgentFSInfoFormatParams-Remove-pointless-returned-value.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From d5bc155a97d1938e0e19f6040ae76cdd0a92ed62 Mon Sep 17 00:00:00 2001
-Message-Id: <d5bc155a97d1938e0e19f6040ae76cdd0a92ed62@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:34 +0100
-Subject: [PATCH] qemuAgentFSInfoFormatParams: Remove pointless returned value
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The only caller doesn't check the value and also there are no real
-errors to report anyways.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit da1b1932271ee135537b2809e87dc621748d4630)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1812965
-Message-Id: <04feacc921ce5c6f0333a4c4af7ccef8b22db6a1.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 31 ++++++++++++-------------------
- 1 file changed, 12 insertions(+), 19 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 26f100177b..8c7e90531a 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -22996,24 +22996,20 @@ qemuDomainGetGuestInfoCheckSupport(unsigned int *types)
-     *types = *types & supportedGuestInfoTypes;
- }
- 
--/* Returns: 0 on success
-- *          -1 otherwise
-- */
--static int
-+static void
- qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo,
-                             int nfs,
-                             virDomainDefPtr vmdef,
-                             virTypedParameterPtr *params,
-                             int *nparams, int *maxparams)
- {
--    int ret = -1;
-     size_t i, j;
- 
-     /* FIXME: get disk target */
- 
-     if (virTypedParamsAddUInt(params, nparams, maxparams,
-                               "fs.count", nfs) < 0)
--        goto cleanup;
-+        return;
- 
-     for (i = 0; i < nfs; i++) {
-         char param_name[VIR_TYPED_PARAM_FIELD_LENGTH];
-@@ -23021,17 +23017,17 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo,
-                    "fs.%zu.name", i);
-         if (virTypedParamsAddString(params, nparams, maxparams,
-                                     param_name, fsinfo[i]->name) < 0)
--            goto cleanup;
-+            return;
-         g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-                    "fs.%zu.mountpoint", i);
-         if (virTypedParamsAddString(params, nparams, maxparams,
-                                     param_name, fsinfo[i]->mountpoint) < 0)
--            goto cleanup;
-+            return;
-         g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-                    "fs.%zu.fstype", i);
-         if (virTypedParamsAddString(params, nparams, maxparams,
-                                     param_name, fsinfo[i]->fstype) < 0)
--            goto cleanup;
-+            return;
- 
-         /* disk usage values are not returned by older guest agents, so
-          * only add the params if the value is set */
-@@ -23040,20 +23036,20 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo,
-         if (fsinfo[i]->total_bytes != -1 &&
-             virTypedParamsAddULLong(params, nparams, maxparams,
-                                     param_name, fsinfo[i]->total_bytes) < 0)
--            goto cleanup;
-+            return;
- 
-         g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-                    "fs.%zu.used-bytes", i);
-         if (fsinfo[i]->used_bytes != -1 &&
-             virTypedParamsAddULLong(params, nparams, maxparams,
-                                     param_name, fsinfo[i]->used_bytes) < 0)
--            goto cleanup;
-+            return;
- 
-         g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-                    "fs.%zu.disk.count", i);
-         if (virTypedParamsAddUInt(params, nparams, maxparams,
-                                   param_name, fsinfo[i]->ndisks) < 0)
--            goto cleanup;
-+            return;
-         for (j = 0; j < fsinfo[i]->ndisks; j++) {
-             virDomainDiskDefPtr diskdef = NULL;
-             qemuAgentDiskInfoPtr d = fsinfo[i]->disks[j];
-@@ -23069,7 +23065,7 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo,
-                 if (diskdef->dst &&
-                     virTypedParamsAddString(params, nparams, maxparams,
-                                             param_name, diskdef->dst) < 0)
--                    goto cleanup;
-+                    return;
-             }
- 
-             g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-@@ -23077,22 +23073,19 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo,
-             if (d->serial &&
-                 virTypedParamsAddString(params, nparams, maxparams,
-                                         param_name, d->serial) < 0)
--                goto cleanup;
-+                return;
- 
-             g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH,
-                        "fs.%zu.disk.%zu.device", i, j);
-             if (d->devnode &&
-                 virTypedParamsAddString(params, nparams, maxparams,
-                                         param_name, d->devnode) < 0)
--                goto cleanup;
-+                return;
-         }
-     }
--    ret = nfs;
--
-- cleanup:
--    return ret;
- }
- 
-+
- static int
- qemuDomainGetGuestInfo(virDomainPtr dom,
-                        unsigned int types,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuBackupBegin-Don-t-leak-def-on-early-failures.patch b/SOURCES/libvirt-qemuBackupBegin-Don-t-leak-def-on-early-failures.patch
deleted file mode 100644
index 4009b29..0000000
--- a/SOURCES/libvirt-qemuBackupBegin-Don-t-leak-def-on-early-failures.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 148ee94fdde4b4b6a78ff2a734a2bc9105a81166 Mon Sep 17 00:00:00 2001
-Message-Id: <148ee94fdde4b4b6a78ff2a734a2bc9105a81166@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:07 +0200
-Subject: [PATCH] qemuBackupBegin: Don't leak 'def' on early failures
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The cleanup path expects that 'def' is assigned to 'priv->backup', but
-that's not the case for early failures. Add a check to stop overwriting
-of 'def' so that it can be freed.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b5212365b640fceb7116dca30518b42bf6ab42df)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <18f55f981e9a6eba7266424fb0f244a2c7102508.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 67d646f477..c207d3b7d0 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -803,7 +803,7 @@ qemuBackupBegin(virDomainObjPtr vm,
-         ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
-     }
- 
--    if (ret < 0 && !job_started)
-+    if (ret < 0 && !job_started && priv->backup)
-         def = g_steal_pointer(&priv->backup);
- 
-     if (ret == 0)
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuBackupBegin-Fix-monitor-access-when-rolling-back-due-to-failure.patch b/SOURCES/libvirt-qemuBackupBegin-Fix-monitor-access-when-rolling-back-due-to-failure.patch
deleted file mode 100644
index 8be9606..0000000
--- a/SOURCES/libvirt-qemuBackupBegin-Fix-monitor-access-when-rolling-back-due-to-failure.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 54b47c1f5bf860e2fadeb17a954a109aafd62067 Mon Sep 17 00:00:00 2001
-Message-Id: <54b47c1f5bf860e2fadeb17a954a109aafd62067@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Thu, 26 Mar 2020 18:25:12 +0100
-Subject: [PATCH] qemuBackupBegin: Fix monitor access when rolling back due to
- failure
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The code attempting to clean up after a failed pull mode backup job
-wrongly entered monitor but didn't clean up nor exit monitor due to a
-logic bug. Fix the condition.
-
-Introduced in a1521f84a53
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1817327
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit e060b0624d1b78438b759cc5a25da87b28c9736c)
-Message-Id: <95ad49e5316e5f9dd992e463bc7536e3046140d4.1585243469.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 8b66ee8d1f..9a056fa407 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -894,7 +894,7 @@ qemuBackupBegin(virDomainObjPtr vm,
-     qemuCheckpointRollbackMetadata(vm, chk);
- 
-     if (!job_started && nbd_running &&
--        qemuDomainObjEnterMonitorAsync(priv->driver, vm, QEMU_ASYNC_JOB_BACKUP) < 0) {
-+        qemuDomainObjEnterMonitorAsync(priv->driver, vm, QEMU_ASYNC_JOB_BACKUP) == 0) {
-         ignore_value(qemuMonitorNBDServerStop(priv->mon));
-         ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
-     }
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuBackupDiskDataCleanupOne-Don-t-exit-early-when-the-job-has-started.patch b/SOURCES/libvirt-qemuBackupDiskDataCleanupOne-Don-t-exit-early-when-the-job-has-started.patch
deleted file mode 100644
index 82d17ab..0000000
--- a/SOURCES/libvirt-qemuBackupDiskDataCleanupOne-Don-t-exit-early-when-the-job-has-started.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 9dee5f450fba6b084aaef5a46b112942e6efd913 Mon Sep 17 00:00:00 2001
-Message-Id: <9dee5f450fba6b084aaef5a46b112942e6efd913@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:10 +0200
-Subject: [PATCH] qemuBackupDiskDataCleanupOne: Don't exit early when the job
- has started
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Originally the function was cleaning up a failed job only but now
-there's other stuff that needs to be cleared too.
-
-Make only steps which clean up after a failed job depend on the
-'started' field and execute the rest of the code always.
-
-This fixes a leak of the backup job tracking object and the blockdev-add
-helper data.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 165b430eb9a1213ef32f14ace14d8377e9e71446)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <2cd881ed2059b64293b32b42fbe942cc2e147f81.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 25 ++++++++++++-------------
- 1 file changed, 12 insertions(+), 13 deletions(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index fdc75d3160..c68227f029 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -124,26 +124,25 @@ qemuBackupDiskDataCleanupOne(virDomainObjPtr vm,
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
- 
--    if (dd->started)
--        return;
-+    if (!dd->started) {
-+        if (dd->added) {
-+            qemuDomainObjEnterMonitor(priv->driver, vm);
-+            qemuBlockStorageSourceAttachRollback(priv->mon, dd->crdata->srcdata[0]);
-+            ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
-+        }
- 
--    if (dd->added) {
--        qemuDomainObjEnterMonitor(priv->driver, vm);
--        qemuBlockStorageSourceAttachRollback(priv->mon, dd->crdata->srcdata[0]);
--        ignore_value(qemuDomainObjExitMonitor(priv->driver, vm));
--    }
-+        if (dd->created) {
-+            if (virStorageFileUnlink(dd->store) < 0)
-+                VIR_WARN("Unable to remove just-created %s", NULLSTR(dd->store->path));
-+        }
- 
--    if (dd->created) {
--        if (virStorageFileUnlink(dd->store) < 0)
--            VIR_WARN("Unable to remove just-created %s", NULLSTR(dd->store->path));
-+        if (dd->labelled)
-+            qemuDomainStorageSourceAccessRevoke(priv->driver, vm, dd->store);
-     }
- 
-     if (dd->initialized)
-         virStorageFileDeinit(dd->store);
- 
--    if (dd->labelled)
--        qemuDomainStorageSourceAccessRevoke(priv->driver, vm, dd->store);
--
-     if (dd->blockjob)
-         qemuBlockJobStartupFinalize(vm, dd->blockjob);
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuBackupDiskDataCleanupOne-Free-incrementalBitmap.patch b/SOURCES/libvirt-qemuBackupDiskDataCleanupOne-Free-incrementalBitmap.patch
deleted file mode 100644
index 3af93a2..0000000
--- a/SOURCES/libvirt-qemuBackupDiskDataCleanupOne-Free-incrementalBitmap.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From bae38a946b063c4c384ddfb22a0c04137c51d31c Mon Sep 17 00:00:00 2001
-Message-Id: <bae38a946b063c4c384ddfb22a0c04137c51d31c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:11 +0200
-Subject: [PATCH] qemuBackupDiskDataCleanupOne: Free 'incrementalBitmap'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The bitmap name used for the incremental backup would be leaked
-otherwise.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit d55b0811ff9968eafa8d9ed394a365659fa6e0c5)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <fa62b553a1eff375ff1491a51a7db0918c5b89c3.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index c68227f029..5c403f8f35 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -148,6 +148,7 @@ qemuBackupDiskDataCleanupOne(virDomainObjPtr vm,
- 
-     qemuBlockStorageSourceChainDataFree(dd->crdata);
-     virObjectUnref(dd->terminator);
-+    g_free(dd->incrementalBitmap);
- }
- 
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuBackupDiskStarted-Fix-improper-dereference-of-array.patch b/SOURCES/libvirt-qemuBackupDiskStarted-Fix-improper-dereference-of-array.patch
deleted file mode 100644
index 514572f..0000000
--- a/SOURCES/libvirt-qemuBackupDiskStarted-Fix-improper-dereference-of-array.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 9bec4051732e43d24808893643826268ab88b8cc Mon Sep 17 00:00:00 2001
-Message-Id: <9bec4051732e43d24808893643826268ab88b8cc@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:09 +0200
-Subject: [PATCH] qemuBackupDiskStarted: Fix improper dereference of array
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The code would repeatedly mark the first disk's blockjob as started
-rather than accessing all the blockjobs. Fix the dereferencing operator.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 214faa0b04ace42aebfa40e1d19aabbf3003f0fe)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <1d33c3080e24baf96a0d9435d1588b4a48a98425.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_backup.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 013a82e06d..fdc75d3160 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -479,7 +479,7 @@ qemuBackupDiskStarted(virDomainObjPtr vm,
-     for (i = 0; i < ndd; i++) {
-         dd[i].started = true;
-         dd[i].backupdisk->state = VIR_DOMAIN_BACKUP_DISK_STATE_RUNNING;
--        qemuBlockJobStarted(dd->blockjob, vm);
-+        qemuBlockJobStarted(dd[i].blockjob, vm);
-     }
- }
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuBlockBitmapChainIsValid-Adjust-to-new-semantics-of-bitmaps.patch b/SOURCES/libvirt-qemuBlockBitmapChainIsValid-Adjust-to-new-semantics-of-bitmaps.patch
deleted file mode 100644
index 2f3ba23..0000000
--- a/SOURCES/libvirt-qemuBlockBitmapChainIsValid-Adjust-to-new-semantics-of-bitmaps.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From 4fcacae366ef35c336a6b9b0ff35cdf0a3c80760 Mon Sep 17 00:00:00 2001
-Message-Id: <4fcacae366ef35c336a6b9b0ff35cdf0a3c80760@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:50 +0200
-Subject: [PATCH] qemuBlockBitmapChainIsValid: Adjust to new semantics of
- bitmaps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reject duplicates and other problematic bitmaps according to the new
-semantics of bitmap use in libvirt.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 3857b073cb3a44c6a54e040f395ed58531f16634)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <a35c63c398ab7fa25758567ec73228c97ba1fe6f.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 38 +++++++++++++++++++++++---------------
- 1 file changed, 23 insertions(+), 15 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index a44774c237..38c8269721 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2835,41 +2835,49 @@ qemuBlockGetNamedNodeData(virDomainObjPtr vm,
- /**
-  * qemuBlockBitmapChainIsValid:
-  *
-- * Validates that the backing chain of @src contains proper consistent bitmap
-- * data for a chain of bitmaps named @bitmapname.
-+ * Validates that the backing chain of @src contains bitmaps which libvirt will
-+ * consider as properly corresponding to a checkpoint named @bitmapname.
-  *
-- * A valid chain:
-- * 1) bitmaps of same name are in a consecutive subset of images without gap
-- * 2) don't have any inconsistent bitmaps
-+ * The bitmaps need to:
-+ * 1) start from the top image @src
-+ * 2) must be present in consecutive layers
-+ * 3) all must be active, persistent and not inconsistent
-  */
- bool
- qemuBlockBitmapChainIsValid(virStorageSourcePtr src,
-                             const char *bitmapname,
-                             virHashTablePtr blockNamedNodeData)
- {
--    qemuBlockNamedNodeDataBitmapPtr bitmap;
-     virStorageSourcePtr n;
--    bool chain_started = false;
-+    bool found = false;
-     bool chain_ended = false;
- 
--    for (n = src; n; n = n->backingStore) {
--        if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData, n, bitmapname))) {
--            if (chain_started)
--                chain_ended = true;
-+    for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
-+        qemuBlockNamedNodeDataBitmapPtr bitmap;
-+
-+        if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-+                                                             n, bitmapname))) {
-+            /* rule 1, must start from top */
-+            if (!found)
-+                return false;
-+
-+            chain_ended = true;
- 
-             continue;
-         }
- 
-+        /* rule 2, no-gaps */
-         if (chain_ended)
-             return false;
- 
--        chain_started = true;
--
--        if (bitmap->inconsistent)
-+        /* rule 3 */
-+        if (bitmap->inconsistent || !bitmap->persistent || !bitmap->recording)
-             return false;
-+
-+        found = true;
-     }
- 
--    return chain_started;
-+    return found;
- }
- 
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuBlockBitmapsHandleCommitFinish-Use-proper-variable-to-iterate.patch b/SOURCES/libvirt-qemuBlockBitmapsHandleCommitFinish-Use-proper-variable-to-iterate.patch
deleted file mode 100644
index 7b828d8..0000000
--- a/SOURCES/libvirt-qemuBlockBitmapsHandleCommitFinish-Use-proper-variable-to-iterate.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 60d5a8463c380b005f16698bca7b38c11b122e03 Mon Sep 17 00:00:00 2001
-Message-Id: <60d5a8463c380b005f16698bca7b38c11b122e03@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 17 Mar 2020 17:12:45 +0100
-Subject: [PATCH] qemuBlockBitmapsHandleCommitFinish: Use proper variable to
- iterate
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function repeatedly checked the first element rather than iterating
-through the array.
-
-Reported-by: Daniel P. Berrangé <berrange@redhat.com>
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Tested-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 7a16318855811ac4ae55d30b77969528099fd180)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <25addb80a3899e5789c32aecab8184066e80cbd0.1584461519.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index dad3e2317f..73cb5ba4bc 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3175,7 +3175,7 @@ qemuBlockBitmapsHandleCommitFinish(virStorageSourcePtr topsrc,
-                     char **disabledbitmaps;
- 
-                     for (disabledbitmaps = disabledBitmapsBase; *disabledbitmaps; disabledbitmaps++) {
--                        if (STREQ(*disabledBitmapsBase, bitmap->name)) {
-+                        if (STREQ(*disabledbitmaps, bitmap->name)) {
-                             bitmapdata = g_new0(struct qemuBlockBitmapsHandleCommitData, 1);
- 
-                             bitmapdata->create = false;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuBlockBitmapsHandleCommitStart-Fix-allocation-of-string-list.patch b/SOURCES/libvirt-qemuBlockBitmapsHandleCommitStart-Fix-allocation-of-string-list.patch
deleted file mode 100644
index 67416a9..0000000
--- a/SOURCES/libvirt-qemuBlockBitmapsHandleCommitStart-Fix-allocation-of-string-list.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 83452775d46c10e2a33c2727f6c5e1d6e22ebdfe Mon Sep 17 00:00:00 2001
-Message-Id: <83452775d46c10e2a33c2727f6c5e1d6e22ebdfe@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 17 Mar 2020 17:12:44 +0100
-Subject: [PATCH] qemuBlockBitmapsHandleCommitStart: Fix allocation of string
- list
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allocate space also for the terminating NULL.
-
-Reported-by: Daniel P. Berrangé <berrange@redhat.com>
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Tested-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 061057e75461814e36aad1e78e96363d373ac34b)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <562a7faef6100c757b5556592093382b016755bb.1584461519.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 099ceeb802..dad3e2317f 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3019,7 +3019,7 @@ qemuBlockBitmapsHandleCommitStart(virStorageSourcePtr topsrc,
-     if (!(entry = virHashLookup(blockNamedNodeData, basesrc->nodeformat)))
-         return 0;
- 
--    bitmaplist = g_new0(char *, entry->nbitmaps);
-+    bitmaplist = g_new0(char *, entry->nbitmaps + 1);
- 
-     for (i = 0; i < entry->nbitmaps; i++) {
-         qemuBlockNamedNodeDataBitmapPtr bitmap = entry->bitmaps[i];
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Add-extra-wrapping-object-to-JSON-strings.patch b/SOURCES/libvirt-qemuBlockGetBackingStoreString-Add-extra-wrapping-object-to-JSON-strings.patch
deleted file mode 100644
index 5d00325..0000000
--- a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Add-extra-wrapping-object-to-JSON-strings.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From d4877aae453a0ed1104dfd8aa12806a110f08b07 Mon Sep 17 00:00:00 2001
-Message-Id: <d4877aae453a0ed1104dfd8aa12806a110f08b07@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:05 +0100
-Subject: [PATCH] qemuBlockGetBackingStoreString: Add extra wrapping object to
- JSON strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-QEMU requires an extra wrapper object where only the "file" member is
-populated. This is basically a placeholder for establishing the format
-layer. We did the same in qemuDiskSourceGetProps for the old-school
-JSON usage with -drive but forgot to adopt this for -blockdev.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 7ba2208addf1cad4d6c06d3c172cca93f84ead11)
-Message-Id: <9a56b9f7e03d41bf99399b14f399bc9007ed1a4e.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                                          | 2 +-
- .../imagecreate/qcow2-backing-qcow2-slice.json                 | 2 +-
- .../qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json | 2 +-
- .../network-qcow2-backing-chain-cache-unsafe-srconly.json      | 3 ++-
- .../network-qcow2-backing-chain-encryption_auth-srconly.json   | 3 ++-
- tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json  | 3 ++-
- 6 files changed, 9 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 5a7364576a..73a424f7a8 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2091,7 +2091,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-     if (!(backingJSON = virJSONValueToString(props, pretty)))
-         return NULL;
- 
--    return g_strdup_printf("json:%s", backingJSON);
-+    return g_strdup_printf("json:{\"file\":%s}", backingJSON);
- }
- 
- 
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json
-index 2fa27c1933..2526740b9a 100644
---- a/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json
-@@ -10,6 +10,6 @@ format:
-   "driver": "qcow2",
-   "file": "0123456789ABCDEF0123456789ABCDE",
-   "size": 8589934590,
--  "backing-file": "json:{\"driver\":\"raw\",\"offset\":1234,\"size\":5768,\"file\":{\"driver\":\"file\",\"filename\":\"/var/lib/libvirt/images/i.qcow2\"}}",
-+  "backing-file": "json:{\"file\":{\"driver\":\"raw\",\"offset\":1234,\"size\":5768,\"file\":{\"driver\":\"file\",\"filename\":\"/var/lib/libvirt/images/i.qcow2\"}}}",
-   "backing-fmt": "qcow2"
- }
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json
-index 761002afd9..e76221da16 100644
---- a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json
-@@ -10,6 +10,6 @@ format:
-   "driver": "qcow2",
-   "file": "0123456789ABCDEF0123456789ABCDE",
-   "size": 8589934590,
--  "backing-file": "json:{\"driver\":\"raw\",\"offset\":9876,\"size\":54321,\"file\":{\"driver\":\"file\",\"filename\":\"/var/lib/libvirt/images/i.img\"}}",
-+  "backing-file": "json:{\"file\":{\"driver\":\"raw\",\"offset\":9876,\"size\":54321,\"file\":{\"driver\":\"file\",\"filename\":\"/var/lib/libvirt/images/i.img\"}}}",
-   "backing-fmt": "raw"
- }
-diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
-index 2d7eeb3bca..0fb0b8eff9 100644
---- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
-@@ -16,7 +16,7 @@
-     ]
-   }
-   backing store string:
--  json:{
-+  json:{"file":{
-     "driver": "rbd",
-     "pool": "rbdpool",
-     "image": "rbdimg",
-@@ -31,6 +31,7 @@
-       }
-     ]
-   }
-+  }
- )
- (
-   source only properties:
-diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
-index 5679318fbe..777a372471 100644
---- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
-@@ -16,7 +16,7 @@
-     ]
-   }
-   backing store string:
--  json:{
-+  json:{"file":{
-     "driver": "rbd",
-     "pool": "rbdpool",
-     "image": "rbdimg",
-@@ -31,6 +31,7 @@
-       }
-     ]
-   }
-+  }
- )
- (
-   source only properties:
-diff --git a/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json b/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-index 970e1bb8af..26f9557c80 100644
---- a/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-@@ -6,9 +6,10 @@
-     "namespace": 1
-   }
-   backing store string:
--  json:{
-+  json:{"file":{
-     "driver": "nvme",
-     "device": "0000:01:00.0",
-     "namespace": 1
-   }
-+  }
- )
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Add-pretty-argument.patch b/SOURCES/libvirt-qemuBlockGetBackingStoreString-Add-pretty-argument.patch
deleted file mode 100644
index 8ac3fe8..0000000
--- a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Add-pretty-argument.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From 47842f81b667134e873f4380dfb432ca86a1e50d Mon Sep 17 00:00:00 2001
-Message-Id: <47842f81b667134e873f4380dfb432ca86a1e50d@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:00 +0100
-Subject: [PATCH] qemuBlockGetBackingStoreString: Add 'pretty' argument
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add support for pretty-printing of the JSON variant of the output for
-consumption in tests. All current callers pass 'false'.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit a83c1dc70e724b9313436c63f57ea24023fd7076)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <9b133a1d7bf6304e0dc9017222bdc09640c11518.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c  | 8 +++++---
- src/qemu/qemu_block.h  | 3 ++-
- src/qemu/qemu_driver.c | 4 ++--
- 3 files changed, 9 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 5697d4fc73..279b4a38b8 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2014,13 +2014,15 @@ qemuBlockStorageGetCopyOnReadProps(virDomainDiskDefPtr disk)
- /**
-  * qemuBlockGetBackingStoreString:
-  * @src: storage source to get the string for
-+ * @pretty: pretty-print the JSON (if applicable, used by tests)
-  *
-  * Formats a string used in the backing store field of a disk image which
-  * supports backing store. Non-local storage may result in use of the json:
-  * pseudo protocol for any complex configuration.
-  */
- char *
--qemuBlockGetBackingStoreString(virStorageSourcePtr src)
-+qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-+                               bool pretty)
- {
-     int actualType = virStorageSourceGetActualType(src);
-     g_autoptr(virJSONValue) backingProps = NULL;
-@@ -2087,7 +2089,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src)
-         props = sliceProps;
-     }
- 
--    if (!(backingJSON = virJSONValueToString(props, false)))
-+    if (!(backingJSON = virJSONValueToString(props, pretty)))
-         return NULL;
- 
-     ret = g_strdup_printf("json:%s", backingJSON);
-@@ -2115,7 +2117,7 @@ qemuBlockStorageSourceCreateAddBacking(virStorageSourcePtr backing,
-             backingFormatStr = virStorageFileFormatTypeToString(backing->format);
-     }
- 
--    if (!(backingFileStr = qemuBlockGetBackingStoreString(backing)))
-+    if (!(backingFileStr = qemuBlockGetBackingStoreString(backing, false)))
-         return -1;
- 
-     if (virJSONValueObjectAdd(props,
-diff --git a/src/qemu/qemu_block.h b/src/qemu/qemu_block.h
-index 75b25bfea5..506957c3d5 100644
---- a/src/qemu/qemu_block.h
-+++ b/src/qemu/qemu_block.h
-@@ -178,7 +178,8 @@ qemuBlockSnapshotAddBlockdev(virJSONValuePtr actions,
-                              virStorageSourcePtr newsrc);
- 
- char *
--qemuBlockGetBackingStoreString(virStorageSourcePtr src)
-+qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-+                               bool pretty)
-     ATTRIBUTE_NONNULL(1);
- 
- int
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 175a1961c2..3c3c7b6041 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17773,7 +17773,7 @@ qemuDomainBlockPullCommon(virDomainObjPtr vm,
-         if (baseSource) {
-             nodebase = baseSource->nodeformat;
-             if (!backingPath &&
--                !(backingPath = qemuBlockGetBackingStoreString(baseSource)))
-+                !(backingPath = qemuBlockGetBackingStoreString(baseSource, false)))
-                 goto endjob;
-         }
-         device = disk->src->nodeformat;
-@@ -18941,7 +18941,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
-         nodebase = baseSource->nodeformat;
-         device = qemuDomainDiskGetTopNodename(disk);
-         if (!backingPath && top_parent &&
--            !(backingPath = qemuBlockGetBackingStoreString(baseSource)))
-+            !(backingPath = qemuBlockGetBackingStoreString(baseSource, false)))
-             goto endjob;
- 
-         if (bitmapDisableActions) {
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Properly-handle-http-s-with-cookies-and-others.patch b/SOURCES/libvirt-qemuBlockGetBackingStoreString-Properly-handle-http-s-with-cookies-and-others.patch
deleted file mode 100644
index 0cbae72..0000000
--- a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Properly-handle-http-s-with-cookies-and-others.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-From 282f6724e64787451e69dd0f261c7239fa0e79ac Mon Sep 17 00:00:00 2001
-Message-Id: <282f6724e64787451e69dd0f261c7239fa0e79ac@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:07 +0100
-Subject: [PATCH] qemuBlockGetBackingStoreString: Properly handle 'http/s' with
- cookies and others
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Format cookies into the backing store string without encryption as they
-will not be visible on the command line when formatting a 'target' only
-string. In cases when cookies or other options are used we must use the
-JSON format rather than pure URI.
-
-Add tests to validate the scenario.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 3b06103e695829c4720baaee8286f20568133ebd)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <aea5c926b86d5dad7dc78f30f2f0e8d95807e58e.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                         | 12 ++++++++++-
- tests/qemublocktest.c                         |  2 ++
- .../network-http-curlopts-srconly.json        | 17 ++++++++++++++++
- .../xml2json/network-http-curlopts.json       | 15 ++++++++++++++
- .../xml2json/network-http-curlopts.xml        | 20 +++++++++++++++++++
- .../xml2json/network-http-noopts-srconly.json |  9 +++++++++
- .../xml2json/network-http-noopts.json         | 14 +++++++++++++
- .../xml2json/network-http-noopts.xml          | 15 ++++++++++++++
- 8 files changed, 103 insertions(+), 1 deletion(-)
- create mode 100644 tests/qemublocktestdata/xml2json/network-http-curlopts-srconly.json
- create mode 100644 tests/qemublocktestdata/xml2json/network-http-curlopts.json
- create mode 100644 tests/qemublocktestdata/xml2json/network-http-curlopts.xml
- create mode 100644 tests/qemublocktestdata/xml2json/network-http-noopts-srconly.json
- create mode 100644 tests/qemublocktestdata/xml2json/network-http-noopts.json
- create mode 100644 tests/qemublocktestdata/xml2json/network-http-noopts.xml
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 1f48f559e3..ba7318b074 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -685,6 +685,7 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-     virJSONValuePtr ret = NULL;
-     g_autoptr(virURI) uri = NULL;
-     g_autofree char *uristr = NULL;
-+    g_autofree char *cookiestr = NULL;
- 
-     /**
-      * Common options:
-@@ -714,6 +715,9 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-         if (srcPriv &&
-             srcPriv->httpcookie)
-             cookiealias = srcPriv->httpcookie->s.aes.alias;
-+    } else {
-+        /* format target string along with cookies */
-+        cookiestr = qemuBlockStorageSourceGetCookieString(src);
-     }
- 
-     ignore_value(virJSONValueObjectCreate(&ret,
-@@ -721,6 +725,7 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src,
-                                           "S:username", username,
-                                           "S:password-secret", passwordalias,
-                                           "T:sslverify", src->sslverify,
-+                                          "S:cookie", cookiestr,
-                                           "S:cookie-secret", cookiealias,
-                                           "P:timeout", src->timeout,
-                                           "P:readahead", src->readahead,
-@@ -2043,7 +2048,12 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-         /* generate simplified URIs for the easy cases */
-         if (actualType == VIR_STORAGE_TYPE_NETWORK &&
-             src->nhosts == 1 &&
--            src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
-+            src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP &&
-+            src->timeout == 0 &&
-+            src->ncookies == 0 &&
-+            src->sslverify == VIR_TRISTATE_BOOL_ABSENT &&
-+            src->timeout == 0 &&
-+            src->readahead == 0) {
- 
-             switch ((virStorageNetProtocol) src->protocol) {
-             case VIR_STORAGE_NET_PROTOCOL_NBD:
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index cf56c8a983..8b7a50712d 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1212,6 +1212,8 @@ mymain(void)
-     TEST_DISK_TO_JSON("network-qcow2-backing-chain-cache-unsafe");
-     TEST_DISK_TO_JSON("dir-fat-cache");
-     TEST_DISK_TO_JSON("network-nbd-tls");
-+    TEST_DISK_TO_JSON("network-http-noopts");
-+    TEST_DISK_TO_JSON("network-http-curlopts");
- 
-     TEST_DISK_TO_JSON("block-raw-noopts");
-     TEST_DISK_TO_JSON("block-raw-reservations");
-diff --git a/tests/qemublocktestdata/xml2json/network-http-curlopts-srconly.json b/tests/qemublocktestdata/xml2json/network-http-curlopts-srconly.json
-new file mode 100644
-index 0000000000..f5645ac2a6
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/network-http-curlopts-srconly.json
-@@ -0,0 +1,17 @@
-+(
-+  source only properties:
-+  {
-+    "driver": "https",
-+    "url": "https://host1.example.com:443/something",
-+    "sslverify": false,
-+    "cookie": "test=123456; blurb=here"
-+  }
-+  backing store string:
-+  json:{"file":{
-+    "driver": "https",
-+    "url": "https://host1.example.com:443/something",
-+    "sslverify": false,
-+    "cookie": "test=123456; blurb=here"
-+  }
-+  }
-+)
-diff --git a/tests/qemublocktestdata/xml2json/network-http-curlopts.json b/tests/qemublocktestdata/xml2json/network-http-curlopts.json
-new file mode 100644
-index 0000000000..08dfd1b300
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/network-http-curlopts.json
-@@ -0,0 +1,15 @@
-+{
-+  "node-name": "node-b-f",
-+  "read-only": false,
-+  "driver": "qcow2",
-+  "file": "node-a-s",
-+  "backing": null
-+}
-+{
-+  "driver": "https",
-+  "url": "https://host1.example.com:443/something",
-+  "sslverify": false,
-+  "node-name": "node-a-s",
-+  "auto-read-only": true,
-+  "discard": "unmap"
-+}
-diff --git a/tests/qemublocktestdata/xml2json/network-http-curlopts.xml b/tests/qemublocktestdata/xml2json/network-http-curlopts.xml
-new file mode 100644
-index 0000000000..a656247e2e
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/network-http-curlopts.xml
-@@ -0,0 +1,20 @@
-+<disk type='network' device='disk'>
-+  <driver name='qemu' type='qcow2'/>
-+  <source protocol='https' name='/something'>
-+    <host name='host1.example.com'/>
-+    <ssl verify='no'/>
-+    <cookies>
-+      <cookie name='test'>123456</cookie>
-+      <cookie name='blurb'>here</cookie>
-+    </cookies>
-+    <privateData>
-+      <nodenames>
-+        <nodename type='storage' name='node-a-s'/>
-+        <nodename type='format' name='node-b-f'/>
-+      </nodenames>
-+    </privateData>
-+  </source>
-+  <backingStore/>
-+  <target dev='vda' bus='virtio'/>
-+  <alias name='virtio-disk0'/>
-+</disk>
-diff --git a/tests/qemublocktestdata/xml2json/network-http-noopts-srconly.json b/tests/qemublocktestdata/xml2json/network-http-noopts-srconly.json
-new file mode 100644
-index 0000000000..1303623036
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/network-http-noopts-srconly.json
-@@ -0,0 +1,9 @@
-+(
-+  source only properties:
-+  {
-+    "driver": "https",
-+    "url": "https://host1.example.com:443/something"
-+  }
-+  backing store string:
-+  https://host1.example.com:443/something
-+)
-diff --git a/tests/qemublocktestdata/xml2json/network-http-noopts.json b/tests/qemublocktestdata/xml2json/network-http-noopts.json
-new file mode 100644
-index 0000000000..d577858236
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/network-http-noopts.json
-@@ -0,0 +1,14 @@
-+{
-+  "node-name": "node-b-f",
-+  "read-only": false,
-+  "driver": "qcow2",
-+  "file": "node-a-s",
-+  "backing": null
-+}
-+{
-+  "driver": "https",
-+  "url": "https://host1.example.com:443/something",
-+  "node-name": "node-a-s",
-+  "auto-read-only": true,
-+  "discard": "unmap"
-+}
-diff --git a/tests/qemublocktestdata/xml2json/network-http-noopts.xml b/tests/qemublocktestdata/xml2json/network-http-noopts.xml
-new file mode 100644
-index 0000000000..f09ff7ba67
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/network-http-noopts.xml
-@@ -0,0 +1,15 @@
-+<disk type='network' device='disk'>
-+  <driver name='qemu' type='qcow2'/>
-+  <source protocol='https' name='/something'>
-+    <host name='host1.example.com'/>
-+    <privateData>
-+      <nodenames>
-+        <nodename type='storage' name='node-a-s'/>
-+        <nodename type='format' name='node-b-f'/>
-+      </nodenames>
-+    </privateData>
-+  </source>
-+  <backingStore/>
-+  <target dev='vda' bus='virtio'/>
-+  <alias name='virtio-disk0'/>
-+</disk>
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Remove-ret-variable.patch b/SOURCES/libvirt-qemuBlockGetBackingStoreString-Remove-ret-variable.patch
deleted file mode 100644
index 5f1d249..0000000
--- a/SOURCES/libvirt-qemuBlockGetBackingStoreString-Remove-ret-variable.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 11ec875ccebe3035bb4b6e38406f22d52ed4b7fe Mon Sep 17 00:00:00 2001
-Message-Id: <11ec875ccebe3035bb4b6e38406f22d52ed4b7fe@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:03 +0100
-Subject: [PATCH] qemuBlockGetBackingStoreString: Remove 'ret' variable
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We can return the appropriate string directly.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit c60fe3106e8b91478e54129b4b1b81cc0543399e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <b3cb9b35035b7e2d3de21de3f067966de5e6765b.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 16 ++++------------
- 1 file changed, 4 insertions(+), 12 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 279b4a38b8..20579ec7b3 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2030,13 +2030,10 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-     virJSONValuePtr props = NULL;
-     g_autoptr(virURI) uri = NULL;
-     g_autofree char *backingJSON = NULL;
--    char *ret = NULL;
- 
-     if (!src->sliceStorage) {
--        if (virStorageSourceIsLocalStorage(src)) {
--            ret = g_strdup(src->path);
--            return ret;
--        }
-+        if (virStorageSourceIsLocalStorage(src))
-+            return g_strdup(src->path);
- 
-         /* generate simplified URIs for the easy cases */
-         if (actualType == VIR_STORAGE_TYPE_NETWORK &&
-@@ -2055,10 +2052,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-                 if (!(uri = qemuBlockStorageSourceGetURI(src)))
-                     return NULL;
- 
--                if (!(ret = virURIFormat(uri)))
--                    return NULL;
--
--                return ret;
-+                return virURIFormat(uri);
- 
-             case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG:
-             case VIR_STORAGE_NET_PROTOCOL_RBD:
-@@ -2092,9 +2086,7 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-     if (!(backingJSON = virJSONValueToString(props, pretty)))
-         return NULL;
- 
--    ret = g_strdup_printf("json:%s", backingJSON);
--
--    return ret;
-+    return g_strdup_printf("json:%s", backingJSON);
- }
- 
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuBlockJobDiskNewCommit-Propagate-disabledBitmapsBase.patch b/SOURCES/libvirt-qemuBlockJobDiskNewCommit-Propagate-disabledBitmapsBase.patch
deleted file mode 100644
index 551a140..0000000
--- a/SOURCES/libvirt-qemuBlockJobDiskNewCommit-Propagate-disabledBitmapsBase.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 7943ddf8cee3ffa4ca2b2bfe3b440da344aebdd8 Mon Sep 17 00:00:00 2001
-Message-Id: <7943ddf8cee3ffa4ca2b2bfe3b440da344aebdd8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:28 +0100
-Subject: [PATCH] qemuBlockJobDiskNewCommit: Propagate 'disabledBitmapsBase'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add an argument to qemuBlockJobDiskNewCommit to propagate the list of
-disabled bitmaps into the job data structure.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit a2bf4a13acf55864ddb11261cbaade4aedd28b9f)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <312a928fcee253b6a2657a2f30a6a0aa6d51cae9.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_blockjob.c | 2 ++
- src/qemu/qemu_blockjob.h | 1 +
- src/qemu/qemu_driver.c   | 2 +-
- 3 files changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index e894e1634d..63f1cc79c3 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -285,6 +285,7 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-                           virStorageSourcePtr topparent,
-                           virStorageSourcePtr top,
-                           virStorageSourcePtr base,
-+                          char ***disabledBitmapsBase,
-                           bool delete_imgs,
-                           unsigned int jobflags)
- {
-@@ -310,6 +311,7 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-     job->data.commit.top = top;
-     job->data.commit.base = base;
-     job->data.commit.deleteCommittedImages = delete_imgs;
-+    job->data.commit.disabledBitmapsBase = g_steal_pointer(disabledBitmapsBase);
-     job->jobflags = jobflags;
- 
-     if (qemuBlockJobRegister(job, vm, disk, true) < 0)
-diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h
-index c1d95ea3d8..ee83d318f3 100644
---- a/src/qemu/qemu_blockjob.h
-+++ b/src/qemu/qemu_blockjob.h
-@@ -187,6 +187,7 @@ qemuBlockJobDiskNewCommit(virDomainObjPtr vm,
-                           virStorageSourcePtr topparent,
-                           virStorageSourcePtr top,
-                           virStorageSourcePtr base,
-+                          char ***disabledBitmapsBase,
-                           bool delete_imgs,
-                           unsigned int jobflags);
- 
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 062e028b28..5c2b3cddf1 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18881,7 +18881,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     }
- 
-     if (!(job = qemuBlockJobDiskNewCommit(vm, disk, top_parent, topSource,
--                                          baseSource,
-+                                          baseSource, NULL,
-                                           flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE,
-                                           flags)))
-         goto endjob;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuBlockStorageSourceCreateFormat-Force-write-access-when-formatting-images.patch b/SOURCES/libvirt-qemuBlockStorageSourceCreateFormat-Force-write-access-when-formatting-images.patch
deleted file mode 100644
index e36b90d..0000000
--- a/SOURCES/libvirt-qemuBlockStorageSourceCreateFormat-Force-write-access-when-formatting-images.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 57493d29be457a3b2a9f0c781e2a82968ec3e01d Mon Sep 17 00:00:00 2001
-Message-Id: <57493d29be457a3b2a9f0c781e2a82968ec3e01d@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 12 May 2020 17:24:09 +0200
-Subject: [PATCH] qemuBlockStorageSourceCreateFormat: Force write access when
- formatting images
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We need qemu to be able to write the newly created images so that it can
-format them to the specified storage format.
-
-Force write access by relabelling the images when formatting.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 10d62782798cd6e4d472a764575c189247a263b3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1832204
-Message-Id: <0370c95a3990f94ef136d2de6df63d34989c672a.1589296861.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_block.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 6790f05ff7..a44774c237 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2658,6 +2658,12 @@ qemuBlockStorageSourceCreate(virDomainObjPtr vm,
-         return -1;
-     }
- 
-+    /* grant write access to read-only images during formatting */
-+    if (src->readonly &&
-+        qemuDomainStorageSourceAccessAllow(priv->driver, vm, src, false,
-+                                           false, true) < 0)
-+        return -1;
-+
-     if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-         goto cleanup;
- 
-@@ -2684,6 +2690,12 @@ qemuBlockStorageSourceCreate(virDomainObjPtr vm,
-                                            asyncJob) < 0)
-         goto cleanup;
- 
-+    /* revoke write access to read-only images during formatting */
-+    if (src->readonly &&
-+        qemuDomainStorageSourceAccessAllow(priv->driver, vm, src, true,
-+                                           false, true) < 0)
-+        goto cleanup;
-+
-     if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
-         goto cleanup;
- 
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemuBlockStorageSourceDetachPrepare-Get-rid-of-cleanup-section.patch b/SOURCES/libvirt-qemuBlockStorageSourceDetachPrepare-Get-rid-of-cleanup-section.patch
deleted file mode 100644
index 141bba5..0000000
--- a/SOURCES/libvirt-qemuBlockStorageSourceDetachPrepare-Get-rid-of-cleanup-section.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From f6f1f6ccc4ade458c159e45d51d627bcde61b303 Mon Sep 17 00:00:00 2001
-Message-Id: <f6f1f6ccc4ade458c159e45d51d627bcde61b303@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:40 +0100
-Subject: [PATCH] qemuBlockStorageSourceDetachPrepare: Get rid of cleanup
- section
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use g_new0 to completely avoid the 'cleanup' label.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4415b11d6b68643b93014d0e505cb23c5ce63bf0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <378b5200c9dbf740d695333b367b4a2d24746049.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 10 ++--------
- 1 file changed, 2 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 5bd5c955a4..5144cf266f 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1734,10 +1734,8 @@ qemuBlockStorageSourceDetachPrepare(virStorageSourcePtr src,
- {
-     qemuDomainStorageSourcePrivatePtr srcpriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
-     g_autoptr(qemuBlockStorageSourceAttachData) data = NULL;
--    qemuBlockStorageSourceAttachDataPtr ret = NULL;
- 
--    if (VIR_ALLOC(data) < 0)
--        goto cleanup;
-+    data = g_new0(qemuBlockStorageSourceAttachData, 1);
- 
-     if (driveAlias) {
-         data->driveAlias = g_steal_pointer(&driveAlias);
-@@ -1771,11 +1769,7 @@ qemuBlockStorageSourceDetachPrepare(virStorageSourcePtr src,
-             data->encryptsecretAlias = g_strdup(srcpriv->encinfo->s.aes.alias);
-     }
- 
--    ret = g_steal_pointer(&data);
--
-- cleanup:
--    VIR_FREE(driveAlias);
--    return ret;
-+    return g_steal_pointer(&data);
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuBlockStorageSourceGetBackendProps-Report-errors-on-all-switch-cases.patch b/SOURCES/libvirt-qemuBlockStorageSourceGetBackendProps-Report-errors-on-all-switch-cases.patch
deleted file mode 100644
index a34a367..0000000
--- a/SOURCES/libvirt-qemuBlockStorageSourceGetBackendProps-Report-errors-on-all-switch-cases.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From d08dae3e94778cf5860b6bd7b34bfbdc4741464c Mon Sep 17 00:00:00 2001
-Message-Id: <d08dae3e94778cf5860b6bd7b34bfbdc4741464c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:52 +0100
-Subject: [PATCH] qemuBlockStorageSourceGetBackendProps: Report errors on all
- switch cases
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Few switch cases returned failure but didn't report an error. For a
-situation when the backingStore type='volume' was not translated the
-following error would occur:
-
- $ virsh start VM
- error: Failed to start domain VM
- error: An error occurred, but the cause is unknown
-
-After this patch:
-
- $ virsh start VM
- error: Failed to start domain VM
- error: internal error: storage source pool 'tmp' volume 'pull3.qcow2' is not translated
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4e3e69fed45ac58bf19ebbe910213cb552d51f01)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <43cca40afafd5de0aad1f477d63b21d1b10ba796.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 63116ef5f2..0ee10dd770 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1081,8 +1081,14 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src,
-         break;
- 
-     case VIR_STORAGE_TYPE_VOLUME:
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("storage source pool '%s' volume '%s' is not translated"),
-+                       src->srcpool->pool, src->srcpool->volume);
-+        return NULL;
-+
-     case VIR_STORAGE_TYPE_NONE:
-     case VIR_STORAGE_TYPE_LAST:
-+        virReportEnumRangeError(virStorageType, actualType);
-         return NULL;
- 
-     case VIR_STORAGE_TYPE_NETWORK:
-@@ -1141,6 +1147,7 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src,
- 
-         case VIR_STORAGE_NET_PROTOCOL_NONE:
-         case VIR_STORAGE_NET_PROTOCOL_LAST:
-+            virReportEnumRangeError(virStorageNetProtocol, src->protocol);
-             return NULL;
-         }
-         break;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuBlockStorageSourceGetFormatRawProps-format-offset-and-size-for-slice.patch b/SOURCES/libvirt-qemuBlockStorageSourceGetFormatRawProps-format-offset-and-size-for-slice.patch
deleted file mode 100644
index 70bec7d..0000000
--- a/SOURCES/libvirt-qemuBlockStorageSourceGetFormatRawProps-format-offset-and-size-for-slice.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 23fcd1d6a87e0fcbffc8d4ddfa9cf2b7a226cdd5 Mon Sep 17 00:00:00 2001
-Message-Id: <23fcd1d6a87e0fcbffc8d4ddfa9cf2b7a226cdd5@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:16 +0100
-Subject: [PATCH] qemuBlockStorageSourceGetFormatRawProps: format 'offset' and
- 'size' for slice
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If we have a 'format' type slice for a raw driver we can directly format
-the values.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c4818812831967b8f882b2c33780aab129e245a2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <beee894a1f4af469391cee6a42a3e95e8946df98.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c | 15 ++++++++++-----
- 1 file changed, 10 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 710ddfd2cf..b408d4c81f 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1194,16 +1194,21 @@ qemuBlockStorageSourceGetFormatRawProps(virStorageSourcePtr src,
-         secretalias = srcPriv->encinfo->s.aes.alias;
-     }
- 
--    /* currently unhandled properties for the 'raw' driver:
--     * 'offset'
--     * 'size'
--     */
--
-     if (virJSONValueObjectAdd(props,
-                               "s:driver", driver,
-                               "S:key-secret", secretalias, NULL) < 0)
-         return -1;
- 
-+    /* Currently only storage slices are supported. We'll have to calculate
-+     * the union of the slices here if we don't want to be adding needless
-+     * 'raw' nodes. */
-+    if (src->sliceStorage &&
-+        virJSONValueObjectAdd(props,
-+                              "U:offset", src->sliceStorage->offset,
-+                              "U:size", src->sliceStorage->size,
-+                              NULL) < 0)
-+        return -1;
-+
-     return 0;
- }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuBlockStorageSourceGetURI-Pass-through-query-component.patch b/SOURCES/libvirt-qemuBlockStorageSourceGetURI-Pass-through-query-component.patch
deleted file mode 100644
index 259f558..0000000
--- a/SOURCES/libvirt-qemuBlockStorageSourceGetURI-Pass-through-query-component.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From 2d27c71da092e9232c2d79738a431c04db649a96 Mon Sep 17 00:00:00 2001
-Message-Id: <2d27c71da092e9232c2d79738a431c04db649a96@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:46 +0200
-Subject: [PATCH] qemuBlockStorageSourceGetURI: Pass through query component
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If the storage source has the query part set, format it in the output.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 216860dd8b93c7da4d625055cf353e0eedda6093)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <832f573fd69341b7d730925c9df5b23e5f168408.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_block.c                                    | 2 ++
- src/qemu/qemu_domain.c                                   | 9 +++++++++
- tests/qemuxml2argvdata/disk-cdrom-network.args           | 4 ++--
- .../disk-cdrom-network.x86_64-2.12.0.args                | 4 ++--
- .../disk-cdrom-network.x86_64-latest.args                | 3 ++-
- tests/qemuxml2argvdata/disk-cdrom-network.xml            | 2 +-
- .../disk-network-http.x86_64-latest.args                 | 5 +++--
- 7 files changed, 21 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index e7577c1312..6790f05ff7 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -437,6 +437,8 @@ qemuBlockStorageSourceGetURI(virStorageSourcePtr src)
-         }
-     }
- 
-+    uri->query = g_strdup(src->query);
-+
-     uri->server = g_strdup(src->hosts->name);
- 
-     return g_steal_pointer(&uri);
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 4007b4dbda..bb28716ff0 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -7107,6 +7107,15 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src,
-         }
-     }
- 
-+    if (src->query &&
-+        (actualType != VIR_STORAGE_TYPE_NETWORK ||
-+         (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS &&
-+          src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP))) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("query is supported only with HTTP(S) protocols"));
-+        return -1;
-+    }
-+
-     return 0;
- }
- 
-diff --git a/tests/qemuxml2argvdata/disk-cdrom-network.args b/tests/qemuxml2argvdata/disk-cdrom-network.args
-index be19bad68a..81ff324a0f 100644
---- a/tests/qemuxml2argvdata/disk-cdrom-network.args
-+++ b/tests/qemuxml2argvdata/disk-cdrom-network.args
-@@ -30,8 +30,8 @@ id=drive-ide0-0-0,readonly=on \
- -drive file=ftps://host.name:990/url/path/file.iso,format=raw,if=none,\
- id=drive-ide0-0-1,readonly=on \
- -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
---drive file=https://host.name:443/url/path/file.iso,format=raw,if=none,\
--id=drive-ide0-1-0,readonly=on \
-+-drive 'file=https://host.name:443/url/path/file.iso?test=val,format=raw,\
-+if=none,id=drive-ide0-1-0,readonly=on' \
- -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \
- -drive file=tftp://host.name:69/url/path/file.iso,format=raw,if=none,\
- id=drive-ide0-1-1,readonly=on \
-diff --git a/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-2.12.0.args b/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-2.12.0.args
-index 1ece3d6f46..81f6b400aa 100644
---- a/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-2.12.0.args
-+++ b/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-2.12.0.args
-@@ -32,8 +32,8 @@ id=drive-ide0-0-0,readonly=on \
- -drive file=ftps://host.name:990/url/path/file.iso,format=raw,if=none,\
- id=drive-ide0-0-1,readonly=on \
- -device ide-cd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1 \
---drive file=https://host.name:443/url/path/file.iso,format=raw,if=none,\
--id=drive-ide0-1-0,readonly=on \
-+-drive 'file=https://host.name:443/url/path/file.iso?test=val,format=raw,\
-+if=none,id=drive-ide0-1-0,readonly=on' \
- -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \
- -drive file=tftp://host.name:69/url/path/file.iso,format=raw,if=none,\
- id=drive-ide0-1-1,readonly=on \
-diff --git a/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args b/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args
-index 0b4ac07f07..2515b256d0 100644
---- a/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-cdrom-network.x86_64-latest.args
-@@ -37,7 +37,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
- -blockdev '{"node-name":"libvirt-3-format","read-only":true,"driver":"raw",\
- "file":"libvirt-3-storage"}' \
- -device ide-cd,bus=ide.0,unit=1,drive=libvirt-3-format,id=ide0-0-1 \
---blockdev '{"driver":"https","url":"https://host.name:443/url/path/file.iso",\
-+-blockdev '{"driver":"https",\
-+"url":"https://host.name:443/url/path/file.iso?test=val",\
- "node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-2-format","read-only":true,"driver":"raw",\
- "file":"libvirt-2-storage"}' \
-diff --git a/tests/qemuxml2argvdata/disk-cdrom-network.xml b/tests/qemuxml2argvdata/disk-cdrom-network.xml
-index 0bdc0e1883..44473f8ad4 100644
---- a/tests/qemuxml2argvdata/disk-cdrom-network.xml
-+++ b/tests/qemuxml2argvdata/disk-cdrom-network.xml
-@@ -39,7 +39,7 @@
-     </disk>
-     <disk type='network' device='cdrom'>
-       <driver name='qemu' type='raw'/>
--      <source protocol='https' name='/url/path/file.iso'>
-+      <source protocol='https' name='/url/path/file.iso' query='test=val'>
-         <host name='host.name' port='443'/>
-       </source>
-       <target dev='hdc' bus='ide'/>
-diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-index 46aa5f23ce..d1bf0b9caa 100644
---- a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-@@ -54,8 +54,9 @@ id=virtio-disk2 \
- -object secret,id=libvirt-1-storage-httpcookie-secret0,\
- data=DrPR9NA6GKJb7qi1KbjHaealKEMVtOWUl2h3yvO5lgIh6cyLHemmlg+h9fcgwREA,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
---blockdev '{"driver":"https","url":"https://example.org:1234/test4.img",\
--"sslverify":false,"cookie-secret":"libvirt-1-storage-httpcookie-secret0",\
-+-blockdev '{"driver":"https",\
-+"url":"https://example.org:1234/test4.img?par=val&other=ble","sslverify":false,\
-+"cookie-secret":"libvirt-1-storage-httpcookie-secret0",\
- "node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw",\
- "file":"libvirt-1-storage"}' \
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuBuildMachineCommandLine-Drop-needless-check.patch b/SOURCES/libvirt-qemuBuildMachineCommandLine-Drop-needless-check.patch
deleted file mode 100644
index a904b27..0000000
--- a/SOURCES/libvirt-qemuBuildMachineCommandLine-Drop-needless-check.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 4a3d416229ddf600ff985f9a90e3feb669548690 Mon Sep 17 00:00:00 2001
-Message-Id: <4a3d416229ddf600ff985f9a90e3feb669548690@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:36 +0200
-Subject: [PATCH] qemuBuildMachineCommandLine: Drop needless check
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The machine can not be NULL at this point -
-qemuDomainDefPostParse() makes sure it isn't.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit fe43b3a5a5532377f7de40e77ca9ffde5aa2ca7e)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <4a0c05b78ac65e598b919acdb66d24a19fcf6251.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_command.c | 7 -------
- 1 file changed, 7 deletions(-)
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 8c4f7a015f..1a573c2817 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -6977,13 +6977,6 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
-     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-     size_t i;
- 
--    /* This should *never* be NULL, since we always provide
--     * a machine in the capabilities data for QEMU. So this
--     * check is just here as a safety in case the unexpected
--     * happens */
--    if (!def->os.machine)
--        return 0;
--
-     virCommandAddArg(cmd, "-machine");
-     virBufferAdd(&buf, def->os.machine, -1);
- 
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemuBuildNumaCommandLine-Fix-masterInitiator-check.patch b/SOURCES/libvirt-qemuBuildNumaCommandLine-Fix-masterInitiator-check.patch
deleted file mode 100644
index 2186773..0000000
--- a/SOURCES/libvirt-qemuBuildNumaCommandLine-Fix-masterInitiator-check.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From a8905f41cd62a0553e703f1b653dd4f6b1acd31f Mon Sep 17 00:00:00 2001
-Message-Id: <a8905f41cd62a0553e703f1b653dd4f6b1acd31f@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:44 +0200
-Subject: [PATCH] qemuBuildNumaCommandLine: Fix @masterInitiator check
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-A few commits ago, in aeecbc87b73, I've implemented command line
-generation for ACPI HMAT. For this, we need to know if at least
-one guest NUMA node has vCPUs. This is tracked in
-@masterInitiator variable, which is initialized to -1, then we
-iterate through guest NUMA nodes and break the loop if we find a
-node with a vCPU. After the loop, if masterInitiator is still
-negative then no NUMA node has a vCPU and we error out. But this
-exact check was missing comparison for negativeness.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit ccf627c110a178afa529818474e555bca62fc165)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <d126e3fe0064d127a1ce6f36c36708e7501e4b5e.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_command.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index 959207bfea..67d7334b0f 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -7542,7 +7542,7 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-         }
-     }
- 
--    if (masterInitiator) {
-+    if (masterInitiator < 0) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                        _("At least one NUMA node has to have CPUs"));
-         goto cleanup;
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemuCheckpointCreateXML-Check-VM-liveness-first.patch b/SOURCES/libvirt-qemuCheckpointCreateXML-Check-VM-liveness-first.patch
deleted file mode 100644
index ec95846..0000000
--- a/SOURCES/libvirt-qemuCheckpointCreateXML-Check-VM-liveness-first.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 5155fcbbff955e9c1446b3564af2252a5c15548a Mon Sep 17 00:00:00 2001
-Message-Id: <5155fcbbff955e9c1446b3564af2252a5c15548a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 3 Apr 2020 14:32:56 +0200
-Subject: [PATCH] qemuCheckpointCreateXML: Check VM liveness first
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Move the liveness check prior to the capability check. If the VM is
-offline the capabilities are not initialized and thus we'd report the
-wrong error.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1812531
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 4257c203737e5ef616588e80794cc705a5fb475a)
-
-Note that this patch is backported as a conflict resolution for the bugs
-below
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1819755
-
-Message-Id: <94fcc1654f3e2fb2d4c1da07347d686180bac532.1585916255.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 19822bd74d..16480518fa 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -649,15 +649,15 @@ qemuCheckpointCreateXML(virDomainPtr domain,
-         update_current = false;
-     }
- 
--    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP)) {
-+    if (!virDomainObjIsActive(vm)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
--                       _("incremental backup is not supported yet"));
-+                       _("cannot create checkpoint for inactive domain"));
-         return NULL;
-     }
- 
--    if (!virDomainObjIsActive(vm)) {
-+    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP)) {
-         virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
--                       _("cannot create checkpoint for inactive domain"));
-+                       _("incremental backup is not supported yet"));
-         return NULL;
-     }
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuCheckpointDiscardBitmaps-Reopen-images-for-bitmap-modifications.patch b/SOURCES/libvirt-qemuCheckpointDiscardBitmaps-Reopen-images-for-bitmap-modifications.patch
deleted file mode 100644
index a5fc7df..0000000
--- a/SOURCES/libvirt-qemuCheckpointDiscardBitmaps-Reopen-images-for-bitmap-modifications.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 74ee4616dd3159f4456ec9d4fd22b4604394440b Mon Sep 17 00:00:00 2001
-Message-Id: <74ee4616dd3159f4456ec9d4fd22b4604394440b@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:17 +0100
-Subject: [PATCH] qemuCheckpointDiscardBitmaps: Reopen images for bitmap
- modifications
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Qemu's bitmap APIs don't reopen the appropriate images read-write for
-modification. It's libvirt's duty to reopen them via blockdev-reopen
-if we wish to modify the bitmaps.
-
-Use the new helpers to reopen the images for bitmap manipulation.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit c6d117528cc0ddb325abd67d69b6d4ebc1bfe608)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <c5378d64ab79d29e62b5b65d1566825b5bc88eff.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index fe54af74ec..6e3a432022 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -302,6 +302,10 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-                                                false, false, false) < 0)
-             goto relabel;
- 
-+        if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN) &&
-+            qemuBlockReopenReadWrite(vm, src, QEMU_ASYNC_JOB_NONE) < 0)
-+            goto relabel;
-+
-         relabelimages = g_slist_prepend(relabelimages, src);
-     }
- 
-@@ -314,6 +318,9 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     for (next = relabelimages; next; next = next->next) {
-         virStorageSourcePtr src = next->data;
- 
-+        if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-+            ignore_value(qemuBlockReopenReadOnly(vm, src, QEMU_ASYNC_JOB_NONE));
-+
-         ignore_value(qemuDomainStorageSourceAccessAllow(driver, vm, src,
-                                                         true, false, false));
-     }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuCheckpointDiscardBitmaps-Use-correct-field-for-checkpoint-bitmap-name.patch b/SOURCES/libvirt-qemuCheckpointDiscardBitmaps-Use-correct-field-for-checkpoint-bitmap-name.patch
deleted file mode 100644
index 493690d..0000000
--- a/SOURCES/libvirt-qemuCheckpointDiscardBitmaps-Use-correct-field-for-checkpoint-bitmap-name.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From ec3392c1d5a9886279ee086ee3d421106b9b1e32 Mon Sep 17 00:00:00 2001
-Message-Id: <ec3392c1d5a9886279ee086ee3d421106b9b1e32@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:18 +0100
-Subject: [PATCH] qemuCheckpointDiscardBitmaps: Use correct field for
- checkpoint bitmap name
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The code deleting checkpoints needs the name of the parent checkpoint's
-disk's bitmap but was using the disk alias instead. This would create
-wrong bitmaps after deleting some checkpoints.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 0ce8b0fbe2d0cbaf26da0402270720b776ebfb0f)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <c32db1af44e71870d172233acdfddf050ed73441.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_checkpoint.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 6e3a432022..19822bd74d 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -285,7 +285,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-          * ancestor. */
-         if ((parentchkdisk = qemuCheckpointFindActiveDiskInParent(vm, parent,
-                                                                   chkdisk->name)))
--            parentbitmap = parentchkdisk->name;
-+            parentbitmap = parentchkdisk->bitmap;
- 
-         if (qemuCheckpointDiscardDiskBitmaps(domdisk->src, blockNamedNodeData,
-                                              chkdisk->bitmap, parentbitmap,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainBlockCommit-Handle-bitmaps-on-start-of-commit.patch b/SOURCES/libvirt-qemuDomainBlockCommit-Handle-bitmaps-on-start-of-commit.patch
deleted file mode 100644
index d21c343..0000000
--- a/SOURCES/libvirt-qemuDomainBlockCommit-Handle-bitmaps-on-start-of-commit.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From e735d0f163806b34f9e65dacdf5e10b52c0478fd Mon Sep 17 00:00:00 2001
-Message-Id: <e735d0f163806b34f9e65dacdf5e10b52c0478fd@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:29 +0100
-Subject: [PATCH] qemuDomainBlockCommit: Handle bitmaps on start of commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-On start of the commit job, we need to disable any active bitmap in the
-base. Use qemuBlockBitmapsHandleCommitStart to calculate which and call
-the appropriate QMP APIs. We use blockdev-reopen to make the 'base'
-writable to disable the bitmaps.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 2b9091f089279a7bac523095a2ccd146fa20800b)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <2aca5706f8412d27ff38da69582c522aca058054.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 43 +++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 42 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 5c2b3cddf1..2f8fee2ef0 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18724,6 +18724,8 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     const char *nodebase = NULL;
-     bool persistjob = false;
-     bool blockdev = false;
-+    g_autoptr(virJSONValue) bitmapDisableActions = NULL;
-+    VIR_AUTOSTRINGLIST bitmapDisableList = NULL;
- 
-     virCheckFlags(VIR_DOMAIN_BLOCK_COMMIT_SHALLOW |
-                   VIR_DOMAIN_BLOCK_COMMIT_ACTIVE |
-@@ -18880,8 +18882,29 @@ qemuDomainBlockCommit(virDomainPtr dom,
-             goto endjob;
-     }
- 
-+    if (blockdev &&
-+        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
-+        g_autoptr(virHashTable) blockNamedNodeData = NULL;
-+        if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-+            goto endjob;
-+
-+        if (qemuBlockBitmapsHandleCommitStart(topSource, baseSource,
-+                                              blockNamedNodeData,
-+                                              &bitmapDisableActions,
-+                                              &bitmapDisableList) < 0)
-+            goto endjob;
-+
-+        /* if we don't have terminator on 'base' we can't reopen it */
-+        if (bitmapDisableActions && !baseSource->backingStore) {
-+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-+                           _("can't handle bitmaps on unterminated backing image '%s'"),
-+                           base);
-+            goto endjob;
-+        }
-+    }
-+
-     if (!(job = qemuBlockJobDiskNewCommit(vm, disk, top_parent, topSource,
--                                          baseSource, NULL,
-+                                          baseSource, &bitmapDisableList,
-                                           flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE,
-                                           flags)))
-         goto endjob;
-@@ -18903,6 +18926,24 @@ qemuDomainBlockCommit(virDomainPtr dom,
-         if (!backingPath && top_parent &&
-             !(backingPath = qemuBlockGetBackingStoreString(baseSource)))
-             goto endjob;
-+
-+        if (bitmapDisableActions) {
-+            int rc;
-+
-+            if (qemuBlockReopenReadWrite(vm, baseSource, QEMU_ASYNC_JOB_NONE) < 0)
-+                goto endjob;
-+
-+            qemuDomainObjEnterMonitor(driver, vm);
-+            rc = qemuMonitorTransaction(priv->mon, &bitmapDisableActions);
-+            if (qemuDomainObjExitMonitor(driver, vm) < 0)
-+                goto endjob;
-+
-+            if (qemuBlockReopenReadOnly(vm, baseSource, QEMU_ASYNC_JOB_NONE) < 0)
-+                goto endjob;
-+
-+            if (rc < 0)
-+                goto endjob;
-+        }
-     } else {
-         device = job->name;
-     }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainBlockCommit-Move-checks-depending-on-capabilities-after-liveness-check.patch b/SOURCES/libvirt-qemuDomainBlockCommit-Move-checks-depending-on-capabilities-after-liveness-check.patch
deleted file mode 100644
index e377e10..0000000
--- a/SOURCES/libvirt-qemuDomainBlockCommit-Move-checks-depending-on-capabilities-after-liveness-check.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From b482f451983e159f3e9752c8d4f2f5d36e6e9dce Mon Sep 17 00:00:00 2001
-Message-Id: <b482f451983e159f3e9752c8d4f2f5d36e6e9dce@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:19 +0100
-Subject: [PATCH] qemuDomainBlockCommit: Move checks depending on capabilities
- after liveness check
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Since capabilities are not present for inactive VMs we'd report that we
-don't support '--delete' or committing while checkpoints exist rather
-than the proper error.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit d4b5bb5d56e0ba346a01c605b7316f4394907115)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <74ee257babd3eb042be2fcc5d3a101d503b99ad2.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 441bb02b6b..062e028b28 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18738,9 +18738,6 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     if (virDomainBlockCommitEnsureACL(dom->conn, vm->def) < 0)
-         goto cleanup;
- 
--    if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
--        goto cleanup;
--
-     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
-         goto cleanup;
- 
-@@ -18749,12 +18746,6 @@ qemuDomainBlockCommit(virDomainPtr dom,
- 
-     blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
- 
--    if (!blockdev && (flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE)) {
--        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
--                       _("deleting committed images is not supported by this VM"));
--        goto endjob;
--    }
--
-     /* Convert bandwidth MiB to bytes, if necessary */
-     if (!(flags & VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES)) {
-         if (speed > LLONG_MAX >> 20) {
-@@ -18779,6 +18770,15 @@ qemuDomainBlockCommit(virDomainPtr dom,
-     if (qemuDomainDiskBlockJobIsActive(disk))
-         goto endjob;
- 
-+    if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
-+        goto endjob;
-+
-+    if (!blockdev && (flags & VIR_DOMAIN_BLOCK_COMMIT_DELETE)) {
-+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                       _("deleting committed images is not supported by this VM"));
-+        goto endjob;
-+    }
-+
-     if (!top || STREQ(top, disk->dst))
-         topSource = disk->src;
-     else if (virStorageFileParseChainIndex(disk->dst, top, &topIndex) < 0 ||
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainBlockCopyCommon-Record-updated-flags-to-block-job.patch b/SOURCES/libvirt-qemuDomainBlockCopyCommon-Record-updated-flags-to-block-job.patch
deleted file mode 100644
index cf6e8b3..0000000
--- a/SOURCES/libvirt-qemuDomainBlockCopyCommon-Record-updated-flags-to-block-job.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 60e014701c6406fd3e1c68a1745e25ffcf918288 Mon Sep 17 00:00:00 2001
-Message-Id: <60e014701c6406fd3e1c68a1745e25ffcf918288@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:37 +0100
-Subject: [PATCH] qemuDomainBlockCopyCommon: Record updated flags to block job
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-For a long time we've masked out VIR_DOMAIN_BLOCK_COPY_SHALLOW if
-there's no backing chain for the copied disk to simplify the code.
-
-One of the refactors of the block copy code caused that we no longer
-update the 'flags' variable just the local copies. This was okay until
-in ccd4228afff we started storing the job flags in the block job data.
-
-Given that we modify how we call qemu we also should modify @flags so
-that the correct value is recorded in the block job data.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit c2b6bc73774f6202e6368ea6823ce9b1cf3521f7)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1803092
-Message-Id: <71dccc8326d856c3d014c6290524a9da4a75e2df.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index bedd69ea2b..5a4e979907 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -18242,8 +18242,10 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
-     }
- 
-     /* clear the _SHALLOW flag if there is only one layer */
--    if (!virStorageSourceHasBacking(disk->src))
-+    if (!virStorageSourceHasBacking(disk->src)) {
-+        flags &= ~VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-         mirror_shallow = false;
-+    }
- 
-     if (qemuDomainBlockCopyCommonValidateUserMirrorBackingStore(mirror,
-                                                                 mirror_shallow,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainBlockPivot-Copy-bitmaps-backing-checkpoints-for-virDomainBlockCopy.patch b/SOURCES/libvirt-qemuDomainBlockPivot-Copy-bitmaps-backing-checkpoints-for-virDomainBlockCopy.patch
deleted file mode 100644
index 79b9b89..0000000
--- a/SOURCES/libvirt-qemuDomainBlockPivot-Copy-bitmaps-backing-checkpoints-for-virDomainBlockCopy.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-From 85658fdaaf7b24f64c31950f4bf710c0dcdafacd Mon Sep 17 00:00:00 2001
-Message-Id: <85658fdaaf7b24f64c31950f4bf710c0dcdafacd@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:27 +0100
-Subject: [PATCH] qemuDomainBlockPivot: Copy bitmaps backing checkpoints for
- virDomainBlockCopy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use qemuBlockBitmapsHandleBlockcopy to calculate bitmaps to copy over
-for a block-copy job.
-
-We copy them when pivoting to the new image as at that point we are
-certain that we don't dirty any bitmap unnecessarily.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 54030892f5122ef120c1e8ffb6e0546871030272)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <c60a7a567a634836370fc9c0c38317569fa5a22d.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 28 +++++++++++++++++++++++++---
- 1 file changed, 25 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 71c75b25a6..caeb76a20c 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17552,6 +17552,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-     int ret = -1;
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
-+    g_autoptr(virJSONValue) actions = NULL;
- 
-     switch ((qemuBlockJobType) job->type) {
-     case QEMU_BLOCKJOB_TYPE_NONE:
-@@ -17572,6 +17573,20 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         return -1;
- 
-     case QEMU_BLOCKJOB_TYPE_COPY:
-+        if (blockdev && !job->jobflagsmissing) {
-+            g_autoptr(virHashTable) blockNamedNodeData = NULL;
-+            bool shallow = job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-+
-+            if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-+                return -1;
-+
-+            if (qemuBlockBitmapsHandleBlockcopy(disk->src, disk->mirror,
-+                                                blockNamedNodeData,
-+                                                shallow, &actions) < 0)
-+                return -1;
-+        }
-+        break;
-+
-     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
-         break;
-     }
-@@ -17584,10 +17599,17 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-     }
- 
-     qemuDomainObjEnterMonitor(driver, vm);
--    if (blockdev)
--        ret = qemuMonitorJobComplete(priv->mon, job->name);
--    else
-+    if (blockdev) {
-+        int rc = 0;
-+
-+        if (actions)
-+            rc = qemuMonitorTransaction(priv->mon, &actions);
-+
-+        if (rc == 0)
-+            ret = qemuMonitorJobComplete(priv->mon, job->name);
-+    } else {
-         ret = qemuMonitorDrivePivot(priv->mon, job->name);
-+    }
-     if (qemuDomainObjExitMonitor(driver, vm) < 0)
-         return -1;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuDomainBlockPivot-Handle-merging-of-bitmaps-when-pivoting-an-active-block-commit.patch b/SOURCES/libvirt-qemuDomainBlockPivot-Handle-merging-of-bitmaps-when-pivoting-an-active-block-commit.patch
deleted file mode 100644
index 6d902d1..0000000
--- a/SOURCES/libvirt-qemuDomainBlockPivot-Handle-merging-of-bitmaps-when-pivoting-an-active-block-commit.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From fa5d6a3c048e15f466a5bd2f7cc6de0b106d69a2 Mon Sep 17 00:00:00 2001
-Message-Id: <fa5d6a3c048e15f466a5bd2f7cc6de0b106d69a2@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:30 +0100
-Subject: [PATCH] qemuDomainBlockPivot: Handle merging of bitmaps when pivoting
- an active block-commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Active layer block commit makes the 'base' image the new top image of
-the disk after it finishes. This means that all bitmap operations need
-to be handled prior to this happening as we'd lose writes otherwise.
-
-The ideal place is to handle it when pivoting to the new image as only
-guest-writes would be happening after this point.
-
-Use qemuBlockBitmapsHandleCommitFinish to calculate the merging
-transaction.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 8502b4b0595ac040f22e1ec8c2ab6375506c14a3)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <7fbaf9f9a8533489334c5b08e6451b23011ab657.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 2f8fee2ef0..05e525e935 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17626,6 +17626,23 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         break;
- 
-     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
-+        /* we technically don't need reopen here, but we couldn't prepare
-+         * the bitmaps if it wasn't present thus must skip this */
-+        if (blockdev &&
-+            virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) {
-+            g_autoptr(virHashTable) blockNamedNodeData = NULL;
-+
-+            if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
-+                return -1;
-+
-+            if (qemuBlockBitmapsHandleCommitFinish(job->data.commit.top,
-+                                                   job->data.commit.base,
-+                                                   blockNamedNodeData,
-+                                                   &actions,
-+                                                   job->data.commit.disabledBitmapsBase) < 0)
-+                return -1;
-+        }
-+
-         break;
-     }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainBlockPivot-Ignore-failures-of-creating-active-layer-bitmap.patch b/SOURCES/libvirt-qemuDomainBlockPivot-Ignore-failures-of-creating-active-layer-bitmap.patch
deleted file mode 100644
index 17a09fa..0000000
--- a/SOURCES/libvirt-qemuDomainBlockPivot-Ignore-failures-of-creating-active-layer-bitmap.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 0084cc867b6de11a1b5ac1207ada57a3cc43acaf Mon Sep 17 00:00:00 2001
-Message-Id: <0084cc867b6de11a1b5ac1207ada57a3cc43acaf@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 21 Jul 2020 13:56:25 +0200
-Subject: [PATCH] qemuDomainBlockPivot: Ignore failures of creating active
- layer bitmap
-
-Ignore errors from creating "libvirt-tmp-activewrite" bitmap. This
-prevents failures of finishing blockjobs if the bitmap already exists.
-
-Note that if the bitmap exists, the worst case that can happen is that
-more bits are marked as dirty in the resulting merge.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 66dc4992fa8a51c4e774d32bcf75f26b1365e998)
-
-rhel-8.3: https://bugzilla.redhat.com/show_bug.cgi?id=1857779
-rhel-av-8.2.1: not cloned yet
-Message-Id: <9cec292732836005d59b50a0701acb804ed1dda5.1595332476.git.pkrempa@redhat.com>
-
-Reviewed-by: Jiri Denemark <jdenemar@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 454d7b1c16..b5df0c63d4 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17659,7 +17659,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         }
- 
-         if (bitmapactions && rc == 0)
--            rc = qemuMonitorTransaction(priv->mon, &bitmapactions);
-+            ignore_value(qemuMonitorTransaction(priv->mon, &bitmapactions));
- 
-         if (rc == 0)
-             ret = qemuMonitorJobComplete(priv->mon, job->name);
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuDomainBlockPivot-Move-check-prior-to-executing-the-pivot-steps.patch b/SOURCES/libvirt-qemuDomainBlockPivot-Move-check-prior-to-executing-the-pivot-steps.patch
deleted file mode 100644
index 946b816..0000000
--- a/SOURCES/libvirt-qemuDomainBlockPivot-Move-check-prior-to-executing-the-pivot-steps.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 5e36101be25d8e80eb14635d9e3eccccaba43550 Mon Sep 17 00:00:00 2001
-Message-Id: <5e36101be25d8e80eb14635d9e3eccccaba43550@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:36 +0100
-Subject: [PATCH] qemuDomainBlockPivot: Move check prior to executing the pivot
- steps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Move the check whether the job is already synchronised to the beginning
-of the function so that we don't try to do some of the steps necessary
-for pivoting prior to actually wanting to pivot.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit a89ba6524c01473f3e5272dc787f01f806df32bb)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1803092
-Message-Id: <17682fad2c82b2f48505b3f8776bb75201eb2d89.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 0bdb2851ec..bedd69ea2b 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17561,6 +17561,13 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-     bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
-     g_autoptr(virJSONValue) actions = NULL;
- 
-+    if (job->state != QEMU_BLOCKJOB_STATE_READY) {
-+        virReportError(VIR_ERR_BLOCK_COPY_ACTIVE,
-+                       _("block job '%s' not ready for pivot yet"),
-+                       job->name);
-+        return -1;
-+    }
-+
-     switch ((qemuBlockJobType) job->type) {
-     case QEMU_BLOCKJOB_TYPE_NONE:
-     case QEMU_BLOCKJOB_TYPE_LAST:
-@@ -17598,13 +17605,6 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-         break;
-     }
- 
--    if (job->state != QEMU_BLOCKJOB_STATE_READY) {
--        virReportError(VIR_ERR_BLOCK_COPY_ACTIVE,
--                       _("block job '%s' not ready for pivot yet"),
--                       job->name);
--        return -1;
--    }
--
-     qemuDomainObjEnterMonitor(driver, vm);
-     if (blockdev) {
-         int rc = 0;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainBlockPivot-Rename-actions-to-bitmapactions.patch b/SOURCES/libvirt-qemuDomainBlockPivot-Rename-actions-to-bitmapactions.patch
deleted file mode 100644
index 3054d1d..0000000
--- a/SOURCES/libvirt-qemuDomainBlockPivot-Rename-actions-to-bitmapactions.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 31a752d5bdd63d431b619ec5045b431fc3ca6bef Mon Sep 17 00:00:00 2001
-Message-Id: <31a752d5bdd63d431b619ec5045b431fc3ca6bef@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 21 Jul 2020 13:56:24 +0200
-Subject: [PATCH] qemuDomainBlockPivot: Rename 'actions' to 'bitmapactions'
-
-There are two possible 'transaction' command arguments in the function.
-Rename 'actions' as they deal with creating bitmaps only.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 24ac1a7c04fded2f8639478abead72bb57506162)
-
-rhel-8.3: https://bugzilla.redhat.com/show_bug.cgi?id=1857779
-rhel-av-8.2.1: not cloned yet
-Message-Id: <6a3969721f1e701a16eb3679dcc37c9908c753ae.1595332476.git.pkrempa@redhat.com>
-
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_driver.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index ad5ef7d67d..454d7b1c16 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -17564,7 +17564,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-     int ret = -1;
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
--    g_autoptr(virJSONValue) actions = NULL;
-+    g_autoptr(virJSONValue) bitmapactions = NULL;
-     g_autoptr(virJSONValue) reopenactions = NULL;
- 
-     if (job->state != QEMU_BLOCKJOB_STATE_READY) {
-@@ -17597,9 +17597,9 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-             bool shallow = job->jobflags & VIR_DOMAIN_BLOCK_COPY_SHALLOW;
-             bool reuse = job->jobflags & VIR_DOMAIN_BLOCK_COPY_REUSE_EXT;
- 
--            actions = virJSONValueNewArray();
-+            bitmapactions = virJSONValueNewArray();
- 
--            if (qemuMonitorTransactionBitmapAdd(actions,
-+            if (qemuMonitorTransactionBitmapAdd(bitmapactions,
-                                                 disk->mirror->nodeformat,
-                                                 "libvirt-tmp-activewrite",
-                                                 false,
-@@ -17632,9 +17632,9 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
- 
-     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
-         if (blockdev) {
--            actions = virJSONValueNewArray();
-+            bitmapactions = virJSONValueNewArray();
- 
--            if (qemuMonitorTransactionBitmapAdd(actions,
-+            if (qemuMonitorTransactionBitmapAdd(bitmapactions,
-                                                 job->data.commit.base->nodeformat,
-                                                 "libvirt-tmp-activewrite",
-                                                 false,
-@@ -17658,8 +17658,8 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
-             }
-         }
- 
--        if (actions && rc == 0)
--            rc = qemuMonitorTransaction(priv->mon, &actions);
-+        if (bitmapactions && rc == 0)
-+            rc = qemuMonitorTransaction(priv->mon, &bitmapactions);
- 
-         if (rc == 0)
-             ret = qemuMonitorJobComplete(priv->mon, job->name);
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemuDomainDeviceDiskDefPostParseRestoreSecAlias-Hardcode-restored-aliases.patch b/SOURCES/libvirt-qemuDomainDeviceDiskDefPostParseRestoreSecAlias-Hardcode-restored-aliases.patch
deleted file mode 100644
index 7f3cc34..0000000
--- a/SOURCES/libvirt-qemuDomainDeviceDiskDefPostParseRestoreSecAlias-Hardcode-restored-aliases.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 1246cae822ca95a8392463631af1126d915eaf5e Mon Sep 17 00:00:00 2001
-Message-Id: <1246cae822ca95a8392463631af1126d915eaf5e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:51 +0100
-Subject: [PATCH] qemuDomainDeviceDiskDefPostParseRestoreSecAlias: Hardcode
- restored aliases
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In order to be able to change the function generating the alias and thus
-also the aliases itself, we must hardcode the old format for the case of
-upgrading form libvirt which didn't record them in the status XML yet.
-
-Note that this code path is tested by
-'tests/qemustatusxml2xmldata/disk-secinfo-upgrade-in.xml'
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 95a8c4332dd42ab6a558117a07134a7fdb2ce8f4)
-
- Conflicts:
-	src/qemu/qemu_domain.c
-        Global cleanups from ae9f630e502 not backported.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <4b880854049d398ffe424b811af69f4b1a074c9d.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 6221e7090f..897e21726a 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -9062,16 +9062,14 @@ qemuDomainDeviceDiskDefPostParseRestoreSecAlias(virDomainDiskDefPtr disk,
-     }
- 
-     if (restoreAuthSecret) {
--        if (!(authalias = qemuDomainGetSecretAESAlias(disk->info.alias, false)))
--            goto cleanup;
-+        authalias = g_strdup_printf("%s-secret0", disk->info.alias);
- 
-         if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->secinfo, &authalias) < 0)
-             goto cleanup;
-     }
- 
-     if (restoreEncSecret) {
--        if (!(encalias = qemuDomainGetSecretAESAlias(disk->info.alias, true)))
--            goto cleanup;
-+        encalias = g_strdup_printf("%s-luks-secret0", disk->info.alias);
- 
-         if (qemuStorageSourcePrivateDataAssignSecinfo(&priv->encinfo, &encalias) < 0)
-             goto cleanup;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainGetGuestInfo-Don-t-try-to-free-a-negative-number-of-entries.patch b/SOURCES/libvirt-qemuDomainGetGuestInfo-Don-t-try-to-free-a-negative-number-of-entries.patch
deleted file mode 100644
index 677b0ad..0000000
--- a/SOURCES/libvirt-qemuDomainGetGuestInfo-Don-t-try-to-free-a-negative-number-of-entries.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From c03fef652341b4ee8969b2a0229e2ef9046a9cee Mon Sep 17 00:00:00 2001
-Message-Id: <c03fef652341b4ee8969b2a0229e2ef9046a9cee@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:35 +0100
-Subject: [PATCH] qemuDomainGetGuestInfo: Don't try to free a negative number
- of entries
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-'nfs' variable was set to -1 or -2 on agent failure. Cleanup then tried
-to free 'nfs' elements of the array which resulted into a crash.
-
-Make 'nfs' size_t and assign it only on successful agent call.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1812965
-
-Broken by commit 599ae372d8cf092
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 0fdb7385e416c9a0830dc60c0a56d55428963d74)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1812965
-Message-Id: <6eb97463bb380d32591ef82336095bf1ef370bca.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_agent.c  |  2 +-
- src/qemu/qemu_driver.c | 12 ++++++++----
- 2 files changed, 9 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index ef2d2c500b..f13126aeee 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -1954,7 +1954,7 @@ qemuAgentGetFSInfoFillDisks(virJSONValuePtr jsondisks,
-     return 0;
- }
- 
--/* Returns: 0 on success
-+/* Returns: number of entries in '@info' on success
-  *          -2 when agent command is not supported by the agent
-  *          -1 otherwise
-  */
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 8c7e90531a..0bdb2851ec 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -23101,7 +23101,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-     g_autofree char *hostname = NULL;
-     unsigned int supportedTypes = types;
-     int rc;
--    int nfs = 0;
-+    size_t nfs = 0;
-     qemuAgentFSInfoPtr *agentfsinfo = NULL;
-     size_t i;
- 
-@@ -23154,9 +23154,13 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-         }
-     }
-     if (supportedTypes & VIR_DOMAIN_GUEST_INFO_FILESYSTEM) {
--        rc = nfs = qemuAgentGetFSInfo(agent, &agentfsinfo);
--        if (rc < 0 && !(rc == -2 && types == 0))
--            goto exitagent;
-+        rc = qemuAgentGetFSInfo(agent, &agentfsinfo);
-+        if (rc < 0) {
-+            if (!(rc == -2 && types == 0))
-+                goto exitagent;
-+        } else {
-+            nfs = rc;
-+        }
-     }
- 
-     ret = 0;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainGetGuestInfo-don-t-assign-NULL-hostname.patch b/SOURCES/libvirt-qemuDomainGetGuestInfo-don-t-assign-NULL-hostname.patch
deleted file mode 100644
index 40e3ec7..0000000
--- a/SOURCES/libvirt-qemuDomainGetGuestInfo-don-t-assign-NULL-hostname.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 1e8e5094ee8112244c32704539202dd02866cfd6 Mon Sep 17 00:00:00 2001
-Message-Id: <1e8e5094ee8112244c32704539202dd02866cfd6@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:33 +0100
-Subject: [PATCH] qemuDomainGetGuestInfo: don't assign NULL hostname
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Don't rely on error check and assign hostname only when non-NULL.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 530ac288618b2f46e49f3ce86d4d89e7607ee3fe)
-https://bugzilla.redhat.com/show_bug.cgi?id=1812965
-Message-Id: <cb3528a36549edc5fdd23cb1e573e99fc43e9d15.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 05e525e935..175a1961c2 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -23254,14 +23254,14 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
-     }
-     if (supportedTypes & VIR_DOMAIN_GUEST_INFO_HOSTNAME) {
-         rc = qemuAgentGetHostname(agent, &hostname);
--        if (rc < 0 && !(rc == -2 && types == 0)) {
-+        if (rc < 0 && !(rc == -2 && types == 0))
-             goto exitagent;
--        } else {
--            if (virTypedParamsAddString(params, nparams, &maxparams, "hostname",
--                                        hostname) < 0)
--                goto exitagent;
--        }
-     }
-+
-+    if (hostname &&
-+        virTypedParamsAddString(params, nparams, &maxparams, "hostname", hostname) < 0)
-+        goto exitagent;
-+
-     if (supportedTypes & VIR_DOMAIN_GUEST_INFO_FILESYSTEM) {
-         rc = qemuAgentGetFSInfo(agent, &agentfsinfo);
-         if (rc < 0) {
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainGetSecretAESAlias-Replace-outstanding-uses-with-qemuAliasForSecret.patch b/SOURCES/libvirt-qemuDomainGetSecretAESAlias-Replace-outstanding-uses-with-qemuAliasForSecret.patch
deleted file mode 100644
index baf5d1a..0000000
--- a/SOURCES/libvirt-qemuDomainGetSecretAESAlias-Replace-outstanding-uses-with-qemuAliasForSecret.patch
+++ /dev/null
@@ -1,110 +0,0 @@
-From a3072c4077a72bf85636a7f0fe63fb40b96410f4 Mon Sep 17 00:00:00 2001
-Message-Id: <a3072c4077a72bf85636a7f0fe63fb40b96410f4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:55 +0100
-Subject: [PATCH] qemuDomainGetSecretAESAlias: Replace outstanding uses with
- qemuAliasForSecret
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are two last callers of this function. Replace them by
-qemuAliasForSecret and delete qemuDomainGetSecretAESAlias.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 43a3d2e02ed09fafa04b61815c23651b0a94ef58)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <b70522a89f40d60b92029c6c7c5d10842c175fbb.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_alias.c            | 29 -----------------------------
- src/qemu/qemu_alias.h            |  3 ---
- src/qemu/qemu_hotplug.c          |  2 +-
- src/qemu/qemu_migration_params.c |  2 +-
- 4 files changed, 2 insertions(+), 34 deletions(-)
-
-diff --git a/src/qemu/qemu_alias.c b/src/qemu/qemu_alias.c
-index 50ad054c6c..7889f16bb2 100644
---- a/src/qemu/qemu_alias.c
-+++ b/src/qemu/qemu_alias.c
-@@ -763,35 +763,6 @@ qemuDomainGetMasterKeyAlias(void)
- }
- 
- 
--/* qemuDomainGetSecretAESAlias:
-- * @srcalias: Source alias used to generate the secret alias
-- * @isLuks: True when we are generating a secret for LUKS encrypt/decrypt
-- *
-- * Generate and return an alias for the encrypted secret
-- *
-- * Returns NULL or a string containing the alias
-- */
--char *
--qemuDomainGetSecretAESAlias(const char *srcalias,
--                            bool isLuks)
--{
--    char *alias;
--
--    if (!srcalias) {
--        virReportError(VIR_ERR_INVALID_ARG, "%s",
--                       _("encrypted secret alias requires valid source alias"));
--        return NULL;
--    }
--
--    if (isLuks)
--        alias = g_strdup_printf("%s-luks-secret0", srcalias);
--    else
--        alias = g_strdup_printf("%s-secret0", srcalias);
--
--    return alias;
--}
--
--
- /* qemuAliasForSecret:
-  * @parentalias: alias of the parent object
-  * @obj: optional sub-object of the parent device the secret is for
-diff --git a/src/qemu/qemu_alias.h b/src/qemu/qemu_alias.h
-index 645956d024..490aa568a9 100644
---- a/src/qemu/qemu_alias.h
-+++ b/src/qemu/qemu_alias.h
-@@ -83,9 +83,6 @@ char *qemuAliasFromHostdev(const virDomainHostdevDef *hostdev);
- 
- char *qemuDomainGetMasterKeyAlias(void);
- 
--char *qemuDomainGetSecretAESAlias(const char *srcalias,
--                                  bool isLuks);
--
- char *qemuAliasForSecret(const char *parentalias,
-                          const char *obj);
- 
-diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
-index a473bab3e1..3ccc01f0b7 100644
---- a/src/qemu/qemu_hotplug.c
-+++ b/src/qemu/qemu_hotplug.c
-@@ -1844,7 +1844,7 @@ qemuDomainDelChardevTLSObjects(virQEMUDriverPtr driver,
-      * secret UUID and we have a serial TCP chardev, then formulate a
-      * secAlias which we'll attempt to destroy. */
-     if (cfg->chardevTLSx509secretUUID &&
--        !(secAlias = qemuDomainGetSecretAESAlias(inAlias, false)))
-+        !(secAlias = qemuAliasForSecret(inAlias, NULL)))
-         return -1;
- 
-     qemuDomainObjEnterMonitor(driver, vm);
-diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
-index 0a3b0f8741..28fb006374 100644
---- a/src/qemu/qemu_migration_params.c
-+++ b/src/qemu/qemu_migration_params.c
-@@ -1084,7 +1084,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver,
-         return;
- 
-     tlsAlias = qemuAliasTLSObjFromSrcAlias(QEMU_MIGRATION_TLS_ALIAS_BASE);
--    secAlias = qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE, false);
-+    secAlias = qemuAliasForSecret(QEMU_MIGRATION_TLS_ALIAS_BASE, NULL);
- 
-     qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias);
-     g_clear_pointer(&QEMU_DOMAIN_PRIVATE(vm)->migSecinfo, qemuDomainSecretInfoFree);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainGetStatsIOThread-Don-t-leak-array-with-0-iothreads.patch b/SOURCES/libvirt-qemuDomainGetStatsIOThread-Don-t-leak-array-with-0-iothreads.patch
deleted file mode 100644
index 9b92a10..0000000
--- a/SOURCES/libvirt-qemuDomainGetStatsIOThread-Don-t-leak-array-with-0-iothreads.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 388611da8330fb19693caf927680e9af08d5738e Mon Sep 17 00:00:00 2001
-Message-Id: <388611da8330fb19693caf927680e9af08d5738e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:27 +0100
-Subject: [PATCH] qemuDomainGetStatsIOThread: Don't leak array with 0 iothreads
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-qemuMonitorGetIOThreads returns a NULL-terminated list even when 0
-iothreads are present. The caller didn't perform cleanup if there were 0
-iothreads leaking the array.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804548
-
-Fixes: d1eac92784573559b6fd56836e33b215c89308e3
-Reported-by: Jing Yan <jiyan@redhat.com>
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9bf9e0ae6af38c806f4672ca7b12a6b38d5a9581)
-Message-Id: <eef614566ad383a1393a295caa6e2550381eb3e7.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index af81c4a6e4..69e4f7264b 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -21532,8 +21532,12 @@ qemuDomainGetStatsIOThread(virQEMUDriverPtr driver,
-     if ((niothreads = qemuDomainGetIOThreadsMon(driver, dom, &iothreads)) < 0)
-         return -1;
- 
--    if (niothreads == 0)
--        return 0;
-+    /* qemuDomainGetIOThreadsMon returns a NULL-terminated list, so we must free
-+     * it even if it returns 0 */
-+    if (niothreads == 0) {
-+        ret = 0;
-+        goto cleanup;
-+    }
- 
-     if (virTypedParamListAddUInt(params, niothreads, "iothread.count") < 0)
-         goto cleanup;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuDomainSaveImageStartVM-Use-VIR_AUTOCLOSE-for-intermediatefd.patch b/SOURCES/libvirt-qemuDomainSaveImageStartVM-Use-VIR_AUTOCLOSE-for-intermediatefd.patch
deleted file mode 100644
index c29aa79..0000000
--- a/SOURCES/libvirt-qemuDomainSaveImageStartVM-Use-VIR_AUTOCLOSE-for-intermediatefd.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 6442aa5565de857371a7076c56ced84fbea0ec66 Mon Sep 17 00:00:00 2001
-Message-Id: <6442aa5565de857371a7076c56ced84fbea0ec66@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Thu, 16 Jan 2020 10:03:51 +0100
-Subject: [PATCH] qemuDomainSaveImageStartVM: Use VIR_AUTOCLOSE for
- @intermediatefd
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1718707
-
-(cherry picked from commit 1c16f261d0764ff70fb33ece4367f25e741cdb74)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <f181efbc202853298ca06eecf78e7dad1063dc16.1579165329.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index d6b1e9f00c..9de5bc6a32 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -6803,7 +6803,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-     int ret = -1;
-     bool restored = false;
-     virObjectEventPtr event;
--    int intermediatefd = -1;
-+    VIR_AUTOCLOSE intermediatefd = -1;
-     virCommandPtr cmd = NULL;
-     g_autofree char *errbuf = NULL;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-@@ -6829,6 +6829,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
- 
-         if (virCommandRunAsync(cmd, NULL) < 0) {
-             *fd = intermediatefd;
-+            intermediatefd = -1;
-             goto cleanup;
-         }
-     }
-@@ -6872,8 +6873,6 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
- 
-         virErrorRestore(&orig_err);
-     }
--    VIR_FORCE_CLOSE(intermediatefd);
--
-     if (VIR_CLOSE(*fd) < 0) {
-         virReportSystemError(errno, _("cannot close file: %s"), path);
-         restored = false;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuDomainSaveImageStartVM-Use-g_autoptr-for-virCommand.patch b/SOURCES/libvirt-qemuDomainSaveImageStartVM-Use-g_autoptr-for-virCommand.patch
deleted file mode 100644
index 3ef3c35..0000000
--- a/SOURCES/libvirt-qemuDomainSaveImageStartVM-Use-g_autoptr-for-virCommand.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 09776b6ac6421a03fe2ff72eb6146a9ca0119259 Mon Sep 17 00:00:00 2001
-Message-Id: <09776b6ac6421a03fe2ff72eb6146a9ca0119259@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Thu, 16 Jan 2020 10:03:52 +0100
-Subject: [PATCH] qemuDomainSaveImageStartVM: Use g_autoptr() for virCommand
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1718707
-
-(cherry picked from commit 82e127e34350dc0ed908611a3b2a4fbd78ad9903)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <5d41d06ee27842659082e67dd6abf40c3c59ae5d.1579165329.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 9de5bc6a32..e1c0550b9a 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -6804,7 +6804,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
-     bool restored = false;
-     virObjectEventPtr event;
-     VIR_AUTOCLOSE intermediatefd = -1;
--    virCommandPtr cmd = NULL;
-+    g_autoptr(virCommand) cmd = NULL;
-     g_autofree char *errbuf = NULL;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
-     virQEMUSaveHeaderPtr header = &data->header;
-@@ -6920,7 +6920,6 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
- 
-  cleanup:
-     virObjectUnref(cookie);
--    virCommandFree(cmd);
-     if (qemuSecurityRestoreSavedStateLabel(driver, vm, path) < 0)
-         VIR_WARN("failed to restore save state label on %s", path);
-     return ret;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuDomainSecretAESSetup-Allocate-and-return-secinfo-here.patch b/SOURCES/libvirt-qemuDomainSecretAESSetup-Allocate-and-return-secinfo-here.patch
deleted file mode 100644
index 335c90c..0000000
--- a/SOURCES/libvirt-qemuDomainSecretAESSetup-Allocate-and-return-secinfo-here.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From fe42b8bb2e4a456a5b2297313f3859221013fdfc Mon Sep 17 00:00:00 2001
-Message-Id: <fe42b8bb2e4a456a5b2297313f3859221013fdfc@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:46 +0100
-Subject: [PATCH] qemuDomainSecretAESSetup: Allocate and return 'secinfo' here
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Rather than passing in an empty qemuDomainSecretInfoPtr allocate it
-in this function and return it. This is done by absorbing the check from
-qemuDomainSecretInfoNew and removing the internals of
-qemuDomainSecretInfoNew.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit bad8637892ae8fc310b252651876738ca4fdee0d)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <94071336dbc97ed64a1a5dcbb82da32e5199f117.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 53 ++++++++++++++++++------------------------
- 1 file changed, 22 insertions(+), 31 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index b26187659e..37e361b1f4 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1529,21 +1529,20 @@ qemuDomainSecretPlainSetup(qemuDomainSecretInfoPtr secinfo,
-  * @seclookupdef: Pointer to seclookupdef data
-  * @isLuks: True/False for is for luks (alias generation)
-  *
-- * Taking a secinfo, fill in the AES specific information using the
-+ * Encrypts a secret looked up via @seclookupdef for use with qemu.
-  *
-- * Returns 0 on success, -1 on failure with error message
-+ * Returns qemuDomainSecretInfoPtr filled with the necessary information.
-  */
--static int
-+static qemuDomainSecretInfoPtr
- qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
--                         qemuDomainSecretInfoPtr secinfo,
-                          const char *srcalias,
-                          virSecretUsageType usageType,
-                          const char *username,
-                          virSecretLookupTypeDefPtr seclookupdef,
-                          bool isLuks)
- {
-+    g_autoptr(qemuDomainSecretInfo) secinfo = NULL;
-     g_autoptr(virConnect) conn = virGetConnectSecret();
--    int ret = -1;
-     g_autofree uint8_t *raw_iv = NULL;
-     size_t ivlen = QEMU_DOMAIN_AES_IV_LEN;
-     uint8_t *secret = NULL;
-@@ -1552,19 +1551,27 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     size_t ciphertextlen = 0;
- 
-     if (!conn)
--        return -1;
-+        return NULL;
-+
-+    if (!qemuDomainSupportsEncryptedSecret(priv)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                       _("encrypted secrets are not supported"));
-+        return NULL;
-+    }
-+
-+    secinfo = g_new0(qemuDomainSecretInfo, 1);
- 
-     secinfo->type = VIR_DOMAIN_SECRET_INFO_TYPE_AES;
-     secinfo->s.aes.username = g_strdup(username);
- 
-     if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks)))
--        return -1;
-+        return NULL;
- 
-     raw_iv = g_new0(uint8_t, ivlen);
- 
-     /* Create a random initialization vector */
-     if (virRandomBytes(raw_iv, ivlen) < 0)
--        return -1;
-+        return NULL;
- 
-     /* Encode the IV and save that since qemu will need it */
-     secinfo->s.aes.iv = g_base64_encode(raw_iv, ivlen);
-@@ -1572,13 +1579,13 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     /* Grab the unencoded secret */
-     if (virSecretGetSecretString(conn, seclookupdef, usageType,
-                                  &secret, &secretlen) < 0)
--        goto cleanup;
-+        goto error;
- 
-     if (virCryptoEncryptData(VIR_CRYPTO_CIPHER_AES256CBC,
-                              priv->masterKey, QEMU_DOMAIN_MASTER_KEY_LEN,
-                              raw_iv, ivlen, secret, secretlen,
-                              &ciphertext, &ciphertextlen) < 0)
--        goto cleanup;
-+        goto error;
- 
-     /* Clear out the secret */
-     memset(secret, 0, secretlen);
-@@ -1587,11 +1594,11 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     secinfo->s.aes.ciphertext = g_base64_encode(ciphertext,
-                                                 ciphertextlen);
- 
--    ret = 0;
-+    return g_steal_pointer(&secinfo);
- 
-- cleanup:
-+ error:
-     VIR_DISPOSE_N(secret, secretlen);
--    return ret;
-+    return NULL;
- }
- 
- 
-@@ -1663,24 +1670,8 @@ qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv,
-                         virSecretLookupTypeDefPtr lookupDef,
-                         bool isLuks)
- {
--    qemuDomainSecretInfoPtr secinfo = NULL;
--
--    if (!qemuDomainSupportsEncryptedSecret(priv)) {
--        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
--                       _("encrypted secrets are not supported"));
--        return NULL;
--    }
--
--    if (VIR_ALLOC(secinfo) < 0)
--        return NULL;
--
--    if (qemuDomainSecretAESSetup(priv, secinfo, srcAlias, usageType, username,
--                                 lookupDef, isLuks) < 0) {
--        g_clear_pointer(&secinfo, qemuDomainSecretInfoFree);
--        return NULL;
--    }
--
--    return secinfo;
-+    return qemuDomainSecretAESSetup(priv, srcAlias, usageType, username,
-+                                    lookupDef, isLuks);
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretAESSetup-Automatically-free-non-secret-locals.patch b/SOURCES/libvirt-qemuDomainSecretAESSetup-Automatically-free-non-secret-locals.patch
deleted file mode 100644
index 89984ae..0000000
--- a/SOURCES/libvirt-qemuDomainSecretAESSetup-Automatically-free-non-secret-locals.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 044e5a7db716235c167f76974d4bd7566248cf9a Mon Sep 17 00:00:00 2001
-Message-Id: <044e5a7db716235c167f76974d4bd7566248cf9a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:45 +0100
-Subject: [PATCH] qemuDomainSecretAESSetup: Automatically free non-secret
- locals
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use g_autofree for the ciphertext and init vector as they are not
-secret and thus don't have to be cleared and use g_new0 to allocate the
-iv for parity.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 88126d5f0ec3899dbc3bc223d120de159ded9dca)
-
- Conflicts:
-    src/qemu/qemu_domain.c:
-    20fa2bc6e52e01feaf39d12d38bcf8eaec4c9a46 was not backported
-    and thus this patch also effectively backports the modification
-    the patch mentioned above did to qemuDomainSecretAESSetup as it
-    would not result in a clean backport.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <6d4512020332b977f8de5843469e0d030f4f65d3.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 17 ++++++-----------
- 1 file changed, 6 insertions(+), 11 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index b77488026a..b26187659e 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1542,16 +1542,15 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-                          virSecretLookupTypeDefPtr seclookupdef,
-                          bool isLuks)
- {
--    virConnectPtr conn;
-+    g_autoptr(virConnect) conn = virGetConnectSecret();
-     int ret = -1;
--    uint8_t *raw_iv = NULL;
-+    g_autofree uint8_t *raw_iv = NULL;
-     size_t ivlen = QEMU_DOMAIN_AES_IV_LEN;
-     uint8_t *secret = NULL;
-     size_t secretlen = 0;
--    uint8_t *ciphertext = NULL;
-+    g_autofree uint8_t *ciphertext = NULL;
-     size_t ciphertextlen = 0;
- 
--    conn = virGetConnectSecret();
-     if (!conn)
-         return -1;
- 
-@@ -1559,14 +1558,13 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     secinfo->s.aes.username = g_strdup(username);
- 
-     if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks)))
--        goto cleanup;
-+        return -1;
- 
--    if (VIR_ALLOC_N(raw_iv, ivlen) < 0)
--        goto cleanup;
-+    raw_iv = g_new0(uint8_t, ivlen);
- 
-     /* Create a random initialization vector */
-     if (virRandomBytes(raw_iv, ivlen) < 0)
--        goto cleanup;
-+        return -1;
- 
-     /* Encode the IV and save that since qemu will need it */
-     secinfo->s.aes.iv = g_base64_encode(raw_iv, ivlen);
-@@ -1592,10 +1590,7 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     ret = 0;
- 
-  cleanup:
--    VIR_DISPOSE_N(raw_iv, ivlen);
-     VIR_DISPOSE_N(secret, secretlen);
--    VIR_DISPOSE_N(ciphertext, ciphertextlen);
--    virObjectUnref(conn);
-     return ret;
- }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretAESSetup-Split-out-lookup-of-secret-data.patch b/SOURCES/libvirt-qemuDomainSecretAESSetup-Split-out-lookup-of-secret-data.patch
deleted file mode 100644
index 03eed00..0000000
--- a/SOURCES/libvirt-qemuDomainSecretAESSetup-Split-out-lookup-of-secret-data.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From 881121d506d6482d4bdbf557994f31d6eb55af3f Mon Sep 17 00:00:00 2001
-Message-Id: <881121d506d6482d4bdbf557994f31d6eb55af3f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:47 +0100
-Subject: [PATCH] qemuDomainSecretAESSetup: Split out lookup of secret data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Split out the lookup of the secret from the secret driver into
-qemuDomainSecretAESSetupFromSecret so that we can also instantiate
-secret objects in qemu with data from other sources.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 88663e59ef62346cdea7e260c5d598c2e738c674)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <159609ccfe0ca42a20409e83f3f0d521113d8938.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 87 ++++++++++++++++++++++++++----------------
- 1 file changed, 54 insertions(+), 33 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 37e361b1f4..c286f50650 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1522,37 +1522,28 @@ qemuDomainSecretPlainSetup(qemuDomainSecretInfoPtr secinfo,
- 
- /* qemuDomainSecretAESSetup:
-  * @priv: pointer to domain private object
-- * @secinfo: Pointer to secret info
-- * @srcalias: Alias of the disk/hostdev used to generate the secret alias
-- * @usageType: The virSecretUsageType
-- * @username: username to use for authentication (may be NULL)
-- * @seclookupdef: Pointer to seclookupdef data
-- * @isLuks: True/False for is for luks (alias generation)
-+ * @alias: alias of the secret
-+ * @username: username to use (may be NULL)
-+ * @secret: secret data
-+ * @secretlen: length of @secret
-  *
-- * Encrypts a secret looked up via @seclookupdef for use with qemu.
-+ * Encrypts @secret for use with qemu.
-  *
-  * Returns qemuDomainSecretInfoPtr filled with the necessary information.
-  */
- static qemuDomainSecretInfoPtr
- qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
--                         const char *srcalias,
--                         virSecretUsageType usageType,
-+                         const char *alias,
-                          const char *username,
--                         virSecretLookupTypeDefPtr seclookupdef,
--                         bool isLuks)
-+                         uint8_t *secret,
-+                         size_t secretlen)
- {
-     g_autoptr(qemuDomainSecretInfo) secinfo = NULL;
--    g_autoptr(virConnect) conn = virGetConnectSecret();
-     g_autofree uint8_t *raw_iv = NULL;
-     size_t ivlen = QEMU_DOMAIN_AES_IV_LEN;
--    uint8_t *secret = NULL;
--    size_t secretlen = 0;
-     g_autofree uint8_t *ciphertext = NULL;
-     size_t ciphertextlen = 0;
- 
--    if (!conn)
--        return NULL;
--
-     if (!qemuDomainSupportsEncryptedSecret(priv)) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                        _("encrypted secrets are not supported"));
-@@ -1562,11 +1553,9 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     secinfo = g_new0(qemuDomainSecretInfo, 1);
- 
-     secinfo->type = VIR_DOMAIN_SECRET_INFO_TYPE_AES;
-+    secinfo->s.aes.alias = g_strdup(alias);
-     secinfo->s.aes.username = g_strdup(username);
- 
--    if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks)))
--        return NULL;
--
-     raw_iv = g_new0(uint8_t, ivlen);
- 
-     /* Create a random initialization vector */
-@@ -1576,29 +1565,61 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-     /* Encode the IV and save that since qemu will need it */
-     secinfo->s.aes.iv = g_base64_encode(raw_iv, ivlen);
- 
--    /* Grab the unencoded secret */
--    if (virSecretGetSecretString(conn, seclookupdef, usageType,
--                                 &secret, &secretlen) < 0)
--        goto error;
--
-     if (virCryptoEncryptData(VIR_CRYPTO_CIPHER_AES256CBC,
-                              priv->masterKey, QEMU_DOMAIN_MASTER_KEY_LEN,
-                              raw_iv, ivlen, secret, secretlen,
-                              &ciphertext, &ciphertextlen) < 0)
--        goto error;
--
--    /* Clear out the secret */
--    memset(secret, 0, secretlen);
-+        return NULL;
- 
-     /* Now encode the ciphertext and store to be passed to qemu */
-     secinfo->s.aes.ciphertext = g_base64_encode(ciphertext,
-                                                 ciphertextlen);
- 
-     return g_steal_pointer(&secinfo);
-+}
-+
-+
-+/**
-+ * qemuDomainSecretAESSetupFromSecret:
-+ * @priv: pointer to domain private object
-+ * @srcalias: Alias of the disk/hostdev used to generate the secret alias
-+ * @usageType: The virSecretUsageType
-+ * @username: username to use for authentication (may be NULL)
-+ * @seclookupdef: Pointer to seclookupdef data
-+ * @isLuks: True/False for is for luks (alias generation)
-+ *
-+ * Looks up a secret in the secret driver based on @usageType and @seclookupdef
-+ * and builds qemuDomainSecretInfoPtr from it.
-+ */
-+static qemuDomainSecretInfoPtr
-+qemuDomainSecretAESSetupFromSecret(qemuDomainObjPrivatePtr priv,
-+                                   const char *srcalias,
-+                                   virSecretUsageType usageType,
-+                                   const char *username,
-+                                   virSecretLookupTypeDefPtr seclookupdef,
-+                                   bool isLuks)
-+{
-+    g_autoptr(virConnect) conn = virGetConnectSecret();
-+    qemuDomainSecretInfoPtr secinfo;
-+    g_autofree char *alias = NULL;
-+    uint8_t *secret = NULL;
-+    size_t secretlen = 0;
-+
-+    if (!conn)
-+        return NULL;
-+
-+    if (!(alias = qemuDomainGetSecretAESAlias(srcalias, isLuks)))
-+        return NULL;
-+
-+    if (virSecretGetSecretString(conn, seclookupdef, usageType,
-+                                 &secret, &secretlen) < 0)
-+        return NULL;
-+
-+    secinfo = qemuDomainSecretAESSetup(priv, alias, username, secret, secretlen);
- 
-- error:
-     VIR_DISPOSE_N(secret, secretlen);
--    return NULL;
-+
-+    return secinfo;
- }
- 
- 
-@@ -1670,8 +1691,8 @@ qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv,
-                         virSecretLookupTypeDefPtr lookupDef,
-                         bool isLuks)
- {
--    return qemuDomainSecretAESSetup(priv, srcAlias, usageType, username,
--                                    lookupDef, isLuks);
-+    return qemuDomainSecretAESSetupFromSecret(priv, srcAlias, usageType, username,
-+                                              lookupDef, isLuks);
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretAESSetupFromSecret-Use-qemuAliasForSecret.patch b/SOURCES/libvirt-qemuDomainSecretAESSetupFromSecret-Use-qemuAliasForSecret.patch
deleted file mode 100644
index 2aba2b0..0000000
--- a/SOURCES/libvirt-qemuDomainSecretAESSetupFromSecret-Use-qemuAliasForSecret.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 055d76ce856aecab3dfe3106429c926df405143b Mon Sep 17 00:00:00 2001
-Message-Id: <055d76ce856aecab3dfe3106429c926df405143b@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:53 +0100
-Subject: [PATCH] qemuDomainSecretAESSetupFromSecret: Use 'qemuAliasForSecret'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Replace qemuDomainGetSecretAESAlias by the new function so that we can
-reuse qemuDomainSecretAESSetupFromSecret also for setting up other kinds
-of objects.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 86fecaedf556dbd4d32efe28638c811be0e595d3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <88a582c0e5b8a73dd88f6872530c80b404149fb3.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 30 ++++++++++++++----------------
- 1 file changed, 14 insertions(+), 16 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 0047a1d316..3599e0c9aa 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1583,34 +1583,32 @@ qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv,
-  * qemuDomainSecretAESSetupFromSecret:
-  * @priv: pointer to domain private object
-  * @srcalias: Alias of the disk/hostdev used to generate the secret alias
-+ * @secretuse: specific usage for the secret (may be NULL if main object is using it)
-  * @usageType: The virSecretUsageType
-  * @username: username to use for authentication (may be NULL)
-  * @seclookupdef: Pointer to seclookupdef data
-- * @isLuks: True/False for is for luks (alias generation)
-  *
-  * Looks up a secret in the secret driver based on @usageType and @seclookupdef
-- * and builds qemuDomainSecretInfoPtr from it.
-+ * and builds qemuDomainSecretInfoPtr from it. @use describes the usage of the
-+ * secret in case if @srcalias requires more secrets for various usage cases.
-  */
- static qemuDomainSecretInfoPtr
- qemuDomainSecretAESSetupFromSecret(qemuDomainObjPrivatePtr priv,
-                                    const char *srcalias,
-+                                   const char *secretuse,
-                                    virSecretUsageType usageType,
-                                    const char *username,
--                                   virSecretLookupTypeDefPtr seclookupdef,
--                                   bool isLuks)
-+                                   virSecretLookupTypeDefPtr seclookupdef)
- {
-     g_autoptr(virConnect) conn = virGetConnectSecret();
-     qemuDomainSecretInfoPtr secinfo;
--    g_autofree char *alias = NULL;
-+    g_autofree char *alias = qemuAliasForSecret(srcalias, secretuse);
-     uint8_t *secret = NULL;
-     size_t secretlen = 0;
- 
-     if (!conn)
-         return NULL;
- 
--    if (!(alias = qemuDomainGetSecretAESAlias(srcalias, isLuks)))
--        return NULL;
--
-     if (virSecretGetSecretString(conn, seclookupdef, usageType,
-                                  &secret, &secretlen) < 0)
-         return NULL;
-@@ -1695,9 +1693,9 @@ qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv,
-     }
-     seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
- 
--    return qemuDomainSecretAESSetupFromSecret(priv, srcAlias,
-+    return qemuDomainSecretAESSetupFromSecret(priv, srcAlias, NULL,
-                                               VIR_SECRET_USAGE_TYPE_TLS,
--                                              NULL, &seclookupdef, false);
-+                                              NULL, &seclookupdef);
- }
- 
- 
-@@ -1788,10 +1786,10 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-                                                             &src->auth->seclookupdef);
-         } else {
-             srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, aliasprotocol,
-+                                                                  NULL,
-                                                                   usageType,
-                                                                   src->auth->username,
--                                                                  &src->auth->seclookupdef,
--                                                                  false);
-+                                                                  &src->auth->seclookupdef);
-         }
- 
-         if (!srcPriv->secinfo)
-@@ -1800,10 +1798,10 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
- 
-     if (hasEnc) {
-         if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, aliasformat,
-+                                                                    "luks",
-                                                                     VIR_SECRET_USAGE_TYPE_VOLUME,
-                                                                     NULL,
--                                                                    &src->encryption->secrets[0]->seclookupdef,
--                                                                    true)))
-+                                                                    &src->encryption->secrets[0]->seclookupdef)))
-               return -1;
-     }
- 
-@@ -1864,10 +1862,10 @@ qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv,
-             } else {
-                 srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv,
-                                                                       hostdev->info->alias,
-+                                                                      NULL,
-                                                                       usageType,
-                                                                       src->auth->username,
--                                                                      &src->auth->seclookupdef,
--                                                                      false);
-+                                                                      &src->auth->seclookupdef);
-             }
- 
-             if (!srcPriv->secinfo)
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretInfo-Register-autoptr-cleanup-function.patch b/SOURCES/libvirt-qemuDomainSecretInfo-Register-autoptr-cleanup-function.patch
deleted file mode 100644
index 48eacaa..0000000
--- a/SOURCES/libvirt-qemuDomainSecretInfo-Register-autoptr-cleanup-function.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 865a4770a5145a0df11a42bb0efc7e72e862a236 Mon Sep 17 00:00:00 2001
-Message-Id: <865a4770a5145a0df11a42bb0efc7e72e862a236@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:44 +0100
-Subject: [PATCH] qemuDomainSecretInfo: Register autoptr cleanup function
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b544481a91e6f3ee0e7534e0fc3d2cfb3bb60dba)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <f8b983d058091e9cd0631589334d72a1ecc1ec7d.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
-index 89a967efd7..bd9ac85ae2 100644
---- a/src/qemu/qemu_domain.h
-+++ b/src/qemu/qemu_domain.h
-@@ -1035,6 +1035,8 @@ bool qemuDomainSupportsEncryptedSecret(qemuDomainObjPrivatePtr priv);
- void qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr secinfo)
-     ATTRIBUTE_NONNULL(1);
- 
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuDomainSecretInfo, qemuDomainSecretInfoFree);
-+
- void qemuDomainSecretInfoDestroy(qemuDomainSecretInfoPtr secinfo);
- 
- void qemuDomainSecretDiskDestroy(virDomainDiskDefPtr disk)
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Change-aliases-for-disk-secrets.patch b/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Change-aliases-for-disk-secrets.patch
deleted file mode 100644
index 66eaa43..0000000
--- a/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Change-aliases-for-disk-secrets.patch
+++ /dev/null
@@ -1,640 +0,0 @@
-From 753a2f4071eadeed34e92c9b3b98423ae33fbfad Mon Sep 17 00:00:00 2001
-Message-Id: <753a2f4071eadeed34e92c9b3b98423ae33fbfad@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:54 +0100
-Subject: [PATCH] qemuDomainSecretStorageSourcePrepare: Change aliases for disk
- secrets
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Originally there was only the secret for authentication so we didn't use
-any suffix to tell it apart. With the introduction of encryption we
-added a 'luks' suffix for the encryption secrets. Since encryption is
-really generic and authentication is not the only secret modify the
-aliases for the secrets to better describe what they are used for.
-
-This is possible as we store the disk secrets in the status XML thus
-only new machines will use the new secrets.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 70d2758a9cee795b26563fe33b38a2396efa2324)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <ca3a038969c81a17495add50a445901d5e42de5a.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c                        |  4 +--
- ...-backing-chains-noindex.x86_64-2.12.0.args |  4 +--
- ...-backing-chains-noindex.x86_64-latest.args |  6 ++--
- ...sk-hostdev-scsi-virtio-iscsi-auth-AES.args |  6 ++--
- .../disk-network-iscsi.x86_64-2.12.0.args     | 12 +++----
- .../disk-network-iscsi.x86_64-latest.args     |  8 ++---
- .../disk-network-rbd.x86_64-2.12.0.args       |  4 +--
- .../disk-network-rbd.x86_64-latest.args       |  4 +--
- ...isk-network-source-auth.x86_64-2.12.0.args | 10 +++---
- ...isk-network-source-auth.x86_64-latest.args |  8 ++---
- .../disk-nvme.x86_64-latest.args              |  4 +--
- .../encrypted-disk-usage.args                 |  4 +--
- tests/qemuxml2argvdata/encrypted-disk.args    |  4 +--
- .../luks-disks-source-qcow2.args              | 24 +++++++-------
- ...luks-disks-source-qcow2.x86_64-latest.args | 32 +++++++++----------
- tests/qemuxml2argvdata/luks-disks-source.args | 26 ++++++++-------
- tests/qemuxml2argvdata/luks-disks.args        | 10 +++---
- tests/qemuxml2argvdata/user-aliases.args      |  4 +--
- 18 files changed, 90 insertions(+), 84 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 3599e0c9aa..65df463acc 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1786,7 +1786,7 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-                                                             &src->auth->seclookupdef);
-         } else {
-             srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, aliasprotocol,
--                                                                  NULL,
-+                                                                  "auth",
-                                                                   usageType,
-                                                                   src->auth->username,
-                                                                   &src->auth->seclookupdef);
-@@ -1798,7 +1798,7 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
- 
-     if (hasEnc) {
-         if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, aliasformat,
--                                                                    "luks",
-+                                                                    "encryption",
-                                                                     VIR_SECRET_USAGE_TYPE_VOLUME,
-                                                                     NULL,
-                                                                     &src->encryption->secrets[0]->seclookupdef)))
-diff --git a/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-2.12.0.args b/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-2.12.0.args
-index a8675debd5..47691339d6 100644
---- a/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-2.12.0.args
-+++ b/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-2.12.0.args
-@@ -39,12 +39,12 @@ id=virtio-disk1 \
- if=none,id=drive-virtio-disk2 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk2,\
- id=virtio-disk2 \
---object secret,id=virtio-disk3-secret0,\
-+-object secret,id=virtio-disk3-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive 'file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\
- mon_host=mon1.example.org\:6321\;mon2.example.org\:6322\;mon3.example.org\:\
--6322,file.password-secret=virtio-disk3-secret0,format=qcow2,if=none,\
-+6322,file.password-secret=virtio-disk3-auth-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk3' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk3,\
- id=virtio-disk3 \
-diff --git a/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args b/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args
-index 4108943574..23ceb0aa48 100644
---- a/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-backing-chains-noindex.x86_64-latest.args
-@@ -80,15 +80,15 @@ id=virtio-disk2 \
- "node-name":"libvirt-15-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-15-format","read-only":true,"driver":"qcow2",\
- "file":"libvirt-15-storage","backing":null}' \
---object secret,id=libvirt-14-storage-secret0,\
-+-object secret,id=libvirt-14-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"rbd","pool":"pool","image":"image",\
- "server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
- "port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
- "auth-client-required":["cephx","none"],\
--"key-secret":"libvirt-14-storage-secret0","node-name":"libvirt-14-storage",\
--"auto-read-only":true,"discard":"unmap"}' \
-+"key-secret":"libvirt-14-storage-auth-secret0",\
-+"node-name":"libvirt-14-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-14-format","read-only":false,"driver":"qcow2",\
- "file":"libvirt-14-storage","backing":"libvirt-15-format"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-14-format,\
-diff --git a/tests/qemuxml2argvdata/disk-hostdev-scsi-virtio-iscsi-auth-AES.args b/tests/qemuxml2argvdata/disk-hostdev-scsi-virtio-iscsi-auth-AES.args
-index aece52dad2..47b014aacc 100644
---- a/tests/qemuxml2argvdata/disk-hostdev-scsi-virtio-iscsi-auth-AES.args
-+++ b/tests/qemuxml2argvdata/disk-hostdev-scsi-virtio-iscsi-auth-AES.args
-@@ -28,13 +28,13 @@ server,nowait \
- -no-acpi \
- -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x3 \
- -usb \
---object secret,id=virtio-disk0-secret0,\
-+-object secret,id=virtio-disk0-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file.driver=iscsi,file.portal=example.org:6000,\
- file.target=iqn.1992-01.com.example:storage,file.lun=1,file.transport=tcp,\
--file.user=myname,file.password-secret=virtio-disk0-secret0,format=raw,if=none,\
--id=drive-virtio-disk0 \
-+file.user=myname,file.password-secret=virtio-disk0-auth-secret0,format=raw,\
-+if=none,id=drive-virtio-disk0 \
- -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
- -object secret,id=hostdev0-secret0,\
-diff --git a/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-2.12.0.args b/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-2.12.0.args
-index 55347521da..930d8d5db2 100644
---- a/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-2.12.0.args
-+++ b/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-2.12.0.args
-@@ -38,22 +38,22 @@ file.target=iqn.1992-01.com.example,file.lun=1,file.transport=tcp,format=raw,\
- if=none,id=drive-virtio-disk1 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk1,\
- id=virtio-disk1 \
---object secret,id=virtio-disk2-secret0,\
-+-object secret,id=virtio-disk2-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file.driver=iscsi,file.portal=example.org:6000,\
- file.target=iqn.1992-01.com.example:storage,file.lun=1,file.transport=tcp,\
--file.user=myname,file.password-secret=virtio-disk2-secret0,format=raw,if=none,\
--id=drive-virtio-disk2 \
-+file.user=myname,file.password-secret=virtio-disk2-auth-secret0,format=raw,\
-+if=none,id=drive-virtio-disk2 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk2,\
- id=virtio-disk2 \
---object secret,id=virtio-disk3-secret0,\
-+-object secret,id=virtio-disk3-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file.driver=iscsi,file.portal=example.org:6000,\
- file.target=iqn.1992-01.com.example:storage,file.lun=2,file.transport=tcp,\
--file.user=myname,file.password-secret=virtio-disk3-secret0,format=raw,if=none,\
--id=drive-virtio-disk3 \
-+file.user=myname,file.password-secret=virtio-disk3-auth-secret0,format=raw,\
-+if=none,id=drive-virtio-disk3 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk3,\
- id=virtio-disk3 \
- -drive file.driver=iscsi,file.portal=example.org:3260,\
-diff --git a/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-latest.args
-index 8831db6622..1cb2f369f6 100644
---- a/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-iscsi.x86_64-latest.args
-@@ -42,23 +42,23 @@ id=virtio-disk0,bootindex=1 \
- "file":"libvirt-4-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-4-format,\
- id=virtio-disk1 \
---object secret,id=libvirt-3-storage-secret0,\
-+-object secret,id=libvirt-3-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"iscsi","portal":"example.org:6000",\
- "target":"iqn.1992-01.com.example:storage","lun":1,"transport":"tcp",\
--"user":"myname","password-secret":"libvirt-3-storage-secret0",\
-+"user":"myname","password-secret":"libvirt-3-storage-auth-secret0",\
- "node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw",\
- "file":"libvirt-3-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-3-format,\
- id=virtio-disk2 \
---object secret,id=libvirt-2-storage-secret0,\
-+-object secret,id=libvirt-2-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"iscsi","portal":"example.org:6000",\
- "target":"iqn.1992-01.com.example:storage","lun":2,"transport":"tcp",\
--"user":"myname","password-secret":"libvirt-2-storage-secret0",\
-+"user":"myname","password-secret":"libvirt-2-storage-auth-secret0",\
- "node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw",\
- "file":"libvirt-2-storage"}' \
-diff --git a/tests/qemuxml2argvdata/disk-network-rbd.x86_64-2.12.0.args b/tests/qemuxml2argvdata/disk-network-rbd.x86_64-2.12.0.args
-index 18cb534552..21d1c2deba 100644
---- a/tests/qemuxml2argvdata/disk-network-rbd.x86_64-2.12.0.args
-+++ b/tests/qemuxml2argvdata/disk-network-rbd.x86_64-2.12.0.args
-@@ -45,12 +45,12 @@ id=virtio-disk2 \
- format=raw,if=none,id=drive-virtio-disk3 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk3,\
- id=virtio-disk3 \
---object secret,id=virtio-disk4-secret0,\
-+-object secret,id=virtio-disk4-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive 'file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\
- mon_host=mon1.example.org\:6321\;mon2.example.org\:6322\;mon3.example.org\:\
--6322,file.password-secret=virtio-disk4-secret0,format=raw,if=none,\
-+6322,file.password-secret=virtio-disk4-auth-secret0,format=raw,if=none,\
- id=drive-virtio-disk4' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk4,\
- id=virtio-disk4 \
-diff --git a/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args
-index 2d05e63cd2..4c26dad497 100644
---- a/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-rbd.x86_64-latest.args
-@@ -56,14 +56,14 @@ id=virtio-disk2 \
- "file":"libvirt-3-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-3-format,\
- id=virtio-disk3 \
---object secret,id=libvirt-2-storage-secret0,\
-+-object secret,id=libvirt-2-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"rbd","pool":"pool","image":"image",\
- "server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
- "port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
- "auth-client-required":["cephx","none"],\
--"key-secret":"libvirt-2-storage-secret0","node-name":"libvirt-2-storage",\
-+"key-secret":"libvirt-2-storage-auth-secret0","node-name":"libvirt-2-storage",\
- "auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw",\
- "file":"libvirt-2-storage"}' \
-diff --git a/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-2.12.0.args b/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-2.12.0.args
-index f34c6b678d..279d5c73ec 100644
---- a/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-2.12.0.args
-+++ b/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-2.12.0.args
-@@ -27,21 +27,21 @@ 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 \
---object secret,id=virtio-disk0-secret0,\
-+-object secret,id=virtio-disk0-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file.driver=iscsi,file.portal=example.org:6000,\
- file.target=iqn.1992-01.com.example:storage,file.lun=1,file.transport=tcp,\
--file.user=myname,file.password-secret=virtio-disk0-secret0,format=raw,if=none,\
--id=drive-virtio-disk0 \
-+file.user=myname,file.password-secret=virtio-disk0-auth-secret0,format=raw,\
-+if=none,id=drive-virtio-disk0 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
---object secret,id=virtio-disk1-secret0,\
-+-object secret,id=virtio-disk1-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive 'file=rbd:pool/image:id=myname:auth_supported=cephx\;none:\
- mon_host=mon1.example.org\:6321\;mon2.example.org\:6322\;mon3.example.org\:\
--6322,file.password-secret=virtio-disk1-secret0,format=raw,if=none,\
-+6322,file.password-secret=virtio-disk1-auth-secret0,format=raw,if=none,\
- id=drive-virtio-disk1' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=drive-virtio-disk1,\
- id=virtio-disk1 \
-diff --git a/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args
-index 057cd97273..182c8ab883 100644
---- a/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-source-auth.x86_64-latest.args
-@@ -27,25 +27,25 @@ 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 \
---object secret,id=libvirt-2-storage-secret0,\
-+-object secret,id=libvirt-2-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"iscsi","portal":"example.org:6000",\
- "target":"iqn.1992-01.com.example:storage","lun":1,"transport":"tcp",\
--"user":"myname","password-secret":"libvirt-2-storage-secret0",\
-+"user":"myname","password-secret":"libvirt-2-storage-auth-secret0",\
- "node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw",\
- "file":"libvirt-2-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=libvirt-2-format,\
- id=virtio-disk0,bootindex=1 \
---object secret,id=libvirt-1-storage-secret0,\
-+-object secret,id=libvirt-1-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"rbd","pool":"pool","image":"image",\
- "server":[{"host":"mon1.example.org","port":"6321"},{"host":"mon2.example.org",\
- "port":"6322"},{"host":"mon3.example.org","port":"6322"}],"user":"myname",\
- "auth-client-required":["cephx","none"],\
--"key-secret":"libvirt-1-storage-secret0","node-name":"libvirt-1-storage",\
-+"key-secret":"libvirt-1-storage-auth-secret0","node-name":"libvirt-1-storage",\
- "auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw",\
- "file":"libvirt-1-storage"}' \
-diff --git a/tests/qemuxml2argvdata/disk-nvme.x86_64-latest.args b/tests/qemuxml2argvdata/disk-nvme.x86_64-latest.args
-index 3393a9129b..2d52c58dff 100644
---- a/tests/qemuxml2argvdata/disk-nvme.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-nvme.x86_64-latest.args
-@@ -46,7 +46,7 @@ id=virtio-disk1 \
- "file":"libvirt-2-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=libvirt-2-format,\
- id=virtio-disk2 \
---object secret,id=libvirt-1-format-luks-secret0,\
-+-object secret,id=libvirt-1-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"nvme","device":"0001:02:00.0","namespace":2,\
-@@ -54,7 +54,7 @@ keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- "auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-1-format","read-only":false,\
- "cache":{"direct":true,"no-flush":false},"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-1-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-1-format-encryption-secret0"},\
- "file":"libvirt-1-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=libvirt-1-format,\
- id=virtio-disk3,write-cache=on \
-diff --git a/tests/qemuxml2argvdata/encrypted-disk-usage.args b/tests/qemuxml2argvdata/encrypted-disk-usage.args
-index 4522d2cb84..8641701293 100644
---- a/tests/qemuxml2argvdata/encrypted-disk-usage.args
-+++ b/tests/qemuxml2argvdata/encrypted-disk-usage.args
-@@ -27,11 +27,11 @@ path=/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \
- -no-shutdown \
- -no-acpi \
- -usb \
---object secret,id=virtio-disk0-luks-secret0,\
-+-object secret,id=virtio-disk0-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk0-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk0-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk0 \
- -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
-diff --git a/tests/qemuxml2argvdata/encrypted-disk.args b/tests/qemuxml2argvdata/encrypted-disk.args
-index 4522d2cb84..8641701293 100644
---- a/tests/qemuxml2argvdata/encrypted-disk.args
-+++ b/tests/qemuxml2argvdata/encrypted-disk.args
-@@ -27,11 +27,11 @@ path=/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \
- -no-shutdown \
- -no-acpi \
- -usb \
---object secret,id=virtio-disk0-luks-secret0,\
-+-object secret,id=virtio-disk0-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk0-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk0-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk0 \
- -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
-diff --git a/tests/qemuxml2argvdata/luks-disks-source-qcow2.args b/tests/qemuxml2argvdata/luks-disks-source-qcow2.args
-index ab1c864cf6..e7a29b2e03 100644
---- a/tests/qemuxml2argvdata/luks-disks-source-qcow2.args
-+++ b/tests/qemuxml2argvdata/luks-disks-source-qcow2.args
-@@ -27,53 +27,53 @@ path=/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \
- -no-shutdown \
- -no-acpi \
- -usb \
---object secret,id=virtio-disk0-luks-secret0,\
-+-object secret,id=virtio-disk0-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk0-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk0-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk0 \
- -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
---object secret,id=virtio-disk1-luks-secret0,\
-+-object secret,id=virtio-disk1-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk2,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk1-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk1-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk1 \
- -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\
- id=virtio-disk1 \
---object secret,id=virtio-disk2-luks-secret0,\
-+-object secret,id=virtio-disk2-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=iscsi://myname:AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A@example.org:\
- 6000/iqn.1992-01.com.example%3Astorage/1,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk2-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk2-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk2 \
- -device virtio-blk-pci,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,\
- id=virtio-disk2 \
---object secret,id=virtio-disk3-luks-secret0,\
-+-object secret,id=virtio-disk3-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=iscsi://iscsi.example.com:3260/demo-target/3,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk3-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk3-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk3 \
- -device virtio-blk-pci,bus=pci.0,addr=0x7,drive=drive-virtio-disk3,\
- id=virtio-disk3 \
---object secret,id=virtio-disk4-luks-secret0,\
-+-object secret,id=virtio-disk4-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive 'file=rbd:pool/image:auth_supported=none:mon_host=mon1.example.org\:\
- 6321\;mon2.example.org\:6322\;mon3.example.org\:6322,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk4-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk4-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk4' \
- -device virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk4,\
- id=virtio-disk4 \
---object secret,id=virtio-disk5-luks-secret0,\
-+-object secret,id=virtio-disk5-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk5,encrypt.format=luks,\
--encrypt.key-secret=virtio-disk5-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=virtio-disk5-encryption-secret0,format=qcow2,if=none,\
- id=drive-virtio-disk5 \
- -device virtio-blk-pci,bus=pci.0,addr=0x9,drive=drive-virtio-disk5,\
- id=virtio-disk5 \
-diff --git a/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args b/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args
-index 021bcb6961..44e4c5698d 100644
---- a/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/luks-disks-source-qcow2.x86_64-latest.args
-@@ -28,53 +28,53 @@ file=/tmp/lib/domain--1-encryptdisk/master-key.aes \
- -no-acpi \
- -boot strict=on \
- -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
---object secret,id=libvirt-7-format-luks-secret0,\
-+-object secret,id=libvirt-7-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"file","filename":"/storage/guest_disks/encryptdisk",\
- "node-name":"libvirt-7-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-7-format","read-only":false,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-7-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-7-format-encryption-secret0"},\
- "file":"libvirt-7-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-7-format,\
- id=virtio-disk0,bootindex=1 \
---object secret,id=libvirt-6-format-luks-secret0,\
-+-object secret,id=libvirt-6-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"file","filename":"/storage/guest_disks/encryptdisk2",\
- "node-name":"libvirt-6-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-6-format","read-only":false,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-6-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-6-format-encryption-secret0"},\
- "file":"libvirt-6-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-6-format,\
- id=virtio-disk1 \
---object secret,id=libvirt-5-storage-secret0,\
-+-object secret,id=libvirt-5-storage-auth-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
---object secret,id=libvirt-5-format-luks-secret0,\
-+-object secret,id=libvirt-5-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"iscsi","portal":"example.org:6000",\
- "target":"iqn.1992-01.com.example:storage","lun":1,"transport":"tcp",\
--"user":"myname","password-secret":"libvirt-5-storage-secret0",\
-+"user":"myname","password-secret":"libvirt-5-storage-auth-secret0",\
- "node-name":"libvirt-5-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-5-format","read-only":false,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-5-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-5-format-encryption-secret0"},\
- "file":"libvirt-5-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=libvirt-5-format,\
- id=virtio-disk2 \
---object secret,id=libvirt-4-format-luks-secret0,\
-+-object secret,id=libvirt-4-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"iscsi","portal":"iscsi.example.com:3260",\
- "target":"demo-target","lun":3,"transport":"tcp",\
- "node-name":"libvirt-4-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-4-format","read-only":false,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-4-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-4-format-encryption-secret0"},\
- "file":"libvirt-4-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=libvirt-4-format,\
- id=virtio-disk3 \
---object secret,id=libvirt-3-format-luks-secret0,\
-+-object secret,id=libvirt-3-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"rbd","pool":"pool","image":"image",\
-@@ -82,25 +82,25 @@ keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- "port":"6322"},{"host":"mon3.example.org","port":"6322"}],\
- "node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-3-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-3-format-encryption-secret0"},\
- "file":"libvirt-3-storage"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=libvirt-3-format,\
- id=virtio-disk4 \
---object secret,id=libvirt-2-format-luks-secret0,\
-+-object secret,id=libvirt-2-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"file","filename":"/storage/guest_disks/base.qcow2",\
- "node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-2-format","read-only":true,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-2-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-2-format-encryption-secret0"},\
- "file":"libvirt-2-storage","backing":null}' \
---object secret,id=libvirt-1-format-luks-secret0,\
-+-object secret,id=libvirt-1-format-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"file","filename":"/storage/guest_disks/encryptdisk5",\
- "node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
- -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2",\
--"encrypt":{"format":"luks","key-secret":"libvirt-1-format-luks-secret0"},\
-+"encrypt":{"format":"luks","key-secret":"libvirt-1-format-encryption-secret0"},\
- "file":"libvirt-1-storage","backing":"libvirt-2-format"}' \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x8,drive=libvirt-1-format,\
- id=virtio-disk5 \
-diff --git a/tests/qemuxml2argvdata/luks-disks-source.args b/tests/qemuxml2argvdata/luks-disks-source.args
-index 4566f84ff1..e2bd559212 100644
---- a/tests/qemuxml2argvdata/luks-disks-source.args
-+++ b/tests/qemuxml2argvdata/luks-disks-source.args
-@@ -27,41 +27,45 @@ path=/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \
- -no-shutdown \
- -no-acpi \
- -usb \
---object secret,id=virtio-disk0-luks-secret0,\
-+-object secret,id=virtio-disk0-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk,\
--key-secret=virtio-disk0-luks-secret0,format=luks,if=none,id=drive-virtio-disk0 \
-+key-secret=virtio-disk0-encryption-secret0,format=luks,if=none,\
-+id=drive-virtio-disk0 \
- -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
---object secret,id=virtio-disk1-luks-secret0,\
-+-object secret,id=virtio-disk1-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk2,\
--key-secret=virtio-disk1-luks-secret0,format=luks,if=none,id=drive-virtio-disk1 \
-+key-secret=virtio-disk1-encryption-secret0,format=luks,if=none,\
-+id=drive-virtio-disk1 \
- -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\
- id=virtio-disk1 \
---object secret,id=virtio-disk2-luks-secret0,\
-+-object secret,id=virtio-disk2-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=iscsi://myname:AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A@example.org:\
--6000/iqn.1992-01.com.example%3Astorage/1,key-secret=virtio-disk2-luks-secret0,\
--format=luks,if=none,id=drive-virtio-disk2 \
-+6000/iqn.1992-01.com.example%3Astorage/1,\
-+key-secret=virtio-disk2-encryption-secret0,format=luks,if=none,\
-+id=drive-virtio-disk2 \
- -device virtio-blk-pci,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,\
- id=virtio-disk2 \
---object secret,id=virtio-disk3-luks-secret0,\
-+-object secret,id=virtio-disk3-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=iscsi://iscsi.example.com:3260/demo-target/3,\
--key-secret=virtio-disk3-luks-secret0,format=luks,if=none,id=drive-virtio-disk3 \
-+key-secret=virtio-disk3-encryption-secret0,format=luks,if=none,\
-+id=drive-virtio-disk3 \
- -device virtio-blk-pci,bus=pci.0,addr=0x7,drive=drive-virtio-disk3,\
- id=virtio-disk3 \
---object secret,id=virtio-disk4-luks-secret0,\
-+-object secret,id=virtio-disk4-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive 'file=rbd:pool/image:auth_supported=none:mon_host=mon1.example.org\:\
- 6321\;mon2.example.org\:6322\;mon3.example.org\:6322,\
--key-secret=virtio-disk4-luks-secret0,format=luks,if=none,\
-+key-secret=virtio-disk4-encryption-secret0,format=luks,if=none,\
- id=drive-virtio-disk4' \
- -device virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk4,\
- id=virtio-disk4 \
-diff --git a/tests/qemuxml2argvdata/luks-disks.args b/tests/qemuxml2argvdata/luks-disks.args
-index db1ae45b60..47626966f2 100644
---- a/tests/qemuxml2argvdata/luks-disks.args
-+++ b/tests/qemuxml2argvdata/luks-disks.args
-@@ -27,18 +27,20 @@ path=/tmp/lib/domain--1-encryptdisk/monitor.sock,server,nowait \
- -no-shutdown \
- -no-acpi \
- -usb \
---object secret,id=virtio-disk0-luks-secret0,\
-+-object secret,id=virtio-disk0-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk,\
--key-secret=virtio-disk0-luks-secret0,format=luks,if=none,id=drive-virtio-disk0 \
-+key-secret=virtio-disk0-encryption-secret0,format=luks,if=none,\
-+id=drive-virtio-disk0 \
- -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
- id=virtio-disk0,bootindex=1 \
---object secret,id=virtio-disk1-luks-secret0,\
-+-object secret,id=virtio-disk1-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/storage/guest_disks/encryptdisk2,\
--key-secret=virtio-disk1-luks-secret0,format=luks,if=none,id=drive-virtio-disk1 \
-+key-secret=virtio-disk1-encryption-secret0,format=luks,if=none,\
-+id=drive-virtio-disk1 \
- -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\
- id=virtio-disk1 \
- -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
-diff --git a/tests/qemuxml2argvdata/user-aliases.args b/tests/qemuxml2argvdata/user-aliases.args
-index 54463386cd..88e540bc3c 100644
---- a/tests/qemuxml2argvdata/user-aliases.args
-+++ b/tests/qemuxml2argvdata/user-aliases.args
-@@ -48,11 +48,11 @@ id=drive-ua-myDisk1,cache=none \
- id=drive-ua-myDisk2 \
- -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-ua-myDisk2,id=ua-myDisk2,\
- bootindex=1 \
---object secret,id=ua-myEncryptedDisk1-luks-secret0,\
-+-object secret,id=ua-myEncryptedDisk1-encryption-secret0,\
- data=9eao5F8qtkGt+seB1HYivWIxbtwUu6MQtg1zpj/oDtUsPr1q8wBYM91uEHCn6j/1,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -drive file=/var/lib/libvirt/images/OtherDemo.img,encrypt.format=luks,\
--encrypt.key-secret=ua-myEncryptedDisk1-luks-secret0,format=qcow2,if=none,\
-+encrypt.key-secret=ua-myEncryptedDisk1-encryption-secret0,format=qcow2,if=none,\
- id=drive-ua-myEncryptedDisk1 \
- -device virtio-blk-pci,bus=pci.0,addr=0x7,drive=drive-ua-myEncryptedDisk1,\
- id=ua-myEncryptedDisk1 \
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Fix-naming-of-alias-variables.patch b/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Fix-naming-of-alias-variables.patch
deleted file mode 100644
index 497e01d..0000000
--- a/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Fix-naming-of-alias-variables.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From d1569e303d1132059ee4144371b9060ca59c445a Mon Sep 17 00:00:00 2001
-Message-Id: <d1569e303d1132059ee4144371b9060ca59c445a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:50 +0100
-Subject: [PATCH] qemuDomainSecretStorageSourcePrepare: Fix naming of alias
- variables
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The naming of the variables was tied to what they are used for not what
-the alias represents. Since we'll need to use some of the aliases for
-another type of secrets fix the name so that it makes sense.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b05322fc0376670edd54f9689ac8cda852581edc)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <ecb2064811e2bab26024bdd8dd90dafc4c23d3eb.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index af23079d5d..6221e7090f 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1759,8 +1759,8 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src)
- static int
- qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-                                      virStorageSourcePtr src,
--                                     const char *authalias,
--                                     const char *encalias)
-+                                     const char *aliasprotocol,
-+                                     const char *aliasformat)
- {
-     qemuDomainStorageSourcePrivatePtr srcPriv;
-     bool iscsiHasPS = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_ISCSI_PASSWORD_SECRET);
-@@ -1787,7 +1787,7 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-                                                             src->auth->username,
-                                                             &src->auth->seclookupdef);
-         } else {
--            srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, authalias,
-+            srcPriv->secinfo = qemuDomainSecretAESSetupFromSecret(priv, aliasprotocol,
-                                                                   usageType,
-                                                                   src->auth->username,
-                                                                   &src->auth->seclookupdef,
-@@ -1799,7 +1799,7 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-     }
- 
-     if (hasEnc) {
--        if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, encalias,
-+        if (!(srcPriv->encinfo = qemuDomainSecretAESSetupFromSecret(priv, aliasformat,
-                                                                     VIR_SECRET_USAGE_TYPE_VOLUME,
-                                                                     NULL,
-                                                                     &src->encryption->secrets[0]->seclookupdef,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Setup-secret-for-http-cookies.patch b/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Setup-secret-for-http-cookies.patch
deleted file mode 100644
index f537f21..0000000
--- a/SOURCES/libvirt-qemuDomainSecretStorageSourcePrepare-Setup-secret-for-http-cookies.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 899a3adeded6a120a9d8f1298af482247f4696fa Mon Sep 17 00:00:00 2001
-Message-Id: <899a3adeded6a120a9d8f1298af482247f4696fa@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:03 +0100
-Subject: [PATCH] qemuDomainSecretStorageSourcePrepare: Setup secret for http
- cookies
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-QEMU's curl driver requires the cookies concatenated and allows themi to
-be passed in via a secret. Prepare the value for the secret and encrypt
-it.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 877cd358873982d4d6a36b7e65a8605c663e5765)
-
-Conflicts:
-  src/qemu/qemu_domain.c:
-  Refactor to virBufferTrim not backported.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <e61490666a540093eac6c219c07a12c6b7d4c72a.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 33 ++++++++++++++++++++++++++++++++-
- 1 file changed, 32 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 9391bc37e0..cc47e7a2f0 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -1740,6 +1740,30 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src)
- }
- 
- 
-+static qemuDomainSecretInfoPtr
-+qemuDomainSecretStorageSourcePrepareCookies(qemuDomainObjPrivatePtr priv,
-+                                            virStorageSourcePtr src,
-+                                            const char *aliasprotocol)
-+{
-+    g_autofree char *secretalias = qemuAliasForSecret(aliasprotocol, "httpcookie");
-+    g_autofree char *cookies = NULL;
-+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-+    size_t i;
-+
-+    for (i = 0; i < src->ncookies; i++) {
-+        virStorageNetCookieDefPtr cookie = src->cookies[i];
-+
-+        virBufferAsprintf(&buf, "%s=%s; ", cookie->name, cookie->value);
-+    }
-+
-+    virBufferTrim(&buf, "; ", -1);
-+    cookies = virBufferContentAndReset(&buf);
-+
-+    return qemuDomainSecretAESSetup(priv, secretalias, NULL,
-+                                    (uint8_t *) cookies, strlen(cookies));
-+}
-+
-+
- /**
-  * qemuDomainSecretStorageSourcePrepare:
-  * @priv: domain private object
-@@ -1765,7 +1789,7 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-     bool hasAuth = qemuDomainStorageSourceHasAuth(src);
-     bool hasEnc = qemuDomainDiskHasEncryptionSecret(src);
- 
--    if (!hasAuth && !hasEnc)
-+    if (!hasAuth && !hasEnc && src->ncookies == 0)
-         return 0;
- 
-     if (!(src->privateData = qemuDomainStorageSourcePrivateNew()))
-@@ -1805,6 +1829,13 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
-               return -1;
-     }
- 
-+    if (src->ncookies &&
-+        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
-+        !(srcPriv->httpcookie = qemuDomainSecretStorageSourcePrepareCookies(priv,
-+                                                                            src,
-+                                                                            aliasprotocol)))
-+        return -1;
-+
-     return 0;
- }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuDomainSetupDisk-Initialize-targetPaths.patch b/SOURCES/libvirt-qemuDomainSetupDisk-Initialize-targetPaths.patch
new file mode 100644
index 0000000..c57e027
--- /dev/null
+++ b/SOURCES/libvirt-qemuDomainSetupDisk-Initialize-targetPaths.patch
@@ -0,0 +1,41 @@
+From ab4488be3282dd5d0b9582e6a5d1dafbe7b90489 Mon Sep 17 00:00:00 2001
+Message-Id: <ab4488be3282dd5d0b9582e6a5d1dafbe7b90489@dist-git>
+From: Peter Krempa <pkrempa@redhat.com>
+Date: Tue, 25 Jan 2022 17:49:00 +0100
+Subject: [PATCH] qemuDomainSetupDisk: Initialize 'targetPaths'
+
+Compiler isn't able to see that 'virDevMapperGetTargets' in cases e.g.
+when the devmapper isn't available may not initialize the value in the
+pointer passed as the second argument.
+
+The usage 'qemuDomainSetupDisk' lead to an accidental infinite loop as
+previous calls apparently doctored the stack to a point where
+'g_slist_concat' would end up in an infinite loop trying to find the end
+of the list.
+
+Fixes: 6c49c2ee9fcb88de02cdc333f666a8e95d60a3b0
+Closes: https://gitlab.com/libvirt/libvirt/-/issues/268
+Signed-off-by: Peter Krempa <pkrempa@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit ddb2384f0c78a91c40d95afdbc7fe325e95ef2bc)
+https://bugzilla.redhat.com/show_bug.cgi?id=2046172
+---
+ src/qemu/qemu_namespace.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c
+index 23b1160c5e..94453033f5 100644
+--- a/src/qemu/qemu_namespace.c
++++ b/src/qemu/qemu_namespace.c
+@@ -251,7 +251,7 @@ qemuDomainSetupDisk(virStorageSource *src,
+             if (!(tmpPath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
+                 return -1;
+         } else {
+-            GSList *targetPaths;
++            GSList *targetPaths = NULL;
+ 
+             if (virStorageSourceIsEmpty(next) ||
+                 !virStorageSourceIsLocalStorage(next)) {
+-- 
+2.35.1
+
diff --git a/SOURCES/libvirt-qemuDomainSnapshotDiskPrepareOne-Don-t-load-the-relative-path-with-blockdev.patch b/SOURCES/libvirt-qemuDomainSnapshotDiskPrepareOne-Don-t-load-the-relative-path-with-blockdev.patch
deleted file mode 100644
index c9a9567..0000000
--- a/SOURCES/libvirt-qemuDomainSnapshotDiskPrepareOne-Don-t-load-the-relative-path-with-blockdev.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 84b0e095a5dd885a532a4108e95adea0b5dca184 Mon Sep 17 00:00:00 2001
-Message-Id: <84b0e095a5dd885a532a4108e95adea0b5dca184@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:42 +0200
-Subject: [PATCH] qemuDomainSnapshotDiskPrepareOne: Don't load the relative
- path with blockdev
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Since we are refreshing the relative paths when doing the blockjobs we
-no longer need to load them upfront when doing the snapshot.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2ace7a87a8aced68c2504fd4dd4e2df4302c3eeb)
-https://bugzilla.redhat.com/show_bug.cgi?id=1818655
-Message-Id: <7763b0a5b018f04230220b81038e60dc12706799.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_driver.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 27a50f60ef..4701a1905e 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -15441,8 +15441,9 @@ qemuDomainSnapshotDiskPrepareOne(virQEMUDriverPtr driver,
-         dd->initialized = true;
- 
-         /* relative backing store paths need to be updated so that relative
--         * block commit still works */
--        if (reuse) {
-+         * block commit still works. With blockdev we must update it when doing
-+         * commit anyways so it's skipped here */
-+        if (reuse && !blockdev) {
-             if (supportsBacking) {
-                 g_autofree char *backingStoreStr = NULL;
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuDomainSnapshotDiskPrepareOne-Fix-logic-of-relative-backing-store-update.patch b/SOURCES/libvirt-qemuDomainSnapshotDiskPrepareOne-Fix-logic-of-relative-backing-store-update.patch
deleted file mode 100644
index 29d41fb..0000000
--- a/SOURCES/libvirt-qemuDomainSnapshotDiskPrepareOne-Fix-logic-of-relative-backing-store-update.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From a3a9d320ac8cde96c976378b92dc4fcf553d9287 Mon Sep 17 00:00:00 2001
-Message-Id: <a3a9d320ac8cde96c976378b92dc4fcf553d9287@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 3 Apr 2020 14:32:55 +0200
-Subject: [PATCH] qemuDomainSnapshotDiskPrepareOne: Fix logic of relative
- backing store update
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Commit 2ace7a87a8aced68c250 introduced a logic bug by an improperly
-modified condition where we'd skip to the else branch when reusing of
-external images was requested and blockdev is available.
-
-The original intentions were to skip the backing store update with
-blockdev.
-
-Fix it by only asserting the boolean which was used to track whether we
-support update of the backing store only when blockdev is not present
-along with the appropriate rename.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1820016
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit ae64a75a8713cf14b25b40078766c2da93e001ff)
-Message-Id: <c4ce185df3fb6d88aa7282d523b0a5c7ccff2aad.1585916255.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c | 19 +++++++++++--------
- 1 file changed, 11 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 4701a1905e..26215f8d6a 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -15403,7 +15403,7 @@ qemuDomainSnapshotDiskPrepareOne(virQEMUDriverPtr driver,
- {
-     virDomainDiskDefPtr persistdisk;
-     bool supportsCreate;
--    bool supportsBacking;
-+    bool updateRelativeBacking = false;
- 
-     dd->disk = disk;
- 
-@@ -15432,19 +15432,22 @@ qemuDomainSnapshotDiskPrepareOne(virQEMUDriverPtr driver,
-     }
- 
-     supportsCreate = virStorageFileSupportsCreate(dd->src);
--    supportsBacking = virStorageFileSupportsBackingChainTraversal(dd->src);
- 
--    if (supportsCreate || supportsBacking) {
-+    /* relative backing store paths need to be updated so that relative
-+     * block commit still works. With blockdev we must update it when doing
-+     * commit anyways so it's skipped here */
-+    if (!blockdev &&
-+        virStorageFileSupportsBackingChainTraversal(dd->src))
-+        updateRelativeBacking = true;
-+
-+    if (supportsCreate || updateRelativeBacking) {
-         if (qemuDomainStorageFileInit(driver, vm, dd->src, NULL) < 0)
-             return -1;
- 
-         dd->initialized = true;
- 
--        /* relative backing store paths need to be updated so that relative
--         * block commit still works. With blockdev we must update it when doing
--         * commit anyways so it's skipped here */
--        if (reuse && !blockdev) {
--            if (supportsBacking) {
-+        if (reuse) {
-+            if (updateRelativeBacking) {
-                 g_autofree char *backingStoreStr = NULL;
- 
-                 if (virStorageFileGetBackingStoreStr(dd->src, &backingStoreStr) < 0)
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuDomainValidateStorageSource-Reject-unsupported-slices.patch b/SOURCES/libvirt-qemuDomainValidateStorageSource-Reject-unsupported-slices.patch
deleted file mode 100644
index 1401c13..0000000
--- a/SOURCES/libvirt-qemuDomainValidateStorageSource-Reject-unsupported-slices.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 038231283c69bf7c9c9fadd2157f53f8b3f719d3 Mon Sep 17 00:00:00 2001
-Message-Id: <038231283c69bf7c9c9fadd2157f53f8b3f719d3@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:17 +0100
-Subject: [PATCH] qemuDomainValidateStorageSource: Reject unsupported slices
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We support explicit storage slices only when using blockdev. Storage
-slices expressed via the backing store string are left to qemu to
-open correctly.
-
-Reject storage slices configured via the XML for non-blockdev usage.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit a6eeda986e458e6746268069b1f610c27e89d6e2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <10cfef14fcb49c7daef4f869d622ebdf3aa6a4d5.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index cf069e2b79..7b414b79c7 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -6936,6 +6936,18 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src,
-         return -1;
-     }
- 
-+    if (src->sliceStorage) {
-+        /* In pre-blockdev era we can't configure the slice so we can allow them
-+         * only for detected backing store entries as they are populated
-+         * from a place that qemu would be able to read */
-+        if (!src->detected &&
-+            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("storage slice is not supported by this QEMU binary"));
-+            return -1;
-+        }
-+    }
-+
-     return 0;
- }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuDomainValidateStorageSource-Validate-new-network-storage-parameters.patch b/SOURCES/libvirt-qemuDomainValidateStorageSource-Validate-new-network-storage-parameters.patch
deleted file mode 100644
index e3e7b54..0000000
--- a/SOURCES/libvirt-qemuDomainValidateStorageSource-Validate-new-network-storage-parameters.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From 5e76dbcf3922074cbf708c3ffe8adc6e108bac76 Mon Sep 17 00:00:00 2001
-Message-Id: <5e76dbcf3922074cbf708c3ffe8adc6e108bac76@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:59 +0100
-Subject: [PATCH] qemuDomainValidateStorageSource: Validate new network storage
- parameters
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Ensure that the new fields are allowed only when -blockdev is used or
-when they are in the detected part of the backing chain where qemu will
-handle them internally.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c1409e308f8e10f28ff4977309b2573a1a2d8763)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <3b47d0ff8f492506588d6ddeda49d2e4e43cc5aa.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 75 ++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 75 insertions(+)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 65df463acc..2920e699f6 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -6953,6 +6953,81 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src,
-         }
-     }
- 
-+    if (src->sslverify != VIR_TRISTATE_BOOL_ABSENT) {
-+        if (actualType != VIR_STORAGE_TYPE_NETWORK ||
-+            (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_FTPS)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("ssl verification is supported only with HTTPS/FTPS protocol"));
-+            return -1;
-+        }
-+
-+        if (!src->detected &&
-+            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("ssl verification setting is not supported by this QEMU binary"));
-+            return -1;
-+        }
-+    }
-+
-+    if (src->ncookies > 0) {
-+        if (actualType != VIR_STORAGE_TYPE_NETWORK ||
-+            (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("http cookies are supported only with HTTP(S) protocol"));
-+            return -1;
-+        }
-+
-+        if (!src->detected &&
-+            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("http cookies are not supported by this QEMU binary"));
-+            return -1;
-+        }
-+
-+        if (virStorageSourceNetCookiesValidate(src) < 0)
-+            return -1;
-+    }
-+
-+    if (src->readahead > 0) {
-+        if (actualType != VIR_STORAGE_TYPE_NETWORK ||
-+            (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_FTP &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_FTPS)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("readaehad is supported only with HTTP(S)/FTP(s) protocols"));
-+            return -1;
-+        }
-+
-+        if (!src->detected &&
-+            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("readahead setting is not supported with this QEMU binary"));
-+            return -1;
-+        }
-+    }
-+
-+    if (src->timeout > 0) {
-+        if (actualType != VIR_STORAGE_TYPE_NETWORK ||
-+            (src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTPS &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_HTTP &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_FTP &&
-+             src->protocol != VIR_STORAGE_NET_PROTOCOL_FTPS)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("timeout is supported only with HTTP(S)/FTP(s) protocols"));
-+            return -1;
-+        }
-+
-+        if (!src->detected &&
-+            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
-+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-+                           _("timeout setting is not supported with this QEMU binary"));
-+            return -1;
-+        }
-+    }
-+
-     return 0;
- }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuExtDevicesStart-pass-logManager.patch b/SOURCES/libvirt-qemuExtDevicesStart-pass-logManager.patch
deleted file mode 100644
index 1f2000e..0000000
--- a/SOURCES/libvirt-qemuExtDevicesStart-pass-logManager.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 27ae8a1488afd910dccd1f76d1fa31a3c8560d04 Mon Sep 17 00:00:00 2001
-Message-Id: <27ae8a1488afd910dccd1f76d1fa31a3c8560d04@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:36 +0100
-Subject: [PATCH] qemuExtDevicesStart: pass logManager
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Pass logManager to qemuExtDevicesStart for future usage.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit b164eac5e1d4ebe17e673f0427b70f862a670f94)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <44ec9897e79f7482dc22611526a154915bb02cdb.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_extdevice.c | 1 +
- src/qemu/qemu_extdevice.h | 1 +
- src/qemu/qemu_process.c   | 4 +++-
- 3 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_extdevice.c b/src/qemu/qemu_extdevice.c
-index 9c0c0fd573..7f3bb104d9 100644
---- a/src/qemu/qemu_extdevice.c
-+++ b/src/qemu/qemu_extdevice.c
-@@ -153,6 +153,7 @@ qemuExtDevicesCleanupHost(virQEMUDriverPtr driver,
- int
- qemuExtDevicesStart(virQEMUDriverPtr driver,
-                     virDomainObjPtr vm,
-+                    virLogManagerPtr logManager G_GNUC_UNUSED,
-                     bool incomingMigration)
- {
-     virDomainDefPtr def = vm->def;
-diff --git a/src/qemu/qemu_extdevice.h b/src/qemu/qemu_extdevice.h
-index 5cf777ab4b..df29968e16 100644
---- a/src/qemu/qemu_extdevice.h
-+++ b/src/qemu/qemu_extdevice.h
-@@ -46,6 +46,7 @@ void qemuExtDevicesCleanupHost(virQEMUDriverPtr driver,
- 
- int qemuExtDevicesStart(virQEMUDriverPtr driver,
-                         virDomainObjPtr vm,
-+                        virLogManagerPtr logManager,
-                         bool incomingMigration)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
-     G_GNUC_WARN_UNUSED_RESULT;
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index a7bbab9e56..0476f18517 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -6705,7 +6705,9 @@ qemuProcessLaunch(virConnectPtr conn,
-     if (qemuProcessGenID(vm, flags) < 0)
-         goto cleanup;
- 
--    if (qemuExtDevicesStart(driver, vm, incoming != NULL) < 0)
-+    if (qemuExtDevicesStart(driver, vm,
-+                            qemuDomainLogContextGetManager(logCtxt),
-+                            incoming != NULL) < 0)
-         goto cleanup;
- 
-     VIR_DEBUG("Building emulator command line");
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuFirmwareFillDomain-Fill-NVRAM-template-on-migration-too.patch b/SOURCES/libvirt-qemuFirmwareFillDomain-Fill-NVRAM-template-on-migration-too.patch
deleted file mode 100644
index 51fabce..0000000
--- a/SOURCES/libvirt-qemuFirmwareFillDomain-Fill-NVRAM-template-on-migration-too.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 1824bb0b44b47af95f50afd626776acfba91174d Mon Sep 17 00:00:00 2001
-Message-Id: <1824bb0b44b47af95f50afd626776acfba91174d@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 13:20:04 +0200
-Subject: [PATCH] qemuFirmwareFillDomain: Fill NVRAM template on migration too
-
-In 8e1804f9f66 I've tried to fix the following use case: domain
-is started with path to UEFI only and relies on libvirt to figure
-out corresponding NVRAM template to create a per-domain copy
-from. The fix consisted of having a check tailored exactly for
-this use case and if it's hit then using FW autoselection to
-figure it out. Unfortunately, the NVRAM template is not saved in
-the inactive XML (well, the domain might be transient anyway).
-Then, as a part of that check we see whether the per-domain copy
-doesn't exist already and if it does then no template is looked
-up hence no template will appear in the live XML.
-
-This works, until the domain is migrated. At the destination, the
-per-domain copy will not exist so we need to know the template to
-create the per-domain copy from. But we don't even get to the
-check because we are not starting a fresh new domain and thus the
-qemuFirmwareFillDomain() function quits early.
-
-The solution is to switch order of these two checks. That is
-evaluate the check for the old style before checking flags.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1852910
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit c43622f06e295edcb9cedf33583f0bd18fb04b10)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1880418
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <9b91110a238eba22f4b876e7b15a25d5113ee91e.1602069592.git.mprivozn@redhat.com>
-Reviewed-by: Andrea Bolognani <abologna@redhat.com>
----
- src/qemu/qemu_firmware.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
-index 68e2c6b40f..c84d03f0a8 100644
---- a/src/qemu/qemu_firmware.c
-+++ b/src/qemu/qemu_firmware.c
-@@ -1241,9 +1241,6 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver,
-     size_t i;
-     int ret = -1;
- 
--    if (!(flags & VIR_QEMU_PROCESS_START_NEW))
--        return 0;
--
-     /* Fill in FW paths if either os.firmware is enabled, or
-      * loader path was provided with no nvram varstore. */
-     if (def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) {
-@@ -1259,6 +1256,11 @@ qemuFirmwareFillDomain(virQEMUDriverPtr driver,
-         /* ... then we want to consult JSON FW descriptors first,
-          * but we don't want to fail if we haven't found a match. */
-         needResult = false;
-+    } else {
-+        /* Domain has FW autoselection enabled => do nothing if
-+         * we are not starting it from scratch. */
-+        if (!(flags & VIR_QEMU_PROCESS_START_NEW))
-+            return 0;
-     }
- 
-     if ((nfirmwares = qemuFirmwareFetchParsedConfigs(driver->privileged,
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Exit-early-if-there-are-no-disks.patch b/SOURCES/libvirt-qemuMigrationCookieAddNBD-Exit-early-if-there-are-no-disks.patch
deleted file mode 100644
index f9d3ab4..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Exit-early-if-there-are-no-disks.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 44d255b6cc7315537e66f1d97e4893e321b694b8 Mon Sep 17 00:00:00 2001
-Message-Id: <44d255b6cc7315537e66f1d97e4893e321b694b8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:02 +0100
-Subject: [PATCH] qemuMigrationCookieAddNBD: Exit early if there are no disks
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Refactor the logic to skip the body of the function if there's nothing
-to do.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit bdff9d4513694da8d9b2bb60a1f808fb1c286388)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <b12c9b8c4ca78e848e43ab4ae7706a5694cfb49c.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.c | 12 +++++++-----
- 1 file changed, 7 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
-index 299bf17c9e..73ae815818 100644
---- a/src/qemu/qemu_migration_cookie.c
-+++ b/src/qemu/qemu_migration_cookie.c
-@@ -464,8 +464,13 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     if (VIR_ALLOC(mig->nbd) < 0)
-         return -1;
- 
--    if (vm->def->ndisks &&
--        VIR_ALLOC_N(mig->nbd->disks, vm->def->ndisks) < 0)
-+    mig->nbd->port = priv->nbdPort;
-+    mig->flags |= QEMU_MIGRATION_COOKIE_NBD;
-+
-+    if (vm->def->ndisks == 0)
-+        return 0;
-+
-+    if (VIR_ALLOC_N(mig->nbd->disks, vm->def->ndisks) < 0)
-         return -1;
-     mig->nbd->ndisks = 0;
- 
-@@ -496,9 +501,6 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-         mig->nbd->ndisks++;
-     }
- 
--    mig->nbd->port = priv->nbdPort;
--    mig->flags |= QEMU_MIGRATION_COOKIE_NBD;
--
-     ret = 0;
-  cleanup:
-     virHashFree(stats);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Fix-filling-of-capacity-when-blockdev-is-used.patch b/SOURCES/libvirt-qemuMigrationCookieAddNBD-Fix-filling-of-capacity-when-blockdev-is-used.patch
deleted file mode 100644
index 08304a4..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Fix-filling-of-capacity-when-blockdev-is-used.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 0c415216f2005b3c33379db3b37fb9c03e30a658 Mon Sep 17 00:00:00 2001
-Message-Id: <0c415216f2005b3c33379db3b37fb9c03e30a658@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:08 +0100
-Subject: [PATCH] qemuMigrationCookieAddNBD: Fix filling of 'capacity' when
- blockdev is used
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-With -blockdev we must look up via the nodename rather than the 'drive'
-alias which is not present any more.
-
-This fixes the pre-creation of storage volumes on migration with
-non-shared storage.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit b9e87908dbcff23cc3fdf3d8629849560d2e7268)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <60eb81e2479cac5fc9ae3cc40abb106e0a127e6e.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.c | 17 +++++++++++++----
- 1 file changed, 13 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
-index 734d95f4f1..a5a9edffc3 100644
---- a/src/qemu/qemu_migration_cookie.c
-+++ b/src/qemu/qemu_migration_cookie.c
-@@ -455,6 +455,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(virHashTable) stats = virHashNew(virHashValueFree);
-+    bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
-     size_t i;
-     int rc;
- 
-@@ -474,7 +475,10 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
- 
-     if (qemuDomainObjEnterMonitorAsync(driver, vm, priv->job.asyncJob) < 0)
-         return -1;
--    rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false);
-+    if (blockdev)
-+        rc = qemuMonitorBlockStatsUpdateCapacityBlockdev(priv->mon, stats);
-+    else
-+        rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false);
-     if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-         return -1;
- 
-@@ -482,9 +486,14 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-         virDomainDiskDefPtr disk = vm->def->disks[i];
-         qemuBlockStats *entry;
- 
--        if (!disk->info.alias ||
--            !(entry = virHashLookup(stats, disk->info.alias)))
--            continue;
-+        if (blockdev) {
-+            if (!(entry = virHashLookup(stats, disk->src->nodeformat)))
-+                continue;
-+        } else {
-+            if (!disk->info.alias ||
-+                !(entry = virHashLookup(stats, disk->info.alias)))
-+                continue;
-+        }
- 
-         mig->nbd->disks[mig->nbd->ndisks].target = g_strdup(disk->dst);
-         mig->nbd->disks[mig->nbd->ndisks].capacity = entry->capacity;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Move-monitor-call-out-of-the-loop.patch b/SOURCES/libvirt-qemuMigrationCookieAddNBD-Move-monitor-call-out-of-the-loop.patch
deleted file mode 100644
index c78172d..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Move-monitor-call-out-of-the-loop.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From fe9aca2a6860fbb84faed53b10fabc95b1c73a7a Mon Sep 17 00:00:00 2001
-Message-Id: <fe9aca2a6860fbb84faed53b10fabc95b1c73a7a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:05 +0100
-Subject: [PATCH] qemuMigrationCookieAddNBD: Move monitor call out of the loop
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The data is gathered only once so we can move the whole block which
-fetches the data out of the loop and get rid of the logic which
-prevents multiple calls.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 464345e153b805467a22fca4615350e992e6d470)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <4c88d7cb39985ba204cd126d6adb740f58d19d6f.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.c | 23 +++++++++--------------
- 1 file changed, 9 insertions(+), 14 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
-index 1c3de13983..33ab6cb7a5 100644
---- a/src/qemu/qemu_migration_cookie.c
-+++ b/src/qemu/qemu_migration_cookie.c
-@@ -472,24 +472,19 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     mig->nbd->disks = g_new0(struct qemuMigrationCookieNBDDisk, vm->def->ndisks);
-     mig->nbd->ndisks = 0;
- 
-+    if (!(stats = virHashCreate(10, virHashValueFree)))
-+        goto cleanup;
-+
-+    if (qemuDomainObjEnterMonitorAsync(driver, vm, priv->job.asyncJob) < 0)
-+        goto cleanup;
-+    rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false);
-+    if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-+        goto cleanup;
-+
-     for (i = 0; i < vm->def->ndisks; i++) {
-         virDomainDiskDefPtr disk = vm->def->disks[i];
-         qemuBlockStats *entry;
- 
--        if (!stats) {
--            if (!(stats = virHashCreate(10, virHashValueFree)))
--                goto cleanup;
--
--            if (qemuDomainObjEnterMonitorAsync(driver, vm,
--                                               priv->job.asyncJob) < 0)
--                goto cleanup;
--            rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false);
--            if (qemuDomainObjExitMonitor(driver, vm) < 0)
--                goto cleanup;
--            if (rc < 0)
--                goto cleanup;
--        }
--
-         if (!disk->info.alias ||
-             !(entry = virHashLookup(stats, disk->info.alias)))
-             continue;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Remove-ret-variable-and-cleanup-label.patch b/SOURCES/libvirt-qemuMigrationCookieAddNBD-Remove-ret-variable-and-cleanup-label.patch
deleted file mode 100644
index e123f21..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Remove-ret-variable-and-cleanup-label.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From ea4867bfe2c2990f62c3158b875f56dbf540f372 Mon Sep 17 00:00:00 2001
-Message-Id: <ea4867bfe2c2990f62c3158b875f56dbf540f372@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:07 +0100
-Subject: [PATCH] qemuMigrationCookieAddNBD: Remove 'ret' variable and
- 'cleanup' label
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit d409411213152d204b85daf05468c4f7f17c1616)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <1feef9fdcf0e2f1178e8136192d91a6558cc6149.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.c | 10 ++++------
- 1 file changed, 4 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
-index 968a9b589c..734d95f4f1 100644
---- a/src/qemu/qemu_migration_cookie.c
-+++ b/src/qemu/qemu_migration_cookie.c
-@@ -456,7 +456,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     g_autoptr(virHashTable) stats = virHashNew(virHashValueFree);
-     size_t i;
--    int ret = -1, rc;
-+    int rc;
- 
-     /* It is not a bug if there already is a NBD data */
-     qemuMigrationCookieNBDFree(mig->nbd);
-@@ -473,10 +473,10 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     mig->nbd->ndisks = 0;
- 
-     if (qemuDomainObjEnterMonitorAsync(driver, vm, priv->job.asyncJob) < 0)
--        goto cleanup;
-+        return -1;
-     rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false);
-     if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
--        goto cleanup;
-+        return -1;
- 
-     for (i = 0; i < vm->def->ndisks; i++) {
-         virDomainDiskDefPtr disk = vm->def->disks[i];
-@@ -491,9 +491,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-         mig->nbd->ndisks++;
-     }
- 
--    ret = 0;
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Use-glib-memory-allocators.patch b/SOURCES/libvirt-qemuMigrationCookieAddNBD-Use-glib-memory-allocators.patch
deleted file mode 100644
index c212e54..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Use-glib-memory-allocators.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From b3f938e7c0907ea9222827550fd3dfa0c1f1e1fd Mon Sep 17 00:00:00 2001
-Message-Id: <b3f938e7c0907ea9222827550fd3dfa0c1f1e1fd@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:04 +0100
-Subject: [PATCH] qemuMigrationCookieAddNBD: Use glib memory allocators
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 8efeeb59a6e76fa9515deb7d3d26ae570e0fb7a7)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <5872c474b94250bb0994748d9b769883ecbea6f8.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
-index 73ae815818..1c3de13983 100644
---- a/src/qemu/qemu_migration_cookie.c
-+++ b/src/qemu/qemu_migration_cookie.c
-@@ -461,8 +461,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     /* It is not a bug if there already is a NBD data */
-     qemuMigrationCookieNBDFree(mig->nbd);
- 
--    if (VIR_ALLOC(mig->nbd) < 0)
--        return -1;
-+    mig->nbd = g_new0(qemuMigrationCookieNBD, 1);
- 
-     mig->nbd->port = priv->nbdPort;
-     mig->flags |= QEMU_MIGRATION_COOKIE_NBD;
-@@ -470,8 +469,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     if (vm->def->ndisks == 0)
-         return 0;
- 
--    if (VIR_ALLOC_N(mig->nbd->disks, vm->def->ndisks) < 0)
--        return -1;
-+    mig->nbd->disks = g_new0(struct qemuMigrationCookieNBDDisk, vm->def->ndisks);
-     mig->nbd->ndisks = 0;
- 
-     for (i = 0; i < vm->def->ndisks; i++) {
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Use-virHashNew-and-automatic-freeing-of-virHashTablePtr.patch b/SOURCES/libvirt-qemuMigrationCookieAddNBD-Use-virHashNew-and-automatic-freeing-of-virHashTablePtr.patch
deleted file mode 100644
index c6850bd..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieAddNBD-Use-virHashNew-and-automatic-freeing-of-virHashTablePtr.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 3e6ecac77da1e9f302f81a68dded6bd226430682 Mon Sep 17 00:00:00 2001
-Message-Id: <3e6ecac77da1e9f302f81a68dded6bd226430682@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:06 +0100
-Subject: [PATCH] qemuMigrationCookieAddNBD: Use virHashNew and automatic
- freeing of virHashTablePtr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Swithc to the helper which doesn't require checking of the return value.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 45eefb2c78cfe2b14d5bc5fb150ffbed18991fde)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <06db6f97ebb2266ea197ce13cbc9051e4c839fdf.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.c | 6 +-----
- 1 file changed, 1 insertion(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
-index 33ab6cb7a5..968a9b589c 100644
---- a/src/qemu/qemu_migration_cookie.c
-+++ b/src/qemu/qemu_migration_cookie.c
-@@ -454,7 +454,7 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-                           virDomainObjPtr vm)
- {
-     qemuDomainObjPrivatePtr priv = vm->privateData;
--    virHashTablePtr stats = NULL;
-+    g_autoptr(virHashTable) stats = virHashNew(virHashValueFree);
-     size_t i;
-     int ret = -1, rc;
- 
-@@ -472,9 +472,6 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
-     mig->nbd->disks = g_new0(struct qemuMigrationCookieNBDDisk, vm->def->ndisks);
-     mig->nbd->ndisks = 0;
- 
--    if (!(stats = virHashCreate(10, virHashValueFree)))
--        goto cleanup;
--
-     if (qemuDomainObjEnterMonitorAsync(driver, vm, priv->job.asyncJob) < 0)
-         goto cleanup;
-     rc = qemuMonitorBlockStatsUpdateCapacity(priv->mon, stats, false);
-@@ -496,7 +493,6 @@ qemuMigrationCookieAddNBD(qemuMigrationCookiePtr mig,
- 
-     ret = 0;
-  cleanup:
--    virHashFree(stats);
-     return ret;
- }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationCookieNBD-Extract-embedded-struct.patch b/SOURCES/libvirt-qemuMigrationCookieNBD-Extract-embedded-struct.patch
deleted file mode 100644
index 22753ff..0000000
--- a/SOURCES/libvirt-qemuMigrationCookieNBD-Extract-embedded-struct.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 92ec9a02d57b18eac3abc33e0807cd70c6bb46c5 Mon Sep 17 00:00:00 2001
-Message-Id: <92ec9a02d57b18eac3abc33e0807cd70c6bb46c5@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:03 +0100
-Subject: [PATCH] qemuMigrationCookieNBD: Extract embedded struct
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Extract the struct so that it's type has a name.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 3093822d1d8e3bbd01ea59f35a9fea1228f9268f)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <e05be367f0869dbbf726cea7e91925fc48bb683f.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_cookie.h | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_cookie.h b/src/qemu/qemu_migration_cookie.h
-index 20e1ed60ca..1e88684589 100644
---- a/src/qemu/qemu_migration_cookie.h
-+++ b/src/qemu/qemu_migration_cookie.h
-@@ -84,16 +84,18 @@ struct _qemuMigrationCookieNetwork {
-     qemuMigrationCookieNetDataPtr net;
- };
- 
-+struct qemuMigrationCookieNBDDisk {
-+    char *target;                   /* Disk target */
-+    unsigned long long capacity;    /* And its capacity */
-+};
-+
- typedef struct _qemuMigrationCookieNBD qemuMigrationCookieNBD;
- typedef qemuMigrationCookieNBD *qemuMigrationCookieNBDPtr;
- struct _qemuMigrationCookieNBD {
-     int port; /* on which port does NBD server listen for incoming data */
- 
-     size_t ndisks;  /* Number of items in @disk array */
--    struct {
--        char *target;                   /* Disk target */
--        unsigned long long capacity;    /* And its capacity */
--    } *disks;
-+    struct qemuMigrationCookieNBDDisk *disks;
- };
- 
- typedef struct _qemuMigrationCookieCaps qemuMigrationCookieCaps;
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMigrationParamsResetTLS-Adapt-to-modern-memory-management.patch b/SOURCES/libvirt-qemuMigrationParamsResetTLS-Adapt-to-modern-memory-management.patch
deleted file mode 100644
index cbecf93..0000000
--- a/SOURCES/libvirt-qemuMigrationParamsResetTLS-Adapt-to-modern-memory-management.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From f3179ed39f95ec25c9d4c6ec8ef67d54abd6c5ad Mon Sep 17 00:00:00 2001
-Message-Id: <f3179ed39f95ec25c9d4c6ec8ef67d54abd6c5ad@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:42 +0100
-Subject: [PATCH] qemuMigrationParamsResetTLS: Adapt to modern memory
- management
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use g_autofree instead of VIR_FREE and delete the comment mentioning
-possible failure to allocate memory.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3b6110655013e9ae0ee933406c1ff0c7af2d4734)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <86a9b24e53e4de2830c6ff33639837b14f20d282.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_params.c | 10 ++--------
- 1 file changed, 2 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
-index f61796713f..60b41e287a 100644
---- a/src/qemu/qemu_migration_params.c
-+++ b/src/qemu/qemu_migration_params.c
-@@ -1074,8 +1074,8 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver,
-                             qemuMigrationParamsPtr origParams,
-                             unsigned long apiFlags)
- {
--    char *tlsAlias = NULL;
--    char *secAlias = NULL;
-+    g_autofree char *tlsAlias = NULL;
-+    g_autofree char *secAlias = NULL;
- 
-     /* There's nothing to do if QEMU does not support TLS migration or we were
-      * not asked to enable it. */
-@@ -1083,17 +1083,11 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver,
-         !(apiFlags & VIR_MIGRATE_TLS))
-         return;
- 
--    /* NB: If either or both fail to allocate memory we can still proceed
--     *     since the next time we migrate another deletion attempt will be
--     *     made after successfully generating the aliases. */
-     tlsAlias = qemuAliasTLSObjFromSrcAlias(QEMU_MIGRATION_TLS_ALIAS_BASE);
-     secAlias = qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE, false);
- 
-     qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias);
-     g_clear_pointer(&QEMU_DOMAIN_PRIVATE(vm)->migSecinfo, qemuDomainSecretInfoFree);
--
--    VIR_FREE(tlsAlias);
--    VIR_FREE(secAlias);
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuMigrationParamsResetTLS-Fix-comment.patch b/SOURCES/libvirt-qemuMigrationParamsResetTLS-Fix-comment.patch
deleted file mode 100644
index 0360a14..0000000
--- a/SOURCES/libvirt-qemuMigrationParamsResetTLS-Fix-comment.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 8e6004601d38241aafb9a3f04cc572bb4eb5e4c5 Mon Sep 17 00:00:00 2001
-Message-Id: <8e6004601d38241aafb9a3f04cc572bb4eb5e4c5@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:11:43 +0100
-Subject: [PATCH] qemuMigrationParamsResetTLS: Fix comment
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The comment mentioned that the function resets migration params, but
-that is not true as of commit eb54cb473a8d140e0dd4a7bd42e8bcd72b056368
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 7a34e04d82ba61613c5fa1f8c265cbf2c0276b39)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <3d8e22ae485964827bf28bd1d1529e7757b2350c.1584391726.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_migration_params.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
-index 60b41e287a..0a3b0f8741 100644
---- a/src/qemu/qemu_migration_params.c
-+++ b/src/qemu/qemu_migration_params.c
-@@ -1065,7 +1065,7 @@ qemuMigrationParamsDisableTLS(virDomainObjPtr vm,
-  * @apiFlags: API flags used to start the migration
-  *
-  * Deconstruct all the setup possibly done for TLS - delete the TLS and
-- * security objects, free the secinfo, and reset the migration params to "".
-+ * security objects and free the secinfo
-  */
- static void
- qemuMigrationParamsResetTLS(virQEMUDriverPtr driver,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuMonitorBlockdevAdd-Take-double-pointer-argument.patch b/SOURCES/libvirt-qemuMonitorBlockdevAdd-Take-double-pointer-argument.patch
deleted file mode 100644
index bcec2a6..0000000
--- a/SOURCES/libvirt-qemuMonitorBlockdevAdd-Take-double-pointer-argument.patch
+++ /dev/null
@@ -1,146 +0,0 @@
-From f5fe33504d90bf47d3f766470a04b16eca56bfd8 Mon Sep 17 00:00:00 2001
-Message-Id: <f5fe33504d90bf47d3f766470a04b16eca56bfd8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:04 +0100
-Subject: [PATCH] qemuMonitorBlockdevAdd: Take double pointer argument
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Modify qemuMonitorBlockdevAdd so that it takes a double pointer for the
-@props argument so that it's cleared inside the call. This allows
-writing cleaner callers.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit db57e9daf5ab25bd7a1f377c4dde160b0896ad64)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798366
-Message-Id: <1b4429b82826f69f18b506b8fbd648ff0ac70c38.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c        | 14 ++------------
- src/qemu/qemu_monitor.c      | 16 ++++++----------
- src/qemu/qemu_monitor.h      |  2 +-
- src/qemu/qemu_monitor_json.c |  5 +++--
- src/qemu/qemu_monitor_json.h |  2 +-
- 5 files changed, 13 insertions(+), 26 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 0ee10dd770..710ddfd2cf 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -1537,13 +1537,8 @@ static int
- qemuBlockStorageSourceAttachApplyStorage(qemuMonitorPtr mon,
-                                          qemuBlockStorageSourceAttachDataPtr data)
- {
--    int rv;
--
-     if (data->storageProps) {
--        rv = qemuMonitorBlockdevAdd(mon, data->storageProps);
--        data->storageProps = NULL;
--
--        if (rv < 0)
-+        if (qemuMonitorBlockdevAdd(mon, &data->storageProps) < 0)
-             return -1;
- 
-         data->storageAttached = true;
-@@ -1570,13 +1565,8 @@ static int
- qemuBlockStorageSourceAttachApplyFormat(qemuMonitorPtr mon,
-                                         qemuBlockStorageSourceAttachDataPtr data)
- {
--    int rv;
--
-     if (data->formatProps) {
--        rv = qemuMonitorBlockdevAdd(mon, data->formatProps);
--        data->formatProps = NULL;
--
--        if (rv < 0)
-+        if (qemuMonitorBlockdevAdd(mon, &data->formatProps) < 0)
-             return -1;
- 
-         data->formatAttached = true;
-diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
-index 0e67851690..e3ee48613a 100644
---- a/src/qemu/qemu_monitor.c
-+++ b/src/qemu/qemu_monitor.c
-@@ -4391,23 +4391,19 @@ qemuMonitorBlockdevCreate(qemuMonitorPtr mon,
-  * @mon: monitor object
-  * @props: JSON object describing the blockdev to add
-  *
-- * Adds a new block device (BDS) to qemu. Note that @props is always consumed
-- * by this function and should not be accessed after calling this function.
-+ * Adds a new block device (BDS) to qemu. Note that *@props is consumed
-+ * and set to NULL on success.
-  */
- int
- qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
--                       virJSONValuePtr props)
-+                       virJSONValuePtr *props)
- {
--    VIR_DEBUG("props=%p (node-name=%s)", props,
--              NULLSTR(virJSONValueObjectGetString(props, "node-name")));
-+    VIR_DEBUG("props=%p (node-name=%s)", *props,
-+              NULLSTR(virJSONValueObjectGetString(*props, "node-name")));
- 
--    QEMU_CHECK_MONITOR_GOTO(mon, error);
-+    QEMU_CHECK_MONITOR(mon);
- 
-     return qemuMonitorJSONBlockdevAdd(mon, props);
--
-- error:
--    virJSONValueFree(props);
--    return -1;
- }
- 
- 
-diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
-index cca2cdcb27..6a6b8efaee 100644
---- a/src/qemu/qemu_monitor.h
-+++ b/src/qemu/qemu_monitor.h
-@@ -1323,7 +1323,7 @@ int qemuMonitorBlockdevCreate(qemuMonitorPtr mon,
-                               virJSONValuePtr props);
- 
- int qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
--                           virJSONValuePtr props);
-+                           virJSONValuePtr *props);
- 
- int qemuMonitorBlockdevDel(qemuMonitorPtr mon,
-                            const char *nodename);
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 05a44882f0..3827574ef6 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -8811,12 +8811,13 @@ qemuMonitorJSONBlockdevCreate(qemuMonitorPtr mon,
- 
- int
- qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
--                           virJSONValuePtr props)
-+                           virJSONValuePtr *props)
- {
-     g_autoptr(virJSONValue) cmd = NULL;
-     g_autoptr(virJSONValue) reply = NULL;
-+    virJSONValuePtr pr = g_steal_pointer(props);
- 
--    if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-add", props)))
-+    if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-add", pr)))
-         return -1;
- 
-     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
-diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
-index 61f5b0061d..fd2e09025e 100644
---- a/src/qemu/qemu_monitor_json.h
-+++ b/src/qemu/qemu_monitor_json.h
-@@ -597,7 +597,7 @@ int qemuMonitorJSONBlockdevCreate(qemuMonitorPtr mon,
-     ATTRIBUTE_NONNULL(1);
- 
- int qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
--                               virJSONValuePtr props)
-+                               virJSONValuePtr *props)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
- 
- int qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMonitorJSONBlockdevAdd-Refactor-cleanup.patch b/SOURCES/libvirt-qemuMonitorJSONBlockdevAdd-Refactor-cleanup.patch
deleted file mode 100644
index ef8503f..0000000
--- a/SOURCES/libvirt-qemuMonitorJSONBlockdevAdd-Refactor-cleanup.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From bcbd86ca0e51a5f4fe41b128403d0a86c29150fa Mon Sep 17 00:00:00 2001
-Message-Id: <bcbd86ca0e51a5f4fe41b128403d0a86c29150fa@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:02 +0100
-Subject: [PATCH] qemuMonitorJSONBlockdevAdd: Refactor cleanup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use automatic variable freeing and get rid of the cleanup section.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 643294110c12a41faf2cf24c19948aaee0fcf36f)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798366
-Message-Id: <ad40c6fde708c751fe9be90fd55e9b146cd26cd6.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_monitor_json.c | 16 +++++-----------
- 1 file changed, 5 insertions(+), 11 deletions(-)
-
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 8cd98dbf26..ad490dd324 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -8813,25 +8813,19 @@ int
- qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
-                            virJSONValuePtr props)
- {
--    virJSONValuePtr cmd;
--    virJSONValuePtr reply = NULL;
--    int ret = -1;
-+    g_autoptr(virJSONValue) cmd = NULL;
-+    g_autoptr(virJSONValue) reply = NULL;
- 
-     if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-add", props)))
-         return -1;
- 
-     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (qemuMonitorJSONCheckError(cmd, reply) < 0)
--        goto cleanup;
-+        return -1;
- 
--    ret = 0;
--
-- cleanup:
--    virJSONValueFree(cmd);
--    virJSONValueFree(reply);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMonitorJSONBlockdevDel-Refactor-cleanup.patch b/SOURCES/libvirt-qemuMonitorJSONBlockdevDel-Refactor-cleanup.patch
deleted file mode 100644
index 7378fcc..0000000
--- a/SOURCES/libvirt-qemuMonitorJSONBlockdevDel-Refactor-cleanup.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 21199b5d14d4d21d2a1bdf9f17767d3c4b0bc00d Mon Sep 17 00:00:00 2001
-Message-Id: <21199b5d14d4d21d2a1bdf9f17767d3c4b0bc00d@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:03 +0100
-Subject: [PATCH] qemuMonitorJSONBlockdevDel: Refactor cleanup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use automatic variable freeing and get rid of the cleanup section.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit a592d589aa5015f5beb0f1d4302ceffe9fe7f7e8)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798366
-Message-Id: <e997465c781bb23dad07483313a29f4df2df9a1c.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_monitor_json.c | 16 +++++-----------
- 1 file changed, 5 insertions(+), 11 deletions(-)
-
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index ad490dd324..05a44882f0 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -8833,9 +8833,8 @@ int
- qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
-                            const char *nodename)
- {
--    virJSONValuePtr cmd;
--    virJSONValuePtr reply = NULL;
--    int ret = -1;
-+    g_autoptr(virJSONValue) cmd = NULL;
-+    g_autoptr(virJSONValue) reply = NULL;
- 
-     if (!(cmd = qemuMonitorJSONMakeCommand("blockdev-del",
-                                            "s:node-name", nodename,
-@@ -8843,17 +8842,12 @@ qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
-         return -1;
- 
-     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (qemuMonitorJSONCheckError(cmd, reply) < 0)
--        goto cleanup;
-+        return -1;
- 
--    ret = 0;
--
-- cleanup:
--    virJSONValueFree(cmd);
--    virJSONValueFree(reply);
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuMonitorTestProcessCommandDefaultValidate-Output-validator-output-to-stderr.patch b/SOURCES/libvirt-qemuMonitorTestProcessCommandDefaultValidate-Output-validator-output-to-stderr.patch
deleted file mode 100644
index f5301c3..0000000
--- a/SOURCES/libvirt-qemuMonitorTestProcessCommandDefaultValidate-Output-validator-output-to-stderr.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 881e24d9b7545122a4b74f4545135bffe98fab4c Mon Sep 17 00:00:00 2001
-Message-Id: <881e24d9b7545122a4b74f4545135bffe98fab4c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:04 -0400
-Subject: [PATCH] qemuMonitorTestProcessCommandDefaultValidate: Output
- validator output to stderr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Trying to squeeze the validator output into the monitor reply message
-doesn't make sense and doesn't work well as it's not well formed JSON:
-
-54) qemuMonitorJSONAddNetdev                                          ... libvirt:  error : internal error: cannot parse json { "error":  { "desc": "failed to validate arguments of 'netdev_add' against QAPI schema: {
-   ERROR: variant 'test' for discriminator 'type' not found
-",    "class": "UnexpectedCommand" } }: lexical error: invalid character inside string.
-          ev_add' against QAPI schema: {    ERROR: variant 'test' for
-                     (right here) ------^
-FAILED
-
-Output it to stderr if requested and just note that schema validation
-failed in the error message:
-
-54) qemuMonitorJSONAddNetdev                                          ...
-failed to validate arguments of 'netdev_add' against QAPI schema
-args:
-{
-  "id": "net0",
-  "type": "test"
-}
-
-validator output:
- {
-   ERROR: variant 'test' for discriminator 'type' not found
-
-libvirt: QEMU Driver error : internal error: unable to execute QEMU command 'netdev_add': failed to validate arguments of 'netdev_add' against QAPI schema (to see debug output use VIR_TEST_DEBUG=2)
-FAILED
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5a13eb165559039bda2c1e0e4149dba0e0af820e)
-
-Required on 8.2.1 branch due to adding caps_5.0.0.x86_64.replies
-Prerequisite for https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-2-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- tests/qemumonitortestutils.c | 13 +++++++++++--
- 1 file changed, 11 insertions(+), 2 deletions(-)
-
-diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c
-index b29e5d8cd2..b72f186374 100644
---- a/tests/qemumonitortestutils.c
-+++ b/tests/qemumonitortestutils.c
-@@ -537,10 +537,19 @@ qemuMonitorTestProcessCommandDefaultValidate(qemuMonitorTestPtr test,
-     }
- 
-     if (testQEMUSchemaValidate(args, schemaroot, test->qapischema, &debug) < 0) {
-+        if (virTestGetDebug() == 2) {
-+            g_autofree char *argstr = virJSONValueToString(args, true);
-+            fprintf(stderr,
-+                    "\nfailed to validate arguments of '%s' against QAPI schema\n"
-+                    "args:\n%s\nvalidator output:\n %s\n",
-+                    cmdname, NULLSTR(argstr), virBufferCurrentContent(&debug));
-+        }
-+
-         if (qemuMonitorReportError(test,
-                                    "failed to validate arguments of '%s' "
--                                   "against QAPI schema: %s",
--                                   cmdname, virBufferCurrentContent(&debug)) == 0)
-+                                   "against QAPI schema "
-+                                   "(to see debug output use VIR_TEST_DEBUG=2)",
-+                                   cmdname) == 0)
-             return 1;
-         return -1;
-     }
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemu_capabilities-Rework-domain-caps-cache.patch b/SOURCES/libvirt-qemu_capabilities-Rework-domain-caps-cache.patch
deleted file mode 100644
index 38774cc..0000000
--- a/SOURCES/libvirt-qemu_capabilities-Rework-domain-caps-cache.patch
+++ /dev/null
@@ -1,328 +0,0 @@
-From dbc6ca0acac24c12b30b74b706c848489f008d71 Mon Sep 17 00:00:00 2001
-Message-Id: <dbc6ca0acac24c12b30b74b706c848489f008d71@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 24 Jan 2020 15:05:51 +0100
-Subject: [PATCH] qemu_capabilities: Rework domain caps cache
-
-Since v5.6.0-48-g270583ed98 we try to cache domain capabilities,
-i.e. store filled virDomainCaps in a hash table in virQEMUCaps
-for future use. However, there's a race condition in the way it's
-implemented. We use virQEMUCapsGetDomainCapsCache() to obtain the
-pointer to the hash table, then we search the hash table for
-cached data and if none is found the domcaps is constructed and
-put into the table. Problem is that this is all done without any
-locking, so if there are two threads trying to do the same, one
-will succeed and the other will fail inserting the data into the
-table.
-
-Also, the API looks a bit fishy - obtaining pointer to the hash
-table is dangerous.
-
-The solution is to use a mutex that guards the whole operation
-with the hash table. Then, the API can be changes to return
-virDomainCapsPtr directly.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1791790
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit c76009313f8068c848cad6cb517daf42e6716bb9)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1794691
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <48a4b2f9ab1e8157e4b7baf1b506e90861a39308.1579874719.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_capabilities.c | 122 +++++++++++++++++++++++++++++++++--
- src/qemu/qemu_capabilities.h |  12 +++-
- src/qemu/qemu_conf.c         |  65 +++----------------
- 3 files changed, 136 insertions(+), 63 deletions(-)
-
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index 84c62a4e28..edefb70309 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -594,6 +594,26 @@ struct _virQEMUCapsAccel {
-     qemuMonitorCPUDefsPtr cpuModels;
- };
- 
-+
-+typedef struct _virQEMUDomainCapsCache virQEMUDomainCapsCache;
-+typedef virQEMUDomainCapsCache *virQEMUDomainCapsCachePtr;
-+struct _virQEMUDomainCapsCache {
-+    virObjectLockable parent;
-+
-+    virHashTablePtr cache;
-+};
-+
-+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virQEMUDomainCapsCache, virObjectUnref);
-+
-+static virClassPtr virQEMUDomainCapsCacheClass;
-+static void virQEMUDomainCapsCacheDispose(void *obj)
-+{
-+    virQEMUDomainCapsCachePtr cache = obj;
-+
-+    virHashFree(cache->cache);
-+}
-+
-+
- /*
-  * Update the XML parser/formatter when adding more
-  * information to this struct so that it gets cached
-@@ -625,7 +645,7 @@ struct _virQEMUCaps {
- 
-     virArch arch;
- 
--    virHashTablePtr domCapsCache;
-+    virQEMUDomainCapsCachePtr domCapsCache;
- 
-     size_t ngicCapabilities;
-     virGICCapability *gicCapabilities;
-@@ -651,6 +671,9 @@ static int virQEMUCapsOnceInit(void)
-     if (!VIR_CLASS_NEW(virQEMUCaps, virClassForObject()))
-         return -1;
- 
-+    if (!(VIR_CLASS_NEW(virQEMUDomainCapsCache, virClassForObjectLockable())))
-+        return -1;
-+
-     return 0;
- }
- 
-@@ -1620,6 +1643,22 @@ int virQEMUCapsGetDefaultVersion(virCapsPtr caps,
- }
- 
- 
-+static virQEMUDomainCapsCachePtr
-+virQEMUDomainCapsCacheNew(void)
-+{
-+    g_autoptr(virQEMUDomainCapsCache) cache = NULL;
-+
-+    if (virQEMUCapsInitialize() < 0)
-+        return NULL;
-+
-+    if (!(cache = virObjectLockableNew(virQEMUDomainCapsCacheClass)))
-+        return NULL;
-+
-+    if (!(cache->cache = virHashCreate(5, virObjectFreeHashData)))
-+        return NULL;
-+
-+    return g_steal_pointer(&cache);
-+}
- 
- 
- virQEMUCapsPtr
-@@ -1637,7 +1676,7 @@ virQEMUCapsNew(void)
-     if (!(qemuCaps->flags = virBitmapNew(QEMU_CAPS_LAST)))
-         goto error;
- 
--    if (!(qemuCaps->domCapsCache = virHashCreate(5, virObjectFreeHashData)))
-+    if (!(qemuCaps->domCapsCache = virQEMUDomainCapsCacheNew()))
-         goto error;
- 
-     return qemuCaps;
-@@ -1827,7 +1866,7 @@ void virQEMUCapsDispose(void *obj)
- {
-     virQEMUCapsPtr qemuCaps = obj;
- 
--    virHashFree(qemuCaps->domCapsCache);
-+    virObjectUnref(qemuCaps->domCapsCache);
-     virBitmapFree(qemuCaps->flags);
- 
-     VIR_FREE(qemuCaps->package);
-@@ -1987,9 +2026,82 @@ const char *virQEMUCapsGetPackage(virQEMUCapsPtr qemuCaps)
- }
- 
- 
--virHashTablePtr virQEMUCapsGetDomainCapsCache(virQEMUCapsPtr qemuCaps)
-+struct virQEMUCapsSearchDomcapsData {
-+    const char *path;
-+    const char *machine;
-+    virArch arch;
-+    virDomainVirtType virttype;
-+};
-+
-+
-+static int
-+virQEMUCapsSearchDomcaps(const void *payload,
-+                         const void *name G_GNUC_UNUSED,
-+                         const void *opaque)
- {
--    return qemuCaps->domCapsCache;
-+    virDomainCapsPtr domCaps = (virDomainCapsPtr) payload;
-+    struct virQEMUCapsSearchDomcapsData *data = (struct virQEMUCapsSearchDomcapsData *) opaque;
-+
-+    if (STREQ_NULLABLE(data->path, domCaps->path) &&
-+        STREQ_NULLABLE(data->machine, domCaps->machine) &&
-+        data->arch == domCaps->arch &&
-+        data->virttype == domCaps->virttype)
-+        return 1;
-+
-+    return 0;
-+}
-+
-+
-+virDomainCapsPtr
-+virQEMUCapsGetDomainCapsCache(virQEMUCapsPtr qemuCaps,
-+                              const char *machine,
-+                              virArch arch,
-+                              virDomainVirtType virttype,
-+                              virArch hostarch,
-+                              bool privileged,
-+                              virFirmwarePtr *firmwares,
-+                              size_t nfirmwares)
-+{
-+    virQEMUDomainCapsCachePtr cache = qemuCaps->domCapsCache;
-+    virDomainCapsPtr domCaps = NULL;
-+    const char *path = virQEMUCapsGetBinary(qemuCaps);
-+    struct virQEMUCapsSearchDomcapsData data = {
-+        .path = path,
-+        .machine = machine,
-+        .arch = arch,
-+        .virttype = virttype,
-+    };
-+
-+    virObjectLock(cache);
-+
-+    domCaps = virHashSearch(cache->cache, virQEMUCapsSearchDomcaps, &data, NULL);
-+
-+    if (!domCaps) {
-+        g_autoptr(virDomainCaps) tempDomCaps = NULL;
-+        g_autofree char *key = NULL;
-+
-+        /* hash miss, build new domcaps */
-+        if (!(tempDomCaps = virDomainCapsNew(path, machine,
-+                                             arch, virttype)))
-+            goto cleanup;
-+
-+        if (virQEMUCapsFillDomainCaps(qemuCaps, hostarch, tempDomCaps,
-+                                      privileged, firmwares, nfirmwares) < 0)
-+            goto cleanup;
-+
-+        key = g_strdup_printf("%d:%d:%s:%s", arch, virttype,
-+                              NULLSTR(machine), path);
-+
-+        if (virHashAddEntry(cache->cache, key, tempDomCaps) < 0)
-+            goto cleanup;
-+
-+        domCaps = g_steal_pointer(&tempDomCaps);
-+    }
-+
-+    virObjectRef(domCaps);
-+ cleanup:
-+    virObjectUnlock(cache);
-+    return domCaps;
- }
- 
- 
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 193c19fc81..d76c1dbfa9 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -571,7 +571,17 @@ const char *virQEMUCapsGetBinary(virQEMUCapsPtr qemuCaps);
- virArch virQEMUCapsGetArch(virQEMUCapsPtr qemuCaps);
- unsigned int virQEMUCapsGetVersion(virQEMUCapsPtr qemuCaps);
- const char *virQEMUCapsGetPackage(virQEMUCapsPtr qemuCaps);
--virHashTablePtr virQEMUCapsGetDomainCapsCache(virQEMUCapsPtr qemuCaps);
-+
-+virDomainCapsPtr
-+virQEMUCapsGetDomainCapsCache(virQEMUCapsPtr qemuCaps,
-+                              const char *machine,
-+                              virArch arch,
-+                              virDomainVirtType virttype,
-+                              virArch hostarch,
-+                              bool privileged,
-+                              virFirmwarePtr *firmwares,
-+                              size_t nfirmwares);
-+
- unsigned int virQEMUCapsGetKVMVersion(virQEMUCapsPtr qemuCaps);
- int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
-                                  virDomainVirtType type,
-diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index e33ef4895e..029996427e 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1338,31 +1338,6 @@ virCapsPtr virQEMUDriverGetCapabilities(virQEMUDriverPtr driver,
- }
- 
- 
--struct virQEMUDriverSearchDomcapsData {
--    const char *path;
--    const char *machine;
--    virArch arch;
--    virDomainVirtType virttype;
--};
--
--
--static int
--virQEMUDriverSearchDomcaps(const void *payload,
--                           const void *name G_GNUC_UNUSED,
--                           const void *opaque)
--{
--    virDomainCapsPtr domCaps = (virDomainCapsPtr) payload;
--    struct virQEMUDriverSearchDomcapsData *data = (struct virQEMUDriverSearchDomcapsData *) opaque;
--
--    if (STREQ_NULLABLE(data->path, domCaps->path) &&
--        STREQ_NULLABLE(data->machine, domCaps->machine) &&
--        data->arch == domCaps->arch &&
--        data->virttype == domCaps->virttype)
--        return 1;
--
--    return 0;
--}
--
- /**
-  * virQEMUDriverGetDomainCapabilities:
-  *
-@@ -1381,40 +1356,16 @@ virQEMUDriverGetDomainCapabilities(virQEMUDriverPtr driver,
-                                    virArch arch,
-                                    virDomainVirtType virttype)
- {
--    g_autoptr(virDomainCaps) domCaps = NULL;
-     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
--    virHashTablePtr domCapsCache = virQEMUCapsGetDomainCapsCache(qemuCaps);
--    struct virQEMUDriverSearchDomcapsData data = {
--        .path = virQEMUCapsGetBinary(qemuCaps),
--        .machine = machine,
--        .arch = arch,
--        .virttype = virttype,
--    };
- 
--    domCaps = virHashSearch(domCapsCache,
--                            virQEMUDriverSearchDomcaps, &data, NULL);
--    if (!domCaps) {
--        g_autofree char *key = NULL;
--
--        /* hash miss, build new domcaps */
--        if (!(domCaps = virDomainCapsNew(data.path, data.machine,
--                                         data.arch, data.virttype)))
--            return NULL;
--
--        if (virQEMUCapsFillDomainCaps(qemuCaps, driver->hostarch, domCaps,
--                                      driver->privileged,
--                                      cfg->firmwares, cfg->nfirmwares) < 0)
--            return NULL;
--
--        key = g_strdup_printf("%d:%d:%s:%s", data.arch, data.virttype,
--                              NULLSTR(data.machine), NULLSTR(data.path));
--
--        if (virHashAddEntry(domCapsCache, key, domCaps) < 0)
--            return NULL;
--    }
--
--    virObjectRef(domCaps);
--    return g_steal_pointer(&domCaps);
-+    return virQEMUCapsGetDomainCapsCache(qemuCaps,
-+                                         machine,
-+                                         arch,
-+                                         virttype,
-+                                         driver->hostarch,
-+                                         driver->privileged,
-+                                         cfg->firmwares,
-+                                         cfg->nfirmwares);
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu_command-Generate-memory-only-after-controllers.patch b/SOURCES/libvirt-qemu_command-Generate-memory-only-after-controllers.patch
new file mode 100644
index 0000000..492113e
--- /dev/null
+++ b/SOURCES/libvirt-qemu_command-Generate-memory-only-after-controllers.patch
@@ -0,0 +1,663 @@
+From e4e8b74f2cf090c8b29efcd3ceac4e4c4d07b929 Mon Sep 17 00:00:00 2001
+Message-Id: <e4e8b74f2cf090c8b29efcd3ceac4e4c4d07b929@dist-git>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Thu, 27 Jan 2022 11:13:53 +0100
+Subject: [PATCH] qemu_command: Generate memory only after controllers
+
+Currently, memory device (def->mems) part of cmd line is
+generated before any controller. In majority of cases it doesn't
+matter because neither of memory devices live on a bus that's
+created by an exposed controller (e.g. there's no DIMM
+controller, at least not exposed). Except for virtio-mem and
+virtio-pmem, which do have a PCI address. And if it so happens
+that the device goes onto non-default bus (pci.0) starting such
+guest fails, because the controller that creates the desired bus
+wasn't processed yet. QEMU processes arguments in order.
+
+For instance, if virtio-mem has address with bus='0x01' QEMU
+refuses to start with the following message:
+
+  Bus 'pci.1' not found
+
+Similarly for virtio-pmem. I've successfully tested migration and
+changing the order does not affect migration stream.
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2047271
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+Reviewed-by: Andrea Bolognani <abologna@redhat.com>
+(cherry picked from commit af23241cfed712f69450e82135d7c7b4899736de)
+
+Conflicts:
+tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args:
+tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args:
+tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args:
+  These happened because downstream we don't use JSON for -device,
+  but upstream we do (as of 1a691fe1c84090da80a652c4c80ac00a6134a69b).
+
+Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2050697
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/qemu/qemu_command.c                                   | 6 +++---
+ tests/qemuxml2argvdata/hugepages-memaccess.args           | 4 ++--
+ tests/qemuxml2argvdata/hugepages-memaccess2.args          | 4 ++--
+ tests/qemuxml2argvdata/hugepages-numa-default-dimm.args   | 4 ++--
+ .../qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args  | 4 ++--
+ .../qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args | 4 ++--
+ tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args      | 8 ++++----
+ tests/qemuxml2argvdata/memory-hotplug-dimm.args           | 8 ++++----
+ .../memory-hotplug-nvdimm-access.x86_64-latest.args       | 4 ++--
+ .../memory-hotplug-nvdimm-align.x86_64-5.2.0.args         | 4 ++--
+ .../memory-hotplug-nvdimm-align.x86_64-latest.args        | 4 ++--
+ .../memory-hotplug-nvdimm-label.x86_64-5.2.0.args         | 4 ++--
+ .../memory-hotplug-nvdimm-label.x86_64-latest.args        | 4 ++--
+ .../memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args          | 4 ++--
+ .../memory-hotplug-nvdimm-pmem.x86_64-latest.args         | 4 ++--
+ .../memory-hotplug-nvdimm-ppc64-abi-update.args           | 4 ++--
+ tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args   | 4 ++--
+ .../memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args      | 4 ++--
+ .../memory-hotplug-nvdimm-readonly.x86_64-latest.args     | 4 ++--
+ .../memory-hotplug-nvdimm.x86_64-latest.args              | 4 ++--
+ .../memory-hotplug-ppc64-nonuma-abi-update.args           | 8 ++++----
+ tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args   | 8 ++++----
+ .../memory-hotplug-virtio-mem.x86_64-latest.args          | 8 ++++----
+ .../memory-hotplug-virtio-pmem.x86_64-5.2.0.args          | 4 ++--
+ .../memory-hotplug-virtio-pmem.x86_64-latest.args         | 4 ++--
+ tests/qemuxml2argvdata/pages-dimm-discard.args            | 8 ++++----
+ 26 files changed, 65 insertions(+), 65 deletions(-)
+
+diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
+index 6b4647a711..2acdcca2ff 100644
+--- a/src/qemu/qemu_command.c
++++ b/src/qemu/qemu_command.c
+@@ -10565,9 +10565,6 @@ qemuBuildCommandLine(virQEMUDriver *driver,
+         qemuBuildNumaCommandLine(cfg, def, cmd, priv) < 0)
+         return NULL;
+ 
+-    if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0)
+-        return NULL;
+-
+     virUUIDFormat(def->uuid, uuid);
+     virCommandAddArgList(cmd, "-uuid", uuid, NULL);
+ 
+@@ -10617,6 +10614,9 @@ qemuBuildCommandLine(virQEMUDriver *driver,
+     if (qemuBuildControllersCommandLine(cmd, def, qemuCaps) < 0)
+         return NULL;
+ 
++    if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0)
++        return NULL;
++
+     if (qemuBuildHubCommandLine(cmd, def, qemuCaps) < 0)
+         return NULL;
+ 
+diff --git a/tests/qemuxml2argvdata/hugepages-memaccess.args b/tests/qemuxml2argvdata/hugepages-memaccess.args
+index b89f791697..a369c7f6da 100644
+--- a/tests/qemuxml2argvdata/hugepages-memaccess.args
++++ b/tests/qemuxml2argvdata/hugepages-memaccess.args
+@@ -24,8 +24,6 @@ QEMU_AUDIO_DRV=none \
+ -numa node,nodeid=2,cpus=2,memdev=ram-node2 \
+ -object memory-backend-file,id=ram-node3,mem-path=/dev/hugepages1G/libvirt/qemu/-1-QEMUGuest1,share=off,prealloc=on,size=1073741824,host-nodes=3,policy=bind \
+ -numa node,nodeid=3,cpus=3,memdev=ram-node3 \
+--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
+--device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -37,6 +35,8 @@ QEMU_AUDIO_DRV=none \
+ -no-acpi \
+ -boot strict=on \
+ -usb \
++-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
++-device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
+ -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 \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
+diff --git a/tests/qemuxml2argvdata/hugepages-memaccess2.args b/tests/qemuxml2argvdata/hugepages-memaccess2.args
+index 0c296797e9..434ebdaa62 100644
+--- a/tests/qemuxml2argvdata/hugepages-memaccess2.args
++++ b/tests/qemuxml2argvdata/hugepages-memaccess2.args
+@@ -24,8 +24,6 @@ QEMU_AUDIO_DRV=none \
+ -numa node,nodeid=2,cpus=2,memdev=ram-node2 \
+ -object memory-backend-file,id=ram-node3,mem-path=/var/lib/libvirt/qemu/ram/-1-QEMUGuest1/ram-node3,share=off,size=1073741824,host-nodes=3,policy=bind \
+ -numa node,nodeid=3,cpus=3,memdev=ram-node3 \
+--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
+--device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -37,6 +35,8 @@ QEMU_AUDIO_DRV=none \
+ -no-acpi \
+ -boot strict=on \
+ -usb \
++-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,share=on,prealloc=on,size=536870912,host-nodes=0-3,policy=bind \
++-device pc-dimm,node=1,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
+ -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 \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
+diff --git a/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
+index f560cabf8e..57bb70346d 100644
+--- a/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
++++ b/tests/qemuxml2argvdata/hugepages-numa-default-dimm.args
+@@ -19,8 +19,6 @@ QEMU_AUDIO_DRV=none \
+ -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,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 \
+@@ -32,4 +30,6 @@ QEMU_AUDIO_DRV=none \
+ -no-acpi \
+ -boot strict=on \
+ -usb \
++-object memory-backend-file,id=memdimm0,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 \
+ -msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
+index 8b5665f86e..7d9dcfb4df 100644
+--- a/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/hugepages-nvdimm.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-file","id":"ram-node0","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","share":true,"prealloc":true,"size":1073741824}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912}' \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912}' \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -audiodev '{"id":"audio1","driver":"none"}' \
+ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+ -msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
+index 8a40e2d79c..04a320d469 100644
+--- a/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memfd-memory-numa.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-instance-00000092/.config \
+ -smp 8,sockets=1,dies=1,cores=8,threads=1 \
+ -object '{"qom-type":"memory-backend-memfd","id":"ram-node0","hugetlb":true,"hugetlbsize":2097152,"share":true,"prealloc":true,"size":15032385536,"host-nodes":[3],"policy":"preferred"}' \
+ -numa node,nodeid=0,cpus=0-7,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912,"host-nodes":[3],"policy":"preferred"}' \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid 126f2720-6f8e-45ab-a886-ec9277079a67 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-instance-00000092/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":true,"prealloc":true,"size":536870912,"host-nodes":[3],"policy":"preferred"}' \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -audiodev '{"id":"audio1","driver":"none"}' \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
+ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args
+index 907072d55d..b36117f1e8 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-dimm-addr.args
+@@ -17,10 +17,6 @@ QEMU_AUDIO_DRV=none \
+ -realtime mlock=off \
+ -smp 2,sockets=2,cores=1,threads=1 \
+ -numa node,nodeid=0,cpus=0-1,mem=214 \
+--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
+--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
+--object memory-backend-ram,id=memdimm2,size=536870912 \
+--device pc-dimm,node=0,memdev=memdimm2,id=dimm2,slot=2 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -32,6 +28,10 @@ QEMU_AUDIO_DRV=none \
+ -no-acpi \
+ -boot strict=on \
+ -usb \
++-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
++-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0,addr=4294967296 \
++-object memory-backend-ram,id=memdimm2,size=536870912 \
++-device pc-dimm,node=0,memdev=memdimm2,id=dimm2,slot=2 \
+ -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 \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-dimm.args b/tests/qemuxml2argvdata/memory-hotplug-dimm.args
+index 5d87f4a3ef..72c2803c5e 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-dimm.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-dimm.args
+@@ -17,10 +17,6 @@ QEMU_AUDIO_DRV=none \
+ -realtime mlock=off \
+ -smp 2,sockets=2,cores=1,threads=1 \
+ -numa node,nodeid=0,cpus=0-1,mem=214 \
+--object memory-backend-ram,id=memdimm0,size=536870912 \
+--device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
+--object memory-backend-file,id=memdimm1,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
+--device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -32,6 +28,10 @@ QEMU_AUDIO_DRV=none \
+ -no-acpi \
+ -boot strict=on \
+ -usb \
++-object memory-backend-ram,id=memdimm0,size=536870912 \
++-device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
++-object memory-backend-file,id=memdimm1,mem-path=/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1,prealloc=on,size=536870912,host-nodes=1-3,policy=bind \
++-device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
+ -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 \
+ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
+index 3664150c51..94aeadabce 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-access.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args
+index 6c28c86004..0b29a6fded 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-5.2.0.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object memory-backend-ram,id=ram-node0,size=224395264 \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912,align=2097152 \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912,align=2097152 \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
+index aa77849079..5045cc8318 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912,"align":2097152}' \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912,"align":2097152}' \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args
+index c45b401af5..7c67161b78 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-5.2.0.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object memory-backend-ram,id=ram-node0,size=224395264 \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
+--device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
++-device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
+index 07863ba87c..9466877699 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-label.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
+--device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
++-device nvdimm,node=0,label-size=131072,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args
+index 3f35d4dca2..c4dae0cfd1 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-5.2.0.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object memory-backend-ram,id=ram-node0,size=224395264 \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,size=536870912,pmem=on \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,size=536870912,pmem=on \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
+index 4ed86feb01..9324535ac3 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"size":536870912,"pmem":true}' \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"size":536870912,"pmem":true}' \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args
+index ebdb0429d0..55b16c9dc2 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64-abi-update.args
+@@ -17,8 +17,6 @@ QEMU_AUDIO_DRV=none \
+ -realtime mlock=off \
+ -smp 2,sockets=2,cores=1,threads=1 \
+ -numa node,nodeid=0,cpus=0-1,mem=1024 \
+--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
+--device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -28,4 +26,6 @@ QEMU_AUDIO_DRV=none \
+ -rtc base=utc \
+ -no-shutdown \
+ -boot strict=on \
++-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
++-device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args
+index ebdb0429d0..55b16c9dc2 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-ppc64.args
+@@ -17,8 +17,6 @@ QEMU_AUDIO_DRV=none \
+ -realtime mlock=off \
+ -smp 2,sockets=2,cores=1,threads=1 \
+ -numa node,nodeid=0,cpus=0-1,mem=1024 \
+--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
+--device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -28,4 +26,6 @@ QEMU_AUDIO_DRV=none \
+ -rtc base=utc \
+ -no-shutdown \
+ -boot strict=on \
++-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,prealloc=on,size=537001984 \
++-device nvdimm,node=0,label-size=131072,uuid=49545eb3-75e1-2d0a-acdd-f0294406c99e,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args
+index bca2f286ba..b1873c100f 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-5.2.0.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object memory-backend-ram,id=ram-node0,size=224395264 \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
+--device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object memory-backend-file,id=memnvdimm0,mem-path=/tmp/nvdimm,share=off,prealloc=on,size=536870912 \
++-device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
+index 8be7f35cec..4f11d22e00 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm-readonly.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":224395264}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
+--device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","share":false,"prealloc":true,"size":536870912}' \
++-device nvdimm,node=0,unarmed=on,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
+index 307698749e..434a0f91cf 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-nvdimm.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":1073741824}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","prealloc":true,"size":536870912}' \
+--device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memnvdimm0","mem-path":"/tmp/nvdimm","prealloc":true,"size":536870912}' \
++-device nvdimm,node=0,memdev=memnvdimm0,id=nvdimm0,slot=0 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args
+index 5380c9e805..e8a6451841 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.args
+@@ -16,10 +16,6 @@ QEMU_AUDIO_DRV=none \
+ -m size=1048576k,slots=16,maxmem=4194304k \
+ -realtime mlock=off \
+ -smp 1,sockets=1,cores=1,threads=1 \
+--object memory-backend-ram,id=memdimm0,size=536870912 \
+--device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
+--object memory-backend-ram,id=memdimm1,size=536870912 \
+--device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
+ -uuid 49545eb3-75e1-2d0a-acdd-f0294406c99e \
+ -display none \
+ -no-user-config \
+@@ -29,4 +25,8 @@ QEMU_AUDIO_DRV=none \
+ -rtc base=utc \
+ -no-shutdown \
+ -boot strict=on \
++-object memory-backend-ram,id=memdimm0,size=536870912 \
++-device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
++-object memory-backend-ram,id=memdimm1,size=536870912 \
++-device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
+ -msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args
+index acff36eb78..181409cde0 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma.args
+@@ -16,10 +16,6 @@ QEMU_AUDIO_DRV=none \
+ -m size=1310720k,slots=16,maxmem=4194304k \
+ -realtime mlock=off \
+ -smp 1,sockets=1,cores=1,threads=1 \
+--object memory-backend-ram,id=memdimm0,size=536870912 \
+--device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
+--object memory-backend-ram,id=memdimm1,size=536870912 \
+--device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
+ -uuid 49545eb3-75e1-2d0a-acdd-f0294406c99e \
+ -display none \
+ -no-user-config \
+@@ -29,4 +25,8 @@ QEMU_AUDIO_DRV=none \
+ -rtc base=utc \
+ -no-shutdown \
+ -boot strict=on \
++-object memory-backend-ram,id=memdimm0,size=536870912 \
++-device pc-dimm,memdev=memdimm0,id=dimm0,slot=0 \
++-object memory-backend-ram,id=memdimm1,size=536870912 \
++-device pc-dimm,memdev=memdimm1,id=dimm1,slot=1 \
+ -msg timestamp=on
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
+index 8747b249da..30b635d365 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-mem.x86_64-latest.args
+@@ -18,10 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-ram","id":"memvirtiomem0","reserve":false,"size":1073741824}' \
+--device virtio-mem-pci,node=0,block-size=2097152,requested-size=536870912,memdev=memvirtiomem0,id=virtiomem0,bus=pci.0,addr=0x2 \
+--object '{"qom-type":"memory-backend-file","id":"memvirtiomem1","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","reserve":false,"size":2147483648,"host-nodes":[1,2,3],"policy":"bind"}' \
+--device virtio-mem-pci,node=0,block-size=2097152,requested-size=1073741824,memdev=memvirtiomem1,id=virtiomem1,bus=pci.0,addr=0x3 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -33,6 +29,10 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-ram","id":"memvirtiomem0","reserve":false,"size":1073741824}' \
++-device virtio-mem-pci,node=0,block-size=2097152,requested-size=536870912,memdev=memvirtiomem0,id=virtiomem0,bus=pci.0,addr=0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memvirtiomem1","mem-path":"/dev/hugepages2M/libvirt/qemu/-1-QEMUGuest1","reserve":false,"size":2147483648,"host-nodes":[1,2,3],"policy":"bind"}' \
++-device virtio-mem-pci,node=0,block-size=2097152,requested-size=1073741824,memdev=memvirtiomem1,id=virtiomem1,bus=pci.0,addr=0x3 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args
+index 17fd98fb88..8fa678c209 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-5.2.0.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object memory-backend-ram,id=ram-node0,size=2145386496 \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object memory-backend-file,id=memvirtiopmem0,mem-path=/tmp/virtio_pmem,share=on,size=536870912 \
+--device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object memory-backend-file,id=memvirtiopmem0,mem-path=/tmp/virtio_pmem,share=on,size=536870912 \
++-device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
+index e5a91b6d33..95ff490cef 100644
+--- a/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
++++ b/tests/qemuxml2argvdata/memory-hotplug-virtio-pmem.x86_64-latest.args
+@@ -18,8 +18,6 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -smp 2,sockets=2,dies=1,cores=1,threads=1 \
+ -object '{"qom-type":"memory-backend-ram","id":"ram-node0","size":2145386496}' \
+ -numa node,nodeid=0,cpus=0-1,memdev=ram-node0 \
+--object '{"qom-type":"memory-backend-file","id":"memvirtiopmem0","mem-path":"/tmp/virtio_pmem","share":true,"size":536870912}' \
+--device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
+ -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+ -display none \
+ -no-user-config \
+@@ -31,6 +29,8 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
+ -no-acpi \
+ -boot strict=on \
+ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
++-object '{"qom-type":"memory-backend-file","id":"memvirtiopmem0","mem-path":"/tmp/virtio_pmem","share":true,"size":536870912}' \
++-device virtio-pmem-pci,memdev=memvirtiopmem0,id=virtiopmem0,bus=pci.0,addr=0x5 \
+ -blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
+ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \
+ -device ide-hd,bus=ide.0,unit=0,drive=libvirt-1-format,id=ide0-0-0,bootindex=1 \
+diff --git a/tests/qemuxml2argvdata/pages-dimm-discard.args b/tests/qemuxml2argvdata/pages-dimm-discard.args
+index 2ebe9c1350..e63c908549 100644
+--- a/tests/qemuxml2argvdata/pages-dimm-discard.args
++++ b/tests/qemuxml2argvdata/pages-dimm-discard.args
+@@ -17,10 +17,6 @@ QEMU_AUDIO_DRV=none \
+ -realtime mlock=off \
+ -smp 2,sockets=2,cores=1,threads=1 \
+ -numa node,nodeid=0,cpus=0-1,mem=1024 \
+--object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,prealloc=on,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,mem-path=/var/lib/libvirt/qemu/ram/-1-fedora/dimm1,discard-data=on,share=off,size=536870912 \
+--device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
+ -uuid 63840878-0deb-4095-97e6-fc444d9bc9fa \
+ -display none \
+ -no-user-config \
+@@ -32,4 +28,8 @@ QEMU_AUDIO_DRV=none \
+ -no-acpi \
+ -boot strict=on \
+ -usb \
++-object memory-backend-file,id=memdimm0,mem-path=/dev/hugepages1G/libvirt/qemu/-1-fedora,prealloc=on,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,mem-path=/var/lib/libvirt/qemu/ram/-1-fedora/dimm1,discard-data=on,share=off,size=536870912 \
++-device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
+ -msg timestamp=on
+-- 
+2.35.1
+
diff --git a/SOURCES/libvirt-qemu_command-Rename-qemuBuildNumaArgStr.patch b/SOURCES/libvirt-qemu_command-Rename-qemuBuildNumaArgStr.patch
deleted file mode 100644
index 7b61648..0000000
--- a/SOURCES/libvirt-qemu_command-Rename-qemuBuildNumaArgStr.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 4fd196d6126cb9daeb771522ad23ecba0e9fd5c9 Mon Sep 17 00:00:00 2001
-Message-Id: <4fd196d6126cb9daeb771522ad23ecba0e9fd5c9@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:35 +0200
-Subject: [PATCH] qemu_command: Rename qemuBuildNumaArgStr()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function doesn't just build the argument for -numa. Since the
--numa can be repeated multiple times, it also puts -numa onto the
-cmd line. Also, the rest of the functions has 'Command' infix.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 8ba1792785e17736db866d62b68812a9c7e7ca40)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <f5e22c8cfce2a9636303e916d97ce0501376137f.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_command.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
-index ed5f60e82e..8c4f7a015f 100644
---- a/src/qemu/qemu_command.c
-+++ b/src/qemu/qemu_command.c
-@@ -7363,10 +7363,10 @@ qemuBuildIOThreadCommandLine(virCommandPtr cmd,
- 
- 
- static int
--qemuBuildNumaArgStr(virQEMUDriverConfigPtr cfg,
--                    virDomainDefPtr def,
--                    virCommandPtr cmd,
--                    qemuDomainObjPrivatePtr priv)
-+qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg,
-+                         virDomainDefPtr def,
-+                         virCommandPtr cmd,
-+                         qemuDomainObjPrivatePtr priv)
- {
-     size_t i, j;
-     virQEMUCapsPtr qemuCaps = priv->qemuCaps;
-@@ -9930,7 +9930,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
-         return NULL;
- 
-     if (virDomainNumaGetNodeCount(def->numa) &&
--        qemuBuildNumaArgStr(cfg, def, cmd, priv) < 0)
-+        qemuBuildNumaCommandLine(cfg, def, cmd, priv) < 0)
-         return NULL;
- 
-     if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0)
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemu_conf-Avoid-dereferencing-NULL-in-virQEMUDriverGetHost-NUMACaps-CPU.patch b/SOURCES/libvirt-qemu_conf-Avoid-dereferencing-NULL-in-virQEMUDriverGetHost-NUMACaps-CPU.patch
deleted file mode 100644
index 2723729..0000000
--- a/SOURCES/libvirt-qemu_conf-Avoid-dereferencing-NULL-in-virQEMUDriverGetHost-NUMACaps-CPU.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From f06f903d5cb3c14853a7213b6a70c078380b7a62 Mon Sep 17 00:00:00 2001
-Message-Id: <f06f903d5cb3c14853a7213b6a70c078380b7a62@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 24 Jan 2020 15:05:50 +0100
-Subject: [PATCH] qemu_conf: Avoid dereferencing NULL in
- virQEMUDriverGetHost{NUMACaps, CPU}
-
-When fixing [1] I've ran attached reproducer and had it spawn
-1024 threads and query capabilities XML in each one of them. This
-lead libvirtd to hit the RLIMIT_NOFILE limit which was kind of
-expected. What wasn't expected was a subsequent segfault. It
-happened because virCPUProbeHost failed and returned NULL. We've
-taken the NULL and passed it to virCapabilitiesHostNUMARef()
-which dereferenced it. Code inspection showed the same flas in
-virQEMUDriverGetHostNUMACaps(), so I'm fixing both places.
-
-1: https://bugzilla.redhat.com/show_bug.cgi?id=1791790
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit cc361a34c53210d682dbc5f2d506b4a23b71e399)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1794691
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <5de22b27463cd2803b3910d7ef45a0e4bc08ad47.1579874719.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_conf.c | 18 ++++++++++++++----
- 1 file changed, 14 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
-index 3d2f0e7bbb..e33ef4895e 100644
---- a/src/qemu/qemu_conf.c
-+++ b/src/qemu/qemu_conf.c
-@@ -1201,32 +1201,42 @@ virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver,
- virCapsHostNUMAPtr
- virQEMUDriverGetHostNUMACaps(virQEMUDriverPtr driver)
- {
-+    virCapsHostNUMAPtr hostnuma;
-+
-     qemuDriverLock(driver);
- 
-     if (!driver->hostnuma)
-         driver->hostnuma = virCapabilitiesHostNUMANewHost();
- 
-+    hostnuma = driver->hostnuma;
-+
-     qemuDriverUnlock(driver);
- 
--    virCapabilitiesHostNUMARef(driver->hostnuma);
-+    if (hostnuma)
-+        virCapabilitiesHostNUMARef(hostnuma);
- 
--    return driver->hostnuma;
-+    return hostnuma;
- }
- 
- 
- virCPUDefPtr
- virQEMUDriverGetHostCPU(virQEMUDriverPtr driver)
- {
-+    virCPUDefPtr hostcpu;
-+
-     qemuDriverLock(driver);
- 
-     if (!driver->hostcpu)
-         driver->hostcpu = virCPUProbeHost(virArchFromHost());
- 
-+    hostcpu = driver->hostcpu;
-+
-     qemuDriverUnlock(driver);
- 
--    virCPUDefRef(driver->hostcpu);
-+    if (hostcpu)
-+        virCPUDefRef(hostcpu);
- 
--    return driver->hostcpu;
-+    return hostcpu;
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu_domain-Modify-access-to-a-NVMe-disk-iff-needed.patch b/SOURCES/libvirt-qemu_domain-Modify-access-to-a-NVMe-disk-iff-needed.patch
deleted file mode 100644
index 5defcdf..0000000
--- a/SOURCES/libvirt-qemu_domain-Modify-access-to-a-NVMe-disk-iff-needed.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 659d623740e3f15135b4c7b1e44d18ee08e67a11 Mon Sep 17 00:00:00 2001
-Message-Id: <659d623740e3f15135b4c7b1e44d18ee08e67a11@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 14 Feb 2020 16:17:08 +0100
-Subject: [PATCH] qemu_domain: Modify access to a NVMe disk iff needed
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If a domain has a NVMe disk it already has the access configured.
-Trying to configure it again on a commit or some other operation
-is wrong and condemned to failure.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b18328256b565806c04c153ce49fc3641412b35b)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1519005#c24
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <ee3871eb043b3ae82daca2e365b696c8963665f7.1581693409.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_domain.c | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 1bed117eb0..8e0e919f9a 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -11828,13 +11828,12 @@ qemuDomainStorageSourceAccessModify(virQEMUDriverPtr driver,
- 
-     revoke_lockspace = true;
- 
--    if (qemuDomainStorageSourceAccessModifyNVMe(driver, vm, src, false) < 0)
--        goto revoke;
--
--    revoke_nvme = true;
--
--    /* When modifying access of existing @src namespace does not need update */
-     if (!(flags & QEMU_DOMAIN_STORAGE_SOURCE_ACCESS_MODIFY_ACCESS)) {
-+        if (qemuDomainStorageSourceAccessModifyNVMe(driver, vm, src, false) < 0)
-+            goto revoke;
-+
-+        revoke_nvme = true;
-+
-         if (qemuDomainNamespaceSetupDisk(vm, src) < 0)
-             goto revoke;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemu_firmware-don-t-error-out-for-unknown-firmware-features.patch b/SOURCES/libvirt-qemu_firmware-don-t-error-out-for-unknown-firmware-features.patch
deleted file mode 100644
index 6cab919..0000000
--- a/SOURCES/libvirt-qemu_firmware-don-t-error-out-for-unknown-firmware-features.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From c8ede44db2e94444e5a8ee38e21eda2b42717879 Mon Sep 17 00:00:00 2001
-Message-Id: <c8ede44db2e94444e5a8ee38e21eda2b42717879@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Tue, 18 May 2021 15:03:02 +0200
-Subject: [PATCH] qemu_firmware: don't error out for unknown firmware features
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When QEMU introduces new firmware features libvirt will fail until we
-list that feature in our code as well which doesn't sound right.
-
-We should simply ignore the new feature until we add a proper support
-for it.
-
-Reported-by: Laszlo Ersek <lersek@redhat.com>
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 61d95a1073833ec4323c1ef28e71e913c55aa7b9)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1961562
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <8989d70d49d8a720532a8c25e3e73d9b3bf2a495.1621342722.git.phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/qemu/qemu_firmware.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
-index c84d03f0a8..8ef515ca57 100644
---- a/src/qemu/qemu_firmware.c
-+++ b/src/qemu/qemu_firmware.c
-@@ -570,6 +570,7 @@ qemuFirmwareFeatureParse(const char *path,
-     virJSONValuePtr featuresJSON;
-     g_autoptr(qemuFirmwareFeature) features = NULL;
-     size_t nfeatures;
-+    size_t nparsed = 0;
-     size_t i;
- 
-     if (!(featuresJSON = virJSONValueObjectGetArray(doc, "features"))) {
-@@ -590,17 +591,16 @@ qemuFirmwareFeatureParse(const char *path,
-         int tmp;
- 
-         if ((tmp = qemuFirmwareFeatureTypeFromString(tmpStr)) <= 0) {
--            virReportError(VIR_ERR_INTERNAL_ERROR,
--                           _("unknown feature %s"),
--                           tmpStr);
--            return -1;
-+            VIR_DEBUG("ignoring unknown QEMU firmware feature '%s'", tmpStr);
-+            continue;
-         }
- 
--        features[i] = tmp;
-+        features[nparsed] = tmp;
-+        nparsed++;
-     }
- 
-     fw->features = g_steal_pointer(&features);
--    fw->nfeatures = nfeatures;
-+    fw->nfeatures = nparsed;
-     return 0;
- }
- 
--- 
-2.31.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-JSON-JSON-test-cases-for-block-device-backends.patch b/SOURCES/libvirt-qemublocktest-Add-JSON-JSON-test-cases-for-block-device-backends.patch
deleted file mode 100644
index feb2a18..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-JSON-JSON-test-cases-for-block-device-backends.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From b385c22388eb9810f654936decc970bc882d6c8b Mon Sep 17 00:00:00 2001
-Message-Id: <b385c22388eb9810f654936decc970bc882d6c8b@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:12 +0100
-Subject: [PATCH] qemublocktest: Add JSON->JSON test cases for block device
- backends
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add testing of the interpretation of the JSON pseudo-protocol backing
-store into JSON structs for blockdev. This will be used to test JSON
-pseudo-URIs used by libguestfs while actually also validating the output
-against the QMP schema. Since libguestfs uses obsolete/undocumented
-values the outputs will differ and a benefit is that modern output is
-used now.
-
-The example test case covers the fields and values used by libguestfs
-when using the https driver.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit d089234110282069e9a6dfe879ca257d114bb5bd)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <f63c18cbdf69b27bd91fe44250737cf89b3cb090.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         | 65 +++++++++++++++++++
- .../jsontojson/curl-libguestfs-in.json        |  1 +
- .../jsontojson/curl-libguestfs-out.json       |  9 +++
- 3 files changed, 75 insertions(+)
- create mode 100644 tests/qemublocktestdata/jsontojson/curl-libguestfs-in.json
- create mode 100644 tests/qemublocktestdata/jsontojson/curl-libguestfs-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index d2ba85c5e5..d8bd811b4d 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -128,6 +128,57 @@ testBackingXMLjsonXML(const void *args)
-     return 0;
- }
- 
-+static const char *testJSONtoJSONPath = abs_srcdir "/qemublocktestdata/jsontojson/";
-+
-+struct testJSONtoJSONData {
-+    const char *name;
-+    virHashTablePtr schema;
-+    virJSONValuePtr schemaroot;
-+};
-+
-+static int
-+testJSONtoJSON(const void *args)
-+{
-+    const struct testJSONtoJSONData *data = args;
-+    g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
-+    g_autoptr(virJSONValue) jsonsrcout = NULL;
-+    g_autoptr(virStorageSource) src = NULL;
-+    g_autofree char *actual = NULL;
-+    g_autofree char *in = NULL;
-+    g_autofree char *infile = g_strdup_printf("%s%s-in.json", testJSONtoJSONPath,
-+                                              data->name);
-+    g_autofree char *outfile = g_strdup_printf("%s%s-out.json", testJSONtoJSONPath,
-+                                              data->name);
-+
-+    if (virTestLoadFile(infile, &in) < 0)
-+        return -1;
-+
-+    if (virStorageSourceNewFromBackingAbsolute(in, &src) < 0) {
-+        fprintf(stderr, "failed to parse disk json\n");
-+        return -1;
-+    }
-+
-+    if (!(jsonsrcout = qemuBlockStorageSourceGetBackendProps(src, false, false, true))) {
-+        fprintf(stderr, "failed to format disk source json\n");
-+        return -1;
-+    }
-+
-+    if (!(actual = virJSONValueToString(jsonsrcout, true)))
-+        return -1;
-+
-+    if (testQEMUSchemaValidate(jsonsrcout, data->schemaroot,
-+                               data->schema, &debug) < 0) {
-+        g_autofree char *debugmsg = virBufferContentAndReset(&debug);
-+
-+        VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-+        VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-+                       actual, NULLSTR(debugmsg));
-+        return -1;
-+    }
-+
-+    return virTestCompareToFile(actual, outfile);
-+}
-+
- 
- struct testQemuDiskXMLToJSONData {
-     virQEMUDriverPtr driver;
-@@ -875,6 +926,7 @@ mymain(void)
-     virQEMUDriver driver;
-     struct testBackingXMLjsonXMLdata xmljsonxmldata;
-     struct testQemuDiskXMLToJSONData diskxmljsondata;
-+    struct testJSONtoJSONData jsontojsondata;
-     struct testQemuImageCreateData imagecreatedata;
-     struct testQemuBackupIncrementalBitmapCalculateData backupbitmapcalcdata;
-     struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
-@@ -1068,6 +1120,19 @@ mymain(void)
-     TEST_DISK_TO_JSON("block-raw-noopts");
-     TEST_DISK_TO_JSON("block-raw-reservations");
- 
-+#define TEST_JSON_TO_JSON(nme) \
-+    do { \
-+        jsontojsondata.name = nme; \
-+        if (virTestRun("JSON to JSON " nme, testJSONtoJSON, \
-+                       &jsontojsondata) < 0) \
-+            ret = -1; \
-+    } while (0)
-+
-+    jsontojsondata.schema = qmp_schema_x86_64;
-+    jsontojsondata.schemaroot = qmp_schemaroot_x86_64_blockdev_add;
-+
-+    TEST_JSON_TO_JSON("curl-libguestfs");
-+
- #define TEST_IMAGE_CREATE(testname, testbacking) \
-     do { \
-         imagecreatedata.name = testname; \
-diff --git a/tests/qemublocktestdata/jsontojson/curl-libguestfs-in.json b/tests/qemublocktestdata/jsontojson/curl-libguestfs-in.json
-new file mode 100644
-index 0000000000..0b92dabc6d
---- /dev/null
-+++ b/tests/qemublocktestdata/jsontojson/curl-libguestfs-in.json
-@@ -0,0 +1 @@
-+json:{"file.driver":"https","file.url":"https://test.host/whatever.img","file.timeout":2000,"file.readahead":65536,"file.sslverify":"off","file.cookie":"some_cookie=\"some_value_or_whatever\""}
-diff --git a/tests/qemublocktestdata/jsontojson/curl-libguestfs-out.json b/tests/qemublocktestdata/jsontojson/curl-libguestfs-out.json
-new file mode 100644
-index 0000000000..e130c7bd3c
---- /dev/null
-+++ b/tests/qemublocktestdata/jsontojson/curl-libguestfs-out.json
-@@ -0,0 +1,9 @@
-+{
-+  "driver": "https",
-+  "url": "https://test.host:443/whatever.img",
-+  "sslverify": false,
-+  "timeout": 2000,
-+  "readahead": 65536,
-+  "auto-read-only": true,
-+  "discard": "unmap"
-+}
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-basic-tests-for-backup-bitmap-handling.patch b/SOURCES/libvirt-qemublocktest-Add-basic-tests-for-backup-bitmap-handling.patch
deleted file mode 100644
index e6a6f03..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-basic-tests-for-backup-bitmap-handling.patch
+++ /dev/null
@@ -1,139 +0,0 @@
-From 747e726988e43451139b3113e7b5f60b2f50e17e Mon Sep 17 00:00:00 2001
-Message-Id: <747e726988e43451139b3113e7b5f60b2f50e17e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:58 +0200
-Subject: [PATCH] qemublocktest: Add 'basic' tests for backup bitmap handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The 'basic' case is just a single backing store layer containing the
-bitmaps so we just copy the bitmaps over to the backup bitmap.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 8c6e2da25e55081164cb5eb02ddece38500c5cff)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <94d168ffd27a6da8ffec1dfb37268e79c395c21e.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  4 +++
- .../backupmerge/basic-deep-out.json           | 25 +++++++++++++++++++
- .../backupmerge/basic-flat-out.json           | 25 +++++++++++++++++++
- .../backupmerge/basic-intermediate-out.json   | 25 +++++++++++++++++++
- 4 files changed, 79 insertions(+)
- create mode 100644 tests/qemublocktestdata/backupmerge/basic-deep-out.json
- create mode 100644 tests/qemublocktestdata/backupmerge/basic-flat-out.json
- create mode 100644 tests/qemublocktestdata/backupmerge/basic-intermediate-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index dcdc9eade0..7a0159f659 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1262,6 +1262,10 @@ mymain(void)
- 
-     TEST_BACKUP_BITMAP_CALCULATE("empty", bitmapSourceChain, "a", "empty");
- 
-+    TEST_BACKUP_BITMAP_CALCULATE("basic-flat", bitmapSourceChain, "current", "basic");
-+    TEST_BACKUP_BITMAP_CALCULATE("basic-intermediate", bitmapSourceChain, "d", "basic");
-+    TEST_BACKUP_BITMAP_CALCULATE("basic-deep", bitmapSourceChain, "a", "basic");
-+
- #define TEST_CHECKPOINT_DELETE(testname, delbmp, named) \
-     do { \
-         checkpointdeletedata.name = testname; \
-diff --git a/tests/qemublocktestdata/backupmerge/basic-deep-out.json b/tests/qemublocktestdata/backupmerge/basic-deep-out.json
-new file mode 100644
-index 0000000000..ff77af789b
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/basic-deep-out.json
-@@ -0,0 +1,25 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "target_node",
-+      "name": "target-bitmap-name",
-+      "persistent": false,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "target_node",
-+      "target": "target-bitmap-name",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/backupmerge/basic-flat-out.json b/tests/qemublocktestdata/backupmerge/basic-flat-out.json
-new file mode 100644
-index 0000000000..4637bbc377
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/basic-flat-out.json
-@@ -0,0 +1,25 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "target_node",
-+      "name": "target-bitmap-name",
-+      "persistent": false,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "target_node",
-+      "target": "target-bitmap-name",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/backupmerge/basic-intermediate-out.json b/tests/qemublocktestdata/backupmerge/basic-intermediate-out.json
-new file mode 100644
-index 0000000000..f2f3b3f568
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/basic-intermediate-out.json
-@@ -0,0 +1,25 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "target_node",
-+      "name": "target-bitmap-name",
-+      "persistent": false,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "target_node",
-+      "target": "target-bitmap-name",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-basic-tests-for-commit-bitmap-handling.patch b/SOURCES/libvirt-qemublocktest-Add-basic-tests-for-commit-bitmap-handling.patch
deleted file mode 100644
index cb3709c..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-basic-tests-for-commit-bitmap-handling.patch
+++ /dev/null
@@ -1,355 +0,0 @@
-From 433f551418c9b40b5da9bf36abb5f9eba0662369 Mon Sep 17 00:00:00 2001
-Message-Id: <433f551418c9b40b5da9bf36abb5f9eba0662369@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:01 +0200
-Subject: [PATCH] qemublocktest: Add 'basic' tests for commit bitmap handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In the 'basic' case we have few bitmaps in only the top layer. Simulate
-commit into the backing of the top layer and also 2 levels deep.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 79bc7c1828212c165d8b71bd6166ca24695a8ecd)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <9973a947b47bb20fa2e3f03e1a36541c2f1f3018.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |   4 +
- .../bitmapblockcommit/basic-1-2               | 145 ++++++++++++++++++
- .../bitmapblockcommit/basic-1-3               | 145 ++++++++++++++++++
- .../bitmapblockcommit/basic-2-3               |   1 +
- 4 files changed, 295 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-2
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index f0e80a0738..43abc49534 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1357,6 +1357,10 @@ mymain(void)
- 
-     TEST_BITMAP_BLOCKCOMMIT("empty", 1, 2, "empty");
- 
-+    TEST_BITMAP_BLOCKCOMMIT("basic-1-2", 1, 2, "basic");
-+    TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
-+    TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
-+
-  cleanup:
-     qemuTestDriverFree(&driver);
-     VIR_FREE(capslatest_x86_64);
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-2 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
-new file mode 100644
-index 0000000000..d393d31044
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
-@@ -0,0 +1,145 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
-new file mode 100644
-index 0000000000..3fa902c354
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
-@@ -0,0 +1,145 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-2-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-new file mode 100644
-index 0000000000..9260011852
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-@@ -0,0 +1 @@
-+merge bitmpas:
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-blockcopy-bitmap-handling-test.patch b/SOURCES/libvirt-qemublocktest-Add-empty-case-for-blockcopy-bitmap-handling-test.patch
deleted file mode 100644
index 137f4fa..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-blockcopy-bitmap-handling-test.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 57911844644ca352154859050e59444aca4e4ca5 Mon Sep 17 00:00:00 2001
-Message-Id: <57911844644ca352154859050e59444aca4e4ca5@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:42 +0200
-Subject: [PATCH] qemublocktest: Add 'empty' case for blockcopy bitmap handling
- test
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 264d7cf444633c0d2d20b30b612754943fede5a3)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <f49b64f231bb06e6d65232aa9bedaf11a5ce4497.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                                          | 3 +++
- tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json    | 0
- tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json | 0
- 3 files changed, 3 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 5f1c68f6de..2009cad228 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1407,6 +1407,9 @@ mymain(void)
-             ret = -1; \
-     } while (0)
- 
-+    TEST_BITMAP_BLOCKCOPY("empty-shallow", true, "empty");
-+    TEST_BITMAP_BLOCKCOPY("empty-deep", false, "empty");
-+
-     TEST_BITMAP_BLOCKCOPY("basic-shallow", true, "basic");
-     TEST_BITMAP_BLOCKCOPY("basic-deep", false, "basic");
- 
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/empty-deep-out.json
-new file mode 100644
-index 0000000000..e69de29bb2
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/empty-shallow-out.json
-new file mode 100644
-index 0000000000..e69de29bb2
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-checkpoint-bitmap-handling.patch b/SOURCES/libvirt-qemublocktest-Add-empty-case-for-checkpoint-bitmap-handling.patch
deleted file mode 100644
index ce24ad9..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-checkpoint-bitmap-handling.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 04bc9dbf9940f6976c5320ce628f97197625e4d7 Mon Sep 17 00:00:00 2001
-Message-Id: <04bc9dbf9940f6976c5320ce628f97197625e4d7@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:43 +0200
-Subject: [PATCH] qemublocktest: Add 'empty' case for checkpoint bitmap
- handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit cc1a33b59940f9e2a0856ac49dd9b8a185df8a01)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <c29f12f53fef11d76aa14ece56ac5f43f74cb21d.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                           | 2 ++
- tests/qemublocktestdata/bitmapblockcommit/empty | 2 ++
- 2 files changed, 4 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/empty
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 2009cad228..36e3378f5b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1429,6 +1429,8 @@ mymain(void)
-         ret = -1; \
-     } while (0)
- 
-+    TEST_BITMAP_BLOCKCOMMIT("empty", 1, 2, "empty");
-+
-     TEST_BITMAP_BLOCKCOMMIT("basic-1-2", 1, 2, "basic");
-     TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
-     TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/empty b/tests/qemublocktestdata/bitmapblockcommit/empty
-new file mode 100644
-index 0000000000..bfc58f994e
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/empty
-@@ -0,0 +1,2 @@
-+pre job bitmap disable:
-+merge bitmpas:
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-checkpoint-deletion.patch b/SOURCES/libvirt-qemublocktest-Add-empty-case-for-checkpoint-deletion.patch
deleted file mode 100644
index 92139fb..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-checkpoint-deletion.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 081af2b88972972f000593d10629f0f269a7ad41 Mon Sep 17 00:00:00 2001
-Message-Id: <081af2b88972972f000593d10629f0f269a7ad41@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:41 +0200
-Subject: [PATCH] qemublocktest: Add 'empty' case for checkpoint deletion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the new test data for checkpoint deletion testing. This test also
-requires modification of the internals to allow checking for test
-failure.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 88f175d88718114c032107df102d7c8071f0a38e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <957325a358cad71b3002dd03c3ec656ee4f225a9.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                               | 13 +++++++------
- .../checkpointdelete/empty-out.json                 |  1 +
- 2 files changed, 8 insertions(+), 6 deletions(-)
- create mode 100644 tests/qemublocktestdata/checkpointdelete/empty-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 3ef6ccec9b..5f1c68f6de 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -851,14 +851,13 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-                                          data->parentbitmap,
-                                          actions,
-                                          "testdisk",
--                                         &reopenimages) < 0) {
--        VIR_TEST_VERBOSE("failed to generate checkpoint delete transaction\n");
--        return -1;
-+                                         &reopenimages) >= 0) {
-+        if (virJSONValueToBuffer(actions, &buf, true) < 0)
-+            return -1;
-+    } else {
-+        virBufferAddLit(&buf, "NULL\n");
-     }
- 
--    if (virJSONValueToBuffer(actions, &buf, true) < 0)
--        return -1;
--
-     if (reopenimages) {
-         virBufferAddLit(&buf, "reopen nodes:\n");
- 
-@@ -1332,6 +1331,8 @@ mymain(void)
-         ret = -1; \
-     } while (0)
- 
-+    TEST_CHECKPOINT_DELETE_MERGE("empty", "a", NULL, "empty");
-+
-     TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL, "basic");
-     TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate1", "b", "a", "basic");
-     TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate2", "c", "b", "basic");
-diff --git a/tests/qemublocktestdata/checkpointdelete/empty-out.json b/tests/qemublocktestdata/checkpointdelete/empty-out.json
-new file mode 100644
-index 0000000000..7951defec1
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/empty-out.json
-@@ -0,0 +1 @@
-+NULL
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-incremental-backup-test.patch b/SOURCES/libvirt-qemublocktest-Add-empty-case-for-incremental-backup-test.patch
deleted file mode 100644
index 5e9f808..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-empty-case-for-incremental-backup-test.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 60c3e3fd52b1d2fe5fbab42d762248a02b5143f6 Mon Sep 17 00:00:00 2001
-Message-Id: <60c3e3fd52b1d2fe5fbab42d762248a02b5143f6@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:40 +0200
-Subject: [PATCH] qemublocktest: Add 'empty' case for incremental backup test
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the new test data when calculating incremental backup operations. As
-incremental backup fails with no bitmap the test code is modified to
-allow testing this case too.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 218d00f443a5e211ea3664996c610f62b18425f7)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <45ec7a3b4dce5f583d2864991e16cdc090b8dfce.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         | 19 ++++++++++---------
- .../backupmerge/empty-out.json                |  1 +
- 2 files changed, 11 insertions(+), 9 deletions(-)
- create mode 100644 tests/qemublocktestdata/backupmerge/empty-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 2063ca0be7..3ef6ccec9b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -793,17 +793,16 @@ testQemuBackupIncrementalBitmapCalculate(const void *opaque)
- 
-     incremental = testQemuBackupGetIncremental(data->incremental);
- 
--    if (!(mergebitmaps = qemuBackupDiskPrepareOneBitmapsChain(incremental,
--                                                              data->chain,
--                                                              nodedata,
--                                                              "testdisk"))) {
--        VIR_TEST_VERBOSE("failed to calculate merged bitmaps");
--        return -1;
-+    if ((mergebitmaps = qemuBackupDiskPrepareOneBitmapsChain(incremental,
-+                                                             data->chain,
-+                                                             nodedata,
-+                                                             "testdisk"))) {
-+        if (!(actual = virJSONValueToString(mergebitmaps, true)))
-+            return -1;
-+    } else {
-+        actual = g_strdup("NULL\n");
-     }
- 
--    if (!(actual = virJSONValueToString(mergebitmaps, true)))
--        return -1;
--
-     return virTestCompareToFile(actual, expectpath);
- }
- 
-@@ -1311,6 +1310,8 @@ mymain(void)
-             ret = -1; \
-     } while (0)
- 
-+    TEST_BACKUP_BITMAP_CALCULATE("empty", bitmapSourceChain, "a", "empty");
-+
-     TEST_BACKUP_BITMAP_CALCULATE("basic-flat", bitmapSourceChain, "current", "basic");
-     TEST_BACKUP_BITMAP_CALCULATE("basic-intermediate", bitmapSourceChain, "d", "basic");
-     TEST_BACKUP_BITMAP_CALCULATE("basic-deep", bitmapSourceChain, "a", "basic");
-diff --git a/tests/qemublocktestdata/backupmerge/empty-out.json b/tests/qemublocktestdata/backupmerge/empty-out.json
-new file mode 100644
-index 0000000000..7951defec1
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/empty-out.json
-@@ -0,0 +1 @@
-+NULL
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-empty-test-case-for-bitmaps.patch b/SOURCES/libvirt-qemublocktest-Add-empty-test-case-for-bitmaps.patch
deleted file mode 100644
index e4744ab..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-empty-test-case-for-bitmaps.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-From 07e5713853789cc0b216c7d3731cbda68f905eac Mon Sep 17 00:00:00 2001
-Message-Id: <07e5713853789cc0b216c7d3731cbda68f905eac@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:39 +0200
-Subject: [PATCH] qemublocktest: Add 'empty' test case for bitmaps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add test data for an image without bitmaps.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 15ef0c1c3891feaa949e082d922c54ebe6563e40)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <2e329c1ef636060b4c094cac8c0d3558994986ce.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                     |  4 ++
- tests/qemublocktestdata/bitmap/empty.json | 70 +++++++++++++++++++++++
- tests/qemublocktestdata/bitmap/empty.out  |  1 +
- 3 files changed, 75 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmap/empty.json
- create mode 100644 tests/qemublocktestdata/bitmap/empty.out
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index d15965d9eb..2063ca0be7 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1291,6 +1291,8 @@ mymain(void)
-             ret = -1; \
-     } while (0)
- 
-+    TEST_BITMAP_DETECT("empty");
-+
-     TEST_BITMAP_DETECT("basic");
-     TEST_BITMAP_DETECT("synthetic");
-     TEST_BITMAP_DETECT("snapshots");
-@@ -1359,6 +1361,8 @@ mymain(void)
-             ret = -1; \
-     } while (0)
- 
-+    TEST_BITMAP_VALIDATE("empty", "a", false);
-+
-     TEST_BITMAP_VALIDATE("basic", "a", true);
-     TEST_BITMAP_VALIDATE("basic", "b", true);
-     TEST_BITMAP_VALIDATE("basic", "c", true);
-diff --git a/tests/qemublocktestdata/bitmap/empty.json b/tests/qemublocktestdata/bitmap/empty.json
-new file mode 100644
-index 0000000000..ec43b25f0d
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/empty.json
-@@ -0,0 +1,70 @@
-+[
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.qcow2",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 200704,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-1-format",
-+        "backing_file_depth": 0,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.qcow2",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 197120,
-+            "filename": "/tmp/pull4.qcow2",
-+            "format": "file",
-+            "actual-size": 200704,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-1-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.qcow2",
-+        "encryption_key_missing": false
-+    }
-+]
-diff --git a/tests/qemublocktestdata/bitmap/empty.out b/tests/qemublocktestdata/bitmap/empty.out
-new file mode 100644
-index 0000000000..3787cbd354
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/empty.out
-@@ -0,0 +1 @@
-+libvirt-1-format:
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-more-tests-for-block-commit-bitmap-handling-with-snapshots.patch b/SOURCES/libvirt-qemublocktest-Add-more-tests-for-block-commit-bitmap-handling-with-snapshots.patch
deleted file mode 100644
index 8d09264..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-more-tests-for-block-commit-bitmap-handling-with-snapshots.patch
+++ /dev/null
@@ -1,945 +0,0 @@
-From 2eb309fcc6bc22e5eff4fe048683176056a43a94 Mon Sep 17 00:00:00 2001
-Message-Id: <2eb309fcc6bc22e5eff4fe048683176056a43a94@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:26 +0100
-Subject: [PATCH] qemublocktest: Add more tests for block-commit bitmap
- handling with snapshots
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Test handling of more complex cases of merging bitmaps accross
-snapshots.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 8f096cd8808b186d451ec100c646dc8ddd974735)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <45bfd1540594f663240f64a58a369c31cd83e607.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  15 ++
- .../bitmapblockcommit/snapshots-1-2           |  49 +++++++
- .../bitmapblockcommit/snapshots-1-3           |  76 ++++++++++
- .../bitmapblockcommit/snapshots-1-4           | 126 +++++++++++++++++
- .../bitmapblockcommit/snapshots-1-5           | 130 ++++++++++++++++++
- .../bitmapblockcommit/snapshots-2-3           |  49 +++++++
- .../bitmapblockcommit/snapshots-2-4           |  99 +++++++++++++
- .../bitmapblockcommit/snapshots-2-5           | 103 ++++++++++++++
- .../bitmapblockcommit/snapshots-3-4           |  72 ++++++++++
- .../bitmapblockcommit/snapshots-3-5           |  76 ++++++++++
- .../bitmapblockcommit/snapshots-4-5           |  33 +++++
- 11 files changed, 828 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 63ac80b584..ad68b37c80 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1392,6 +1392,21 @@ mymain(void)
-     TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
-     TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
- 
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-2", 1, 2, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-3", 1, 3, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-4", 1, 4, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-5", 1, 5, "snapshots");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-3", 2, 3, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-4", 2, 4, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-5", 2, 5, "snapshots");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-3-4", 3, 4, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-3-5", 3, 5, "snapshots");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-4-5", 4, 5, "snapshots");
-+
-+
-  cleanup:
-     qemuTestDriverFree(&driver);
-     VIR_FREE(capslatest_x86_64);
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
-new file mode 100644
-index 0000000000..0015b9ceb3
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
-@@ -0,0 +1,49 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
-new file mode 100644
-index 0000000000..5691b408aa
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
-@@ -0,0 +1,76 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
-new file mode 100644
-index 0000000000..454001531a
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
-@@ -0,0 +1,126 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
-new file mode 100644
-index 0000000000..2fd43d7917
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
-@@ -0,0 +1,130 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
-new file mode 100644
-index 0000000000..d719a90bd7
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
-@@ -0,0 +1,49 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
-new file mode 100644
-index 0000000000..9e37962344
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
-@@ -0,0 +1,99 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
-new file mode 100644
-index 0000000000..d6b20a5d05
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
-@@ -0,0 +1,103 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
-new file mode 100644
-index 0000000000..b96e8910d7
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
-@@ -0,0 +1,72 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
-new file mode 100644
-index 0000000000..9570c34c40
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
-@@ -0,0 +1,76 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-new file mode 100644
-index 0000000000..7e1020d96e
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-@@ -0,0 +1,33 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  }
-+]
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-new-synthetic-bitmap-detection-and-validation-test-case.patch b/SOURCES/libvirt-qemublocktest-Add-new-synthetic-bitmap-detection-and-validation-test-case.patch
deleted file mode 100644
index 5019da5..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-new-synthetic-bitmap-detection-and-validation-test-case.patch
+++ /dev/null
@@ -1,593 +0,0 @@
-From 3afb35cc6b6dabd52fe508766d5a914d74135f69 Mon Sep 17 00:00:00 2001
-Message-Id: <3afb35cc6b6dabd52fe508766d5a914d74135f69@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:52 +0200
-Subject: [PATCH] qemublocktest: Add new 'synthetic' bitmap detection and
- validation test case
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Based on the 'snapshots' example with manual tweaks to introduce
-inactive, transient, inconsistent and duplicate bitmaps in various parts
-of the chain to exercise detection and new validation code.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit b3845f0e3d0ec58b25274cb6b70906f44333069f)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <6e6222a085da03ad17af728db3bdb9027c0d8b0e.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  11 +
- tests/qemublocktestdata/bitmap/synthetic.json | 506 ++++++++++++++++++
- tests/qemublocktestdata/bitmap/synthetic.out  |  15 +
- 3 files changed, 532 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmap/synthetic.json
- create mode 100644 tests/qemublocktestdata/bitmap/synthetic.out
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index af81f1b77a..2f675d7e03 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1302,6 +1302,7 @@ mymain(void)
- 
-     TEST_BITMAP_DETECT("basic");
-     TEST_BITMAP_DETECT("snapshots");
-+    TEST_BITMAP_DETECT("synthetic");
- 
- #define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
-     do { \
-@@ -1357,6 +1358,16 @@ mymain(void)
-     TEST_BITMAP_VALIDATE("snapshots", "d", true);
-     TEST_BITMAP_VALIDATE("snapshots", "current", true);
- 
-+    TEST_BITMAP_VALIDATE("synthetic", "a", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "b", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "c", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "d", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "current", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "top-ok", true);
-+    TEST_BITMAP_VALIDATE("synthetic", "top-inactive", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "top-transient", false);
-+    TEST_BITMAP_VALIDATE("synthetic", "top-inactive-transient", false);
-+
- #define TEST_BITMAP_BLOCKCOPY(testname, shllw, ndf) \
-     do { \
-         blockbitmapblockcopydata.name = testname; \
-diff --git a/tests/qemublocktestdata/bitmap/synthetic.json b/tests/qemublocktestdata/bitmap/synthetic.json
-new file mode 100644
-index 0000000000..3712c8e5fc
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/synthetic.json
-@@ -0,0 +1,506 @@
-+[
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 10485760,
-+      "filename": "/tmp/bitmaps.1590749073",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 208896,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-+            {
-+              "flags": [
-+                "in-use",
-+                "auto"
-+              ],
-+              "name": "current",
-+              "granularity": 65536
-+            }
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.1590749012",
-+      "backing-filename": "/tmp/bitmaps.1590749012",
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-1-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.1590749012",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "current",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "inconsistent": true,
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "top-ok",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "top-inactive",
-+        "recording": false,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "top-transient",
-+        "recording": true,
-+        "persistent": false,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "top-transient-inactive",
-+        "recording": false,
-+        "persistent": false,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590749073",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 328192,
-+      "filename": "/tmp/bitmaps.1590749073",
-+      "format": "file",
-+      "actual-size": 208896,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-1-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590749073",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 10485760,
-+      "filename": "/tmp/bitmaps.1590749012",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 208896,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-+            {
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "d",
-+              "granularity": 65536
-+            }
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.1590748995",
-+      "backing-filename": "/tmp/bitmaps.1590748995",
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-2-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.1590748995",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "d",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590749012",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 328192,
-+      "filename": "/tmp/bitmaps.1590749012",
-+      "format": "file",
-+      "actual-size": 208896,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-2-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590749012",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 10485760,
-+      "filename": "/tmp/bitmaps.1590748995",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 212992,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-+            {
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "c",
-+              "granularity": 65536
-+            },
-+            {
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "b",
-+              "granularity": 65536
-+            }
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.1590748992",
-+      "backing-filename": "/tmp/bitmaps.1590748992",
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-3-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.1590748992",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "b",
-+        "recording": true,
-+        "persistent": false,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "c",
-+        "recording": false,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "d",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590748995",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 393728,
-+      "filename": "/tmp/bitmaps.1590748995",
-+      "format": "file",
-+      "actual-size": 212992,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-3-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590748995",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 10485760,
-+      "filename": "/tmp/bitmaps.1590748992",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 200704,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.qcow2",
-+      "backing-filename": "/tmp/bitmaps.qcow2",
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-4-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.qcow2",
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590748992",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 197120,
-+      "filename": "/tmp/bitmaps.1590748992",
-+      "format": "file",
-+      "actual-size": 200704,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-4-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1590748992",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 10485760,
-+      "filename": "/tmp/bitmaps.qcow2",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 208896,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-+            {
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "a",
-+              "granularity": 65536
-+            }
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-5-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "dirty-bitmaps": [
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.qcow2",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 328192,
-+      "filename": "/tmp/bitmaps.qcow2",
-+      "format": "file",
-+      "actual-size": 208896,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-5-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.qcow2",
-+    "encryption_key_missing": false
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmap/synthetic.out b/tests/qemublocktestdata/bitmap/synthetic.out
-new file mode 100644
-index 0000000000..cde7228e01
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/synthetic.out
-@@ -0,0 +1,15 @@
-+libvirt-1-format:
-+  current: record:1 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
-+   top-ok: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+ top-inactive: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+ top-transient: record:1 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
-+ top-transient-inactive: record:0 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
-+libvirt-2-format:
-+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-3-format:
-+        b: record:1 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
-+        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-4-format:
-+libvirt-5-format:
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-snapshots-tests-for-backup-bitmap-handling.patch b/SOURCES/libvirt-qemublocktest-Add-snapshots-tests-for-backup-bitmap-handling.patch
deleted file mode 100644
index 90d07cc..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-snapshots-tests-for-backup-bitmap-handling.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 8528b76210e54f664f2098e0127dac811f12800a Mon Sep 17 00:00:00 2001
-Message-Id: <8528b76210e54f664f2098e0127dac811f12800a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:59 +0200
-Subject: [PATCH] qemublocktest: Add 'snapshots' tests for backup bitmap
- handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The 'snapshots' case has multiple layers so we need to make sure that
-the bitmaps are merged with the appropriate temporary bitmaps formatted
-from the allocation bitmap for any backing chain layer above.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit b630cf4c0d8446a301fd23e87c9e8d60d547b5e8)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <3ef354322f829f47c91738060dd6557462e6d6d5.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  4 ++
- .../backupmerge/snapshots-deep-out.json       | 41 +++++++++++++++++++
- .../backupmerge/snapshots-flat-out.json       | 25 +++++++++++
- .../snapshots-intermediate-out.json           | 29 +++++++++++++
- 4 files changed, 99 insertions(+)
- create mode 100644 tests/qemublocktestdata/backupmerge/snapshots-deep-out.json
- create mode 100644 tests/qemublocktestdata/backupmerge/snapshots-flat-out.json
- create mode 100644 tests/qemublocktestdata/backupmerge/snapshots-intermediate-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 7a0159f659..8ce878f15b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1266,6 +1266,10 @@ mymain(void)
-     TEST_BACKUP_BITMAP_CALCULATE("basic-intermediate", bitmapSourceChain, "d", "basic");
-     TEST_BACKUP_BITMAP_CALCULATE("basic-deep", bitmapSourceChain, "a", "basic");
- 
-+    TEST_BACKUP_BITMAP_CALCULATE("snapshots-flat", bitmapSourceChain, "current", "snapshots");
-+    TEST_BACKUP_BITMAP_CALCULATE("snapshots-intermediate", bitmapSourceChain, "d", "snapshots");
-+    TEST_BACKUP_BITMAP_CALCULATE("snapshots-deep", bitmapSourceChain, "a", "snapshots");
-+
- #define TEST_CHECKPOINT_DELETE(testname, delbmp, named) \
-     do { \
-         checkpointdeletedata.name = testname; \
-diff --git a/tests/qemublocktestdata/backupmerge/snapshots-deep-out.json b/tests/qemublocktestdata/backupmerge/snapshots-deep-out.json
-new file mode 100644
-index 0000000000..d678507b85
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/snapshots-deep-out.json
-@@ -0,0 +1,41 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "target_node",
-+      "name": "target-bitmap-name",
-+      "persistent": false,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "target_node",
-+      "target": "target-bitmap-name",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/backupmerge/snapshots-flat-out.json b/tests/qemublocktestdata/backupmerge/snapshots-flat-out.json
-new file mode 100644
-index 0000000000..4637bbc377
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/snapshots-flat-out.json
-@@ -0,0 +1,25 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "target_node",
-+      "name": "target-bitmap-name",
-+      "persistent": false,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "target_node",
-+      "target": "target-bitmap-name",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/backupmerge/snapshots-intermediate-out.json b/tests/qemublocktestdata/backupmerge/snapshots-intermediate-out.json
-new file mode 100644
-index 0000000000..30d8bcd8b7
---- /dev/null
-+++ b/tests/qemublocktestdata/backupmerge/snapshots-intermediate-out.json
-@@ -0,0 +1,29 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "target_node",
-+      "name": "target-bitmap-name",
-+      "persistent": false,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "target_node",
-+      "target": "target-bitmap-name",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-snapshots-tests-for-block-commit-bitmap-handling.patch b/SOURCES/libvirt-qemublocktest-Add-snapshots-tests-for-block-commit-bitmap-handling.patch
deleted file mode 100644
index 9b0852e..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-snapshots-tests-for-block-commit-bitmap-handling.patch
+++ /dev/null
@@ -1,1105 +0,0 @@
-From 59a754b5c95a4795178d2a117abb7f7145c830a4 Mon Sep 17 00:00:00 2001
-Message-Id: <59a754b5c95a4795178d2a117abb7f7145c830a4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:02 +0200
-Subject: [PATCH] qemublocktest: Add 'snapshots' tests for block commit bitmap
- handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Simulate commit between all the combinations of layers in the
-'snapshots' case to see whether the code merges the correct bitmaps with
-the correct depth of temporary bitmaps.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit b5eaabfbf892c8d4a30b2822325959a6ecb93cb6)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <e2a3ce231bab06d274039daf7cdebd086b2a5691.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  14 ++
- .../bitmapblockcommit/snapshots-1-2           | 105 +++++++++++
- .../bitmapblockcommit/snapshots-1-3           | 131 ++++++++++++++
- .../bitmapblockcommit/snapshots-1-4           | 163 +++++++++++++++++
- .../bitmapblockcommit/snapshots-1-5           | 167 ++++++++++++++++++
- .../bitmapblockcommit/snapshots-2-3           |  65 +++++++
- .../bitmapblockcommit/snapshots-2-4           |  97 ++++++++++
- .../bitmapblockcommit/snapshots-2-5           | 101 +++++++++++
- .../bitmapblockcommit/snapshots-3-4           |  62 +++++++
- .../bitmapblockcommit/snapshots-3-5           |  66 +++++++
- .../bitmapblockcommit/snapshots-4-5           |  16 ++
- 11 files changed, 987 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 43abc49534..e1468f13fa 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1361,6 +1361,20 @@ mymain(void)
-     TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
-     TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
- 
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-2", 1, 2, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-3", 1, 3, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-4", 1, 4, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-5", 1, 5, "snapshots");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-3", 2, 3, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-4", 2, 4, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-5", 2, 5, "snapshots");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-3-4", 3, 4, "snapshots");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-3-5", 3, 5, "snapshots");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-4-5", 4, 5, "snapshots");
-+
-  cleanup:
-     qemuTestDriverFree(&driver);
-     VIR_FREE(capslatest_x86_64);
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
-new file mode 100644
-index 0000000000..7d5b0a4402
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
-@@ -0,0 +1,105 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
-new file mode 100644
-index 0000000000..17a020ba20
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
-@@ -0,0 +1,131 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
-new file mode 100644
-index 0000000000..972d30b2e1
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
-@@ -0,0 +1,163 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
-new file mode 100644
-index 0000000000..3cda5b4132
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
-@@ -0,0 +1,167 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
-new file mode 100644
-index 0000000000..cb952eeb06
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
-@@ -0,0 +1,65 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
-new file mode 100644
-index 0000000000..a540ca42e3
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
-@@ -0,0 +1,97 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
-new file mode 100644
-index 0000000000..8ea6036a33
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
-@@ -0,0 +1,101 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
-new file mode 100644
-index 0000000000..736d4fd9df
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
-@@ -0,0 +1,62 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
-new file mode 100644
-index 0000000000..207d82e6b6
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
-@@ -0,0 +1,66 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-new file mode 100644
-index 0000000000..4a8e6c5cff
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-@@ -0,0 +1,16 @@
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  }
-+]
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-test-cases-for-handling-bitmaps-during-block-copy.patch b/SOURCES/libvirt-qemublocktest-Add-test-cases-for-handling-bitmaps-during-block-copy.patch
deleted file mode 100644
index ad3e573..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-test-cases-for-handling-bitmaps-during-block-copy.patch
+++ /dev/null
@@ -1,685 +0,0 @@
-From 98ac7cbfb11dd6e5eadc88698f762cd9a48b4789 Mon Sep 17 00:00:00 2001
-Message-Id: <98ac7cbfb11dd6e5eadc88698f762cd9a48b4789@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:24:05 +0200
-Subject: [PATCH] qemublocktest: Add test cases for handling bitmaps during
- block-copy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Test both 'basic' and 'snapshots' cases on shallow and deep copy modes.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 5f2fdcc867a08baa3d931cde895761bcbb45b7f6)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <1f77aeac4a968c1115893226589b8d97f8a90838.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |   5 +
- .../bitmapblockcopy/basic-deep-out.json       | 144 ++++++++++++++
- .../bitmapblockcopy/basic-shallow-out.json    | 144 ++++++++++++++
- .../bitmapblockcopy/snapshots-deep-out.json   | 180 ++++++++++++++++++
- .../snapshots-shallow-out.json                | 144 ++++++++++++++
- 5 files changed, 617 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 193b4aaed0..758a7c1db0 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1345,6 +1345,11 @@ mymain(void)
-     TEST_BITMAP_BLOCKCOPY("empty-shallow", true, "empty");
-     TEST_BITMAP_BLOCKCOPY("empty-deep", false, "empty");
- 
-+    TEST_BITMAP_BLOCKCOPY("basic-shallow", true, "basic");
-+    TEST_BITMAP_BLOCKCOPY("basic-deep", false, "basic");
-+
-+    TEST_BITMAP_BLOCKCOPY("snapshots-shallow", true, "snapshots");
-+    TEST_BITMAP_BLOCKCOPY("snapshots-deep", false, "snapshots");
- 
- #define TEST_BITMAP_BLOCKCOMMIT(testname, topimg, baseimg, ndf) \
-     do {\
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
-new file mode 100644
-index 0000000000..a8c2749879
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
-@@ -0,0 +1,144 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
-new file mode 100644
-index 0000000000..a8c2749879
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
-@@ -0,0 +1,144 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
-new file mode 100644
-index 0000000000..ac2ffb4ce2
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
-@@ -0,0 +1,180 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-new file mode 100644
-index 0000000000..3a9942569a
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-@@ -0,0 +1,144 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "mirror-format-node",
-+          "name": "libvirt-tmp-activewrite"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "libvirt-tmp-activewrite"
-+    }
-+  }
-+]
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-tests-for-handling-of-bitmaps-during-block-commit.patch b/SOURCES/libvirt-qemublocktest-Add-tests-for-handling-of-bitmaps-during-block-commit.patch
deleted file mode 100644
index ce9eb4c..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-tests-for-handling-of-bitmaps-during-block-commit.patch
+++ /dev/null
@@ -1,418 +0,0 @@
-From ff6e22d991a2681488c3c52b00dcf5289bf97bd3 Mon Sep 17 00:00:00 2001
-Message-Id: <ff6e22d991a2681488c3c52b00dcf5289bf97bd3@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:25 +0100
-Subject: [PATCH] qemublocktest: Add tests for handling of bitmaps during
- block-commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add code for testing the two necessary steps of handling bitmaps during
-block commit and exercise the code on the test data which we have for
-bitmap handling.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 77b9d574b41e79bbeb87ee0443dd60c4fde8a79a)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <551872a6e70f8136c2bd8e9f7be194b8f7091046.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  95 ++++++++++++++
- .../bitmapblockcommit/basic-1-2               | 119 ++++++++++++++++++
- .../bitmapblockcommit/basic-1-3               | 119 ++++++++++++++++++
- .../bitmapblockcommit/basic-2-3               |   2 +
- 4 files changed, 335 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-2
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 6ccc2328b3..63ac80b584 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -665,6 +665,21 @@ testQemuBackupIncrementalBitmapCalculateGetFakeChain(void)
- }
- 
- 
-+static virStorageSourcePtr
-+testQemuBitmapGetFakeChainEntry(virStorageSourcePtr src,
-+                                size_t idx)
-+{
-+    virStorageSourcePtr n;
-+
-+    for (n = src; n; n = n->backingStore) {
-+        if (n->id == idx)
-+            return n;
-+    }
-+
-+    return NULL;
-+}
-+
-+
- typedef virDomainMomentDefPtr testMomentList;
- 
- static void
-@@ -919,6 +934,68 @@ testQemuBlockBitmapBlockcopy(const void *opaque)
-     return virTestCompareToFile(actual, expectpath);
- }
- 
-+static const char *blockcommitPrefix = "qemublocktestdata/bitmapblockcommit/";
-+
-+struct testQemuBlockBitmapBlockcommitData {
-+    const char *name;
-+    virStorageSourcePtr top;
-+    virStorageSourcePtr base;
-+    virStorageSourcePtr chain;
-+    const char *nodedatafile;
-+};
-+
-+
-+static int
-+testQemuBlockBitmapBlockcommit(const void *opaque)
-+{
-+    const struct testQemuBlockBitmapBlockcommitData *data = opaque;
-+
-+    g_autofree char *actual = NULL;
-+    g_autofree char *expectpath = NULL;
-+    g_autoptr(virJSONValue) actionsDisable = NULL;
-+    g_autoptr(virJSONValue) actionsMerge = NULL;
-+    g_autoptr(virJSONValue) nodedatajson = NULL;
-+    g_autoptr(virHashTable) nodedata = NULL;
-+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-+    VIR_AUTOSTRINGLIST bitmapsDisable = NULL;
-+
-+    expectpath = g_strdup_printf("%s/%s%s", abs_srcdir,
-+                                 blockcommitPrefix, data->name);
-+
-+    if (!(nodedatajson = virTestLoadFileJSON(bitmapDetectPrefix, data->nodedatafile,
-+                                             ".json", NULL)))
-+        return -1;
-+
-+    if (!(nodedata = qemuMonitorJSONBlockGetNamedNodeDataJSON(nodedatajson))) {
-+        VIR_TEST_VERBOSE("failed to load nodedata JSON\n");
-+        return -1;
-+    }
-+
-+    if (qemuBlockBitmapsHandleCommitStart(data->top, data->base, nodedata,
-+                                          &actionsDisable, &bitmapsDisable) < 0)
-+        return -1;
-+
-+    virBufferAddLit(&buf, "pre job bitmap disable:\n");
-+
-+    if (actionsDisable &&
-+        virJSONValueToBuffer(actionsDisable, &buf, true) < 0)
-+        return -1;
-+
-+    virBufferAddLit(&buf, "merge bitmpas:\n");
-+
-+    if (qemuBlockBitmapsHandleCommitFinish(data->top, data->base, nodedata,
-+                                           &actionsMerge, bitmapsDisable) < 0)
-+        return -1;
-+
-+    if (actionsMerge &&
-+        virJSONValueToBuffer(actionsMerge, &buf, true) < 0)
-+        return -1;
-+
-+    actual = virBufferContentAndReset(&buf);
-+
-+    return virTestCompareToFile(actual, expectpath);
-+}
-+
- 
- static int
- mymain(void)
-@@ -933,6 +1010,7 @@ mymain(void)
-     struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
-     struct testQemuBlockBitmapValidateData blockbitmapvalidatedata;
-     struct testQemuBlockBitmapBlockcopyData blockbitmapblockcopydata;
-+    struct testQemuBlockBitmapBlockcommitData blockbitmapblockcommitdata;
-     char *capslatest_x86_64 = NULL;
-     virQEMUCapsPtr caps_x86_64 = NULL;
-     g_autoptr(virHashTable) qmp_schema_x86_64 = NULL;
-@@ -1297,6 +1375,23 @@ mymain(void)
-     TEST_BITMAP_BLOCKCOPY("snapshots-shallow", true, "snapshots");
-     TEST_BITMAP_BLOCKCOPY("snapshots-deep", false, "snapshots");
- 
-+
-+#define TEST_BITMAP_BLOCKCOMMIT(testname, topimg, baseimg, ndf) \
-+    do {\
-+        blockbitmapblockcommitdata.name = testname; \
-+        blockbitmapblockcommitdata.top = testQemuBitmapGetFakeChainEntry(bitmapSourceChain, topimg); \
-+        blockbitmapblockcommitdata.base = testQemuBitmapGetFakeChainEntry(bitmapSourceChain, baseimg); \
-+        blockbitmapblockcommitdata.nodedatafile = ndf; \
-+        if (virTestRun("bitmap block commit " testname, \
-+                       testQemuBlockBitmapBlockcommit, \
-+                       &blockbitmapblockcommitdata) < 0) \
-+        ret = -1; \
-+    } while (0)
-+
-+    TEST_BITMAP_BLOCKCOMMIT("basic-1-2", 1, 2, "basic");
-+    TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
-+    TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
-+
-  cleanup:
-     qemuTestDriverFree(&driver);
-     VIR_FREE(capslatest_x86_64);
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-2 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
-new file mode 100644
-index 0000000000..8eeb4c3a11
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
-@@ -0,0 +1,119 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
-new file mode 100644
-index 0000000000..71b48e31a5
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
-@@ -0,0 +1,119 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-2-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-new file mode 100644
-index 0000000000..bfc58f994e
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-@@ -0,0 +1,2 @@
-+pre job bitmap disable:
-+merge bitmpas:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-tests-for-re-enabling-of-bitmaps-after-commit.patch b/SOURCES/libvirt-qemublocktest-Add-tests-for-re-enabling-of-bitmaps-after-commit.patch
deleted file mode 100644
index 5f312be..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-tests-for-re-enabling-of-bitmaps-after-commit.patch
+++ /dev/null
@@ -1,460 +0,0 @@
-From 0dc8024eae1f56e02228171feb824becf21ee697 Mon Sep 17 00:00:00 2001
-Message-Id: <0dc8024eae1f56e02228171feb824becf21ee697@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 17 Mar 2020 17:12:46 +0100
-Subject: [PATCH] qemublocktest: Add tests for re-enabling of bitmaps after
- commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some branches were not covered and thus we didn't catch that the bitmaps
-are not re-enabled if nothing is merged into them. Two bitmaps are
-necessary to reliably test the case due to hash table ordering.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Tested-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit cab3622119a73a54e62e5f2d7b4257da00bd4ac8)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <fc3f48f6a5233fce3148fc21a63c4e0255b2e466.1584461519.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../bitmap/snapshots-synthetic-broken.json    | 18 ++++++++
- .../bitmap/snapshots-synthetic-broken.out     |  2 +
- .../snapshots-synthetic-broken-1-2            | 30 ++++++++++++
- .../snapshots-synthetic-broken-1-3            | 46 +++++++++++++++++++
- .../snapshots-synthetic-broken-1-4            | 46 +++++++++++++++++++
- .../snapshots-synthetic-broken-1-5            | 46 +++++++++++++++++++
- .../snapshots-synthetic-broken-2-3            | 46 +++++++++++++++++++
- .../snapshots-synthetic-broken-2-4            | 46 +++++++++++++++++++
- .../snapshots-synthetic-broken-2-5            | 46 +++++++++++++++++++
- 9 files changed, 326 insertions(+)
-
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-index bf4963494f..8cf14d4baa 100644
---- a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-+++ b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-@@ -398,6 +398,24 @@
-                 "granularity": 65536,
-                 "count": 0
-             },
-+            {
-+                "name": "oa",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "ob",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-             {
-                 "name": "d",
-                 "recording": true,
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-index 022630bd76..ad24a580f1 100644
---- a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-+++ b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-@@ -3,6 +3,8 @@ libvirt-1-format:
-   current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
- libvirt-2-format:
-         c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+       oa: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+       ob: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-         d: record:1 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
- libvirt-3-format:
-         a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-index d413fbe723..463120d442 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-@@ -1,4 +1,20 @@
- pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "oa"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "ob"
-+    }
-+  }
-+]
- merge bitmpas:
- [
-   {
-@@ -23,5 +39,19 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "oa"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "ob"
-+    }
-   }
- ]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-index 6eb14f927a..fec6f95dd1 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-@@ -62,5 +62,51 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "oa",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "oa",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "oa"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "ob",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "ob",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "ob"
-+        }
-+      ]
-+    }
-   }
- ]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-index f4d9b72576..697230f67b 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-@@ -69,5 +69,51 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "oa",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "oa",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "oa"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "ob",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "ob",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "ob"
-+        }
-+      ]
-+    }
-   }
- ]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-index a8e575c2d9..6bf1f0da64 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-@@ -69,5 +69,51 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "oa",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "oa",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "oa"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "ob",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "ob",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "ob"
-+        }
-+      ]
-+    }
-   }
- ]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-index d468e2b9d8..f202bb94b1 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-@@ -39,5 +39,51 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "oa",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "oa",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "oa"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "ob",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "ob",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "ob"
-+        }
-+      ]
-+    }
-   }
- ]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-index 2a9986bac6..864cc9041b 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-@@ -46,5 +46,51 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "oa",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "oa",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "oa"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "ob",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "ob",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "ob"
-+        }
-+      ]
-+    }
-   }
- ]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-index 47d9f6e17a..4c5d8dbe80 100644
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-@@ -46,5 +46,51 @@ merge bitmpas:
-         }
-       ]
-     }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "oa",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "oa",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "oa"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "ob",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "ob",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "ob"
-+        }
-+      ]
-+    }
-   }
- ]
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Add-tests-of-broken-bitmap-chain-handling-during-block-commit.patch b/SOURCES/libvirt-qemublocktest-Add-tests-of-broken-bitmap-chain-handling-during-block-commit.patch
deleted file mode 100644
index 9e491d9..0000000
--- a/SOURCES/libvirt-qemublocktest-Add-tests-of-broken-bitmap-chain-handling-during-block-commit.patch
+++ /dev/null
@@ -1,585 +0,0 @@
-From 60a2b7411580b4df7a1f9b6f2706fc666d12b170 Mon Sep 17 00:00:00 2001
-Message-Id: <60a2b7411580b4df7a1f9b6f2706fc666d12b170@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:27 +0100
-Subject: [PATCH] qemublocktest: Add tests of broken bitmap chain handling
- during block-commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the 'snapshots-synthetic-broken' test data for block-commit.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 4e9bb10cf3f3d2c2b13a6e889209e2fac88e1ea7)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <45e2c5f391fdbf458ffabba516f93d0eb279cd97.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         | 13 ++++
- .../snapshots-synthetic-broken-1-2            | 27 +++++++
- .../snapshots-synthetic-broken-1-3            | 66 +++++++++++++++++
- .../snapshots-synthetic-broken-1-4            | 73 +++++++++++++++++++
- .../snapshots-synthetic-broken-1-5            | 73 +++++++++++++++++++
- .../snapshots-synthetic-broken-2-3            | 43 +++++++++++
- .../snapshots-synthetic-broken-2-4            | 50 +++++++++++++
- .../snapshots-synthetic-broken-2-5            | 50 +++++++++++++
- .../snapshots-synthetic-broken-3-4            | 27 +++++++
- .../snapshots-synthetic-broken-3-5            | 27 +++++++
- .../snapshots-synthetic-broken-4-5            | 20 +++++
- 11 files changed, 469 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5
- create mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index ad68b37c80..c8428921fe 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1406,6 +1406,19 @@ mymain(void)
- 
-     TEST_BITMAP_BLOCKCOMMIT("snapshots-4-5", 4, 5, "snapshots");
- 
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-2", 1, 2, "snapshots-synthetic-broken");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-3", 1, 3, "snapshots-synthetic-broken");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-4", 1, 4, "snapshots-synthetic-broken");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-5", 1, 5, "snapshots-synthetic-broken");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-2-3", 2, 3, "snapshots-synthetic-broken");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-2-4", 2, 4, "snapshots-synthetic-broken");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-2-5", 2, 5, "snapshots-synthetic-broken");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-3-4", 3, 4, "snapshots-synthetic-broken");
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-3-5", 3, 5, "snapshots-synthetic-broken");
-+
-+    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-4-5", 4, 5, "snapshots-synthetic-broken");
- 
-  cleanup:
-     qemuTestDriverFree(&driver);
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-new file mode 100644
-index 0000000000..d413fbe723
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-@@ -0,0 +1,27 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-new file mode 100644
-index 0000000000..6eb14f927a
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-@@ -0,0 +1,66 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-new file mode 100644
-index 0000000000..f4d9b72576
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-@@ -0,0 +1,73 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-new file mode 100644
-index 0000000000..a8e575c2d9
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-@@ -0,0 +1,73 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-new file mode 100644
-index 0000000000..d468e2b9d8
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-@@ -0,0 +1,43 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-new file mode 100644
-index 0000000000..2a9986bac6
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-@@ -0,0 +1,50 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-new file mode 100644
-index 0000000000..47d9f6e17a
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-@@ -0,0 +1,50 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4
-new file mode 100644
-index 0000000000..367a930a74
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4
-@@ -0,0 +1,27 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5
-new file mode 100644
-index 0000000000..0062ec140c
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5
-@@ -0,0 +1,27 @@
-+pre job bitmap disable:
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5
-new file mode 100644
-index 0000000000..b1f10a8a24
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5
-@@ -0,0 +1,20 @@
-+pre job bitmap disable:
-+[
-+  {
-+    "type": "block-dirty-bitmap-disable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+merge bitmpas:
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Backport-cleanups-for-testQemuDiskXMLToProps-from-dd94f36ffbe.patch b/SOURCES/libvirt-qemublocktest-Backport-cleanups-for-testQemuDiskXMLToProps-from-dd94f36ffbe.patch
deleted file mode 100644
index 46867d8..0000000
--- a/SOURCES/libvirt-qemublocktest-Backport-cleanups-for-testQemuDiskXMLToProps-from-dd94f36ffbe.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From ec4851ad003ae1e28bd43f3d76af9bc05537a97f Mon Sep 17 00:00:00 2001
-Message-Id: <ec4851ad003ae1e28bd43f3d76af9bc05537a97f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:25:54 +0100
-Subject: [PATCH] qemublocktest: Backport cleanups for testQemuDiskXMLToProps
- from dd94f36ffbe
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-RHEL-only subset changes from dd94f36ffbe
-
-dd94f36ffbe is too invasive to backport but makes changes to
-testQemuDiskXMLToProps which make it hard to backport other patches.
-
-Filter out the relevant changes for a clean backport.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Message-Id: <af87b1b8a1e1343a339fcc308e74bc4d08a96103.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index c8428921fe..cd7ea6bb2b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -256,6 +256,7 @@ static int
- testQemuDiskXMLToProps(const void *opaque)
- {
-     struct testQemuDiskXMLToJSONData *data = (void *) opaque;
-+    g_autoptr(virDomainDef) vmdef = NULL;
-     virDomainDiskDefPtr disk = NULL;
-     virStorageSourcePtr n;
-     virJSONValuePtr formatProps = NULL;
-@@ -275,6 +276,10 @@ testQemuDiskXMLToProps(const void *opaque)
-                                        VIR_DOMAIN_DEF_PARSE_STATUS)))
-         goto cleanup;
- 
-+    if (!(vmdef = virDomainDefNew()) ||
-+        virDomainDiskInsert(vmdef, disk) < 0)
-+        goto cleanup;
-+
-     if (qemuCheckDiskConfig(disk, data->qemuCaps) < 0 ||
-         qemuDomainDeviceDefValidateDisk(disk, data->qemuCaps) < 0) {
-         VIR_TEST_VERBOSE("invalid configuration for disk");
-@@ -313,7 +318,6 @@ testQemuDiskXMLToProps(const void *opaque)
-  cleanup:
-     virJSONValueFree(formatProps);
-     virJSONValueFree(storageProps);
--    virDomainDiskDefFree(disk);
-     VIR_FREE(xmlpath);
-     VIR_FREE(xmlstr);
-     return ret;
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Delete-synthetic-bitmap-test-cases.patch b/SOURCES/libvirt-qemublocktest-Delete-synthetic-bitmap-test-cases.patch
deleted file mode 100644
index 45ae66e..0000000
--- a/SOURCES/libvirt-qemublocktest-Delete-synthetic-bitmap-test-cases.patch
+++ /dev/null
@@ -1,1903 +0,0 @@
-From 54d676350560f8eedf9dc2140f2eb879725e65b4 Mon Sep 17 00:00:00 2001
-Message-Id: <54d676350560f8eedf9dc2140f2eb879725e65b4@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:45 +0200
-Subject: [PATCH] qemublocktest: Delete 'synthetic' bitmap test cases
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-They will be replaced by a different set which will test scenarios
-relevant for the new semantics.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 5aa423c52d784896675ce55c86ba662dbfc3ee95)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <7373e6767b3f2572dd5437e29fa31c14aff5bc52.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |   3 -
- .../bitmap/snapshots-synthetic-broken.json    | 837 ------------------
- .../bitmap/snapshots-synthetic-broken.out     |  14 -
- .../snapshots-synthetic-checkpoint.json       | 827 -----------------
- .../bitmap/snapshots-synthetic-checkpoint.out |  13 -
- tests/qemublocktestdata/bitmap/synthetic.json | 118 ---
- tests/qemublocktestdata/bitmap/synthetic.out  |   6 -
- 7 files changed, 1818 deletions(-)
- delete mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
- delete mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
- delete mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json
- delete mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out
- delete mode 100644 tests/qemublocktestdata/bitmap/synthetic.json
- delete mode 100644 tests/qemublocktestdata/bitmap/synthetic.out
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 239b2ef9df..75527ca64b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1292,10 +1292,7 @@ mymain(void)
-     TEST_BITMAP_DETECT("empty");
- 
-     TEST_BITMAP_DETECT("basic");
--    TEST_BITMAP_DETECT("synthetic");
-     TEST_BITMAP_DETECT("snapshots");
--    TEST_BITMAP_DETECT("snapshots-synthetic-checkpoint");
--    TEST_BITMAP_DETECT("snapshots-synthetic-broken");
- 
- #define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
-     do { \
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-deleted file mode 100644
-index 8cf14d4baa..0000000000
---- a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-+++ /dev/null
-@@ -1,837 +0,0 @@
--[
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "backing-image": {
--                        "backing-image": {
--                            "virtual-size": 10485760,
--                            "filename": "/tmp/pull4.qcow2",
--                            "cluster-size": 65536,
--                            "format": "qcow2",
--                            "actual-size": 208896,
--                            "format-specific": {
--                                "type": "qcow2",
--                                "data": {
--                                    "compat": "1.1",
--                                    "lazy-refcounts": false,
--                                    "bitmaps": [
--                                        {
--                                            "flags": [
--                                                "auto"
--                                            ],
--                                            "name": "a",
--                                            "granularity": 65536
--                                        }
--                                    ],
--                                    "refcount-bits": 16,
--                                    "corrupt": false
--                                }
--                            },
--                            "dirty-flag": false
--                        },
--                        "backing-filename-format": "qcow2",
--                        "virtual-size": 10485760,
--                        "filename": "/tmp/pull4.1575911522",
--                        "cluster-size": 65536,
--                        "format": "qcow2",
--                        "actual-size": 208896,
--                        "format-specific": {
--                            "type": "qcow2",
--                            "data": {
--                                "compat": "1.1",
--                                "lazy-refcounts": false,
--                                "bitmaps": [
--                                    {
--                                        "flags": [
--                                            "auto"
--                                        ],
--                                        "name": "a",
--                                        "granularity": 65536
--                                    }
--                                ],
--                                "refcount-bits": 16,
--                                "corrupt": false
--                            }
--                        },
--                        "full-backing-filename": "/tmp/pull4.qcow2",
--                        "backing-filename": "/tmp/pull4.qcow2",
--                        "dirty-flag": false
--                    },
--                    "backing-filename-format": "qcow2",
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.1575911527",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 217088,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "c",
--                                    "granularity": 65536
--                                },
--                                {
--                                    "flags": [
--
--                                    ],
--                                    "name": "b",
--                                    "granularity": 65536
--                                },
--                                {
--                                    "flags": [
--
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "full-backing-filename": "/tmp/pull4.1575911522",
--                    "backing-filename": "/tmp/pull4.1575911522",
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911540",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 212992,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "d",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "c",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.1575911527",
--                "backing-filename": "/tmp/pull4.1575911527",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911550",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 212992,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "in-use",
--                                "auto"
--                            ],
--                            "name": "current",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--                                "in-use"
--                            ],
--                            "name": "d",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911540",
--            "backing-filename": "/tmp/pull4.1575911540",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-format",
--        "backing_file_depth": 4,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911540",
--        "dirty-bitmaps": [
--            {
--                "name": "d",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "current",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911550",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 393728,
--            "filename": "/tmp/pull4.1575911550",
--            "format": "file",
--            "actual-size": 212992,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911550",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "backing-image": {
--                        "virtual-size": 10485760,
--                        "filename": "/tmp/pull4.qcow2",
--                        "cluster-size": 65536,
--                        "format": "qcow2",
--                        "actual-size": 208896,
--                        "format-specific": {
--                            "type": "qcow2",
--                            "data": {
--                                "compat": "1.1",
--                                "lazy-refcounts": false,
--                                "bitmaps": [
--                                    {
--                                        "flags": [
--                                            "auto"
--                                        ],
--                                        "name": "a",
--                                        "granularity": 65536
--                                    }
--                                ],
--                                "refcount-bits": 16,
--                                "corrupt": false
--                            }
--                        },
--                        "dirty-flag": false
--                    },
--                    "backing-filename-format": "qcow2",
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.1575911522",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 208896,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "full-backing-filename": "/tmp/pull4.qcow2",
--                    "backing-filename": "/tmp/pull4.qcow2",
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911527",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 217088,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "c",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "b",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.1575911522",
--                "backing-filename": "/tmp/pull4.1575911522",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911540",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 212992,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "d",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "c",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911527",
--            "backing-filename": "/tmp/pull4.1575911527",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-2-format",
--        "backing_file_depth": 3,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911527",
--        "dirty-bitmaps": [
--            {
--                "name": "c",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "oa",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "ob",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "d",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "inconsistent": true,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911540",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 393728,
--            "filename": "/tmp/pull4.1575911540",
--            "format": "file",
--            "actual-size": 212992,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-2-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911540",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.qcow2",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 208896,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911522",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 208896,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.qcow2",
--                "backing-filename": "/tmp/pull4.qcow2",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911527",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 217088,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "c",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "b",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911522",
--            "backing-filename": "/tmp/pull4.1575911522",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-3-format",
--        "backing_file_depth": 2,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911522",
--        "dirty-bitmaps": [
--            {
--                "name": "a",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "b",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911527",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 459264,
--            "filename": "/tmp/pull4.1575911527",
--            "format": "file",
--            "actual-size": 217088,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-3-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911527",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.qcow2",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 208896,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911522",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 208896,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.qcow2",
--            "backing-filename": "/tmp/pull4.qcow2",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-4-format",
--        "backing_file_depth": 1,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.qcow2",
--        "dirty-bitmaps": [
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911522",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 328192,
--            "filename": "/tmp/pull4.1575911522",
--            "format": "file",
--            "actual-size": 208896,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-4-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911522",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.qcow2",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 208896,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-5-format",
--        "backing_file_depth": 0,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "dirty-bitmaps": [
--            {
--                "name": "a",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 328192,
--            "filename": "/tmp/pull4.qcow2",
--            "format": "file",
--            "actual-size": 208896,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-5-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    }
--]
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-deleted file mode 100644
-index ad24a580f1..0000000000
---- a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-+++ /dev/null
-@@ -1,14 +0,0 @@
--libvirt-1-format:
--        d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--  current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--libvirt-2-format:
--        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--       oa: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--       ob: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        d: record:1 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
--libvirt-3-format:
--        a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--libvirt-4-format:
--libvirt-5-format:
--        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json b/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json
-deleted file mode 100644
-index 25cc150d67..0000000000
---- a/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json
-+++ /dev/null
-@@ -1,827 +0,0 @@
--[
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "backing-image": {
--                        "backing-image": {
--                            "virtual-size": 10485760,
--                            "filename": "/tmp/pull4.qcow2",
--                            "cluster-size": 65536,
--                            "format": "qcow2",
--                            "actual-size": 208896,
--                            "format-specific": {
--                                "type": "qcow2",
--                                "data": {
--                                    "compat": "1.1",
--                                    "lazy-refcounts": false,
--                                    "bitmaps": [
--                                        {
--                                            "flags": [
--                                                "auto"
--                                            ],
--                                            "name": "a",
--                                            "granularity": 65536
--                                        }
--                                    ],
--                                    "refcount-bits": 16,
--                                    "corrupt": false
--                                }
--                            },
--                            "dirty-flag": false
--                        },
--                        "backing-filename-format": "qcow2",
--                        "virtual-size": 10485760,
--                        "filename": "/tmp/pull4.1575911522",
--                        "cluster-size": 65536,
--                        "format": "qcow2",
--                        "actual-size": 208896,
--                        "format-specific": {
--                            "type": "qcow2",
--                            "data": {
--                                "compat": "1.1",
--                                "lazy-refcounts": false,
--                                "bitmaps": [
--                                    {
--                                        "flags": [
--                                            "auto"
--                                        ],
--                                        "name": "a",
--                                        "granularity": 65536
--                                    }
--                                ],
--                                "refcount-bits": 16,
--                                "corrupt": false
--                            }
--                        },
--                        "full-backing-filename": "/tmp/pull4.qcow2",
--                        "backing-filename": "/tmp/pull4.qcow2",
--                        "dirty-flag": false
--                    },
--                    "backing-filename-format": "qcow2",
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.1575911527",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 217088,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "c",
--                                    "granularity": 65536
--                                },
--                                {
--                                    "flags": [
--
--                                    ],
--                                    "name": "b",
--                                    "granularity": 65536
--                                },
--                                {
--                                    "flags": [
--
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "full-backing-filename": "/tmp/pull4.1575911522",
--                    "backing-filename": "/tmp/pull4.1575911522",
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911540",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 212992,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "d",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "c",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.1575911527",
--                "backing-filename": "/tmp/pull4.1575911527",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911550",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 212992,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "in-use",
--                                "auto"
--                            ],
--                            "name": "current",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--                                "in-use"
--                            ],
--                            "name": "d",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911540",
--            "backing-filename": "/tmp/pull4.1575911540",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-format",
--        "backing_file_depth": 4,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911540",
--        "dirty-bitmaps": [
--            {
--                "name": "d",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "current",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911550",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 393728,
--            "filename": "/tmp/pull4.1575911550",
--            "format": "file",
--            "actual-size": 212992,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911550",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "backing-image": {
--                        "virtual-size": 10485760,
--                        "filename": "/tmp/pull4.qcow2",
--                        "cluster-size": 65536,
--                        "format": "qcow2",
--                        "actual-size": 208896,
--                        "format-specific": {
--                            "type": "qcow2",
--                            "data": {
--                                "compat": "1.1",
--                                "lazy-refcounts": false,
--                                "bitmaps": [
--                                    {
--                                        "flags": [
--                                            "auto"
--                                        ],
--                                        "name": "a",
--                                        "granularity": 65536
--                                    }
--                                ],
--                                "refcount-bits": 16,
--                                "corrupt": false
--                            }
--                        },
--                        "dirty-flag": false
--                    },
--                    "backing-filename-format": "qcow2",
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.1575911522",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 208896,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "full-backing-filename": "/tmp/pull4.qcow2",
--                    "backing-filename": "/tmp/pull4.qcow2",
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911527",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 217088,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "c",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "b",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.1575911522",
--                "backing-filename": "/tmp/pull4.1575911522",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911540",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 212992,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "d",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "c",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911527",
--            "backing-filename": "/tmp/pull4.1575911527",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-2-format",
--        "backing_file_depth": 3,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911527",
--        "dirty-bitmaps": [
--            {
--                "name": "c",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "d",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911540",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 393728,
--            "filename": "/tmp/pull4.1575911540",
--            "format": "file",
--            "actual-size": 212992,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-2-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911540",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.qcow2",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 208896,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911522",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 208896,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.qcow2",
--                "backing-filename": "/tmp/pull4.qcow2",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911527",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 217088,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "c",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "b",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911522",
--            "backing-filename": "/tmp/pull4.1575911522",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-3-format",
--        "backing_file_depth": 2,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911522",
--        "dirty-bitmaps": [
--            {
--                "name": "a",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "b",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911527",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 459264,
--            "filename": "/tmp/pull4.1575911527",
--            "format": "file",
--            "actual-size": 217088,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-3-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911527",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.qcow2",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 208896,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911522",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 208896,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.qcow2",
--            "backing-filename": "/tmp/pull4.qcow2",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-4-format",
--        "backing_file_depth": 1,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.qcow2",
--        "dirty-bitmaps": [
--            {
--                "name": "a",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911522",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 328192,
--            "filename": "/tmp/pull4.1575911522",
--            "format": "file",
--            "actual-size": 208896,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-4-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911522",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.qcow2",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 208896,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-5-format",
--        "backing_file_depth": 0,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "dirty-bitmaps": [
--            {
--                "name": "a",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 328192,
--            "filename": "/tmp/pull4.qcow2",
--            "format": "file",
--            "actual-size": 208896,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-5-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    }
--]
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out b/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out
-deleted file mode 100644
-index 0270657001..0000000000
---- a/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out
-+++ /dev/null
-@@ -1,13 +0,0 @@
--libvirt-1-format:
--        d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--  current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--libvirt-2-format:
--        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--libvirt-3-format:
--        a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--libvirt-4-format:
--        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--libvirt-5-format:
--        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-diff --git a/tests/qemublocktestdata/bitmap/synthetic.json b/tests/qemublocktestdata/bitmap/synthetic.json
-deleted file mode 100644
-index 56882bd615..0000000000
---- a/tests/qemublocktestdata/bitmap/synthetic.json
-+++ /dev/null
-@@ -1,118 +0,0 @@
--[
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.qcow2",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 200704,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-format",
--        "backing_file_depth": 0,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "dirty-bitmaps": [
--            {
--                "name": "current",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "d",
--                "recording": false,
--                "persistent": false,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "c",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 1234,
--                "count": 0
--            },
--            {
--                "name": "b",
--                "recording": false,
--                "persistent": true,
--                "busy": true,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 21314
--            },
--            {
--                "name": "a",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "inconsistent": true,
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 197120,
--            "filename": "/tmp/pull4.qcow2",
--            "format": "file",
--            "actual-size": 200704,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    }
--]
-diff --git a/tests/qemublocktestdata/bitmap/synthetic.out b/tests/qemublocktestdata/bitmap/synthetic.out
-deleted file mode 100644
-index e8041c5b77..0000000000
---- a/tests/qemublocktestdata/bitmap/synthetic.out
-+++ /dev/null
-@@ -1,6 +0,0 @@
--libvirt-1-format:
--  current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        d: record:0 busy:0 persist:0 inconsist:0 gran:65536 dirty:0
--        c: record:0 busy:0 persist:1 inconsist:0 gran:1234 dirty:0
--        b: record:0 busy:1 persist:1 inconsist:0 gran:65536 dirty:21314
--        a: record:0 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Disable-testcases-for-all-bitmap-handling.patch b/SOURCES/libvirt-qemublocktest-Disable-testcases-for-all-bitmap-handling.patch
deleted file mode 100644
index d3ff671..0000000
--- a/SOURCES/libvirt-qemublocktest-Disable-testcases-for-all-bitmap-handling.patch
+++ /dev/null
@@ -1,3366 +0,0 @@
-From 7bbd4fea7b99290161c740c406aa46665b32be92 Mon Sep 17 00:00:00 2001
-Message-Id: <7bbd4fea7b99290161c740c406aa46665b32be92@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:44 +0200
-Subject: [PATCH] qemublocktest: Disable testcases for all bitmap handling
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upcoming patches are going to rewrite and semantically modify how
-bitmaps are handled during blockjobs. This is possible as incremental
-backup is not yet fully enabled.
-
-As the changes are going to be incompatible with any current test data
-remove all test cases for bitmap handling during checkpoint deletion,
-incremental backups, block commit, block copy, and bitmap validation
-operations.
-
-The tests will be gradually added back later after the code and
-test-data is refactored.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit e0828604f77b61d8ee41e72758b0c9d712b1e263)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <edef656f39903967dae9e403e8b99f20e807e092.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  94 -------------
- .../backupmerge/basic-deep-out.json           |  22 ---
- .../backupmerge/basic-flat-out.json           |   6 -
- .../backupmerge/basic-intermediate-out.json   |  10 --
- .../backupmerge/snapshot-deep-out.json        |  38 -----
- .../backupmerge/snapshot-flat-out.json        |   6 -
- .../snapshot-intermediate-out.json            |  14 --
- .../bitmapblockcommit/basic-1-2               | 119 ----------------
- .../bitmapblockcommit/basic-1-3               | 119 ----------------
- .../bitmapblockcommit/basic-2-3               |   2 -
- .../bitmapblockcommit/snapshots-1-2           |  49 -------
- .../bitmapblockcommit/snapshots-1-3           |  76 ----------
- .../bitmapblockcommit/snapshots-1-4           | 126 -----------------
- .../bitmapblockcommit/snapshots-1-5           | 130 -----------------
- .../bitmapblockcommit/snapshots-2-3           |  49 -------
- .../bitmapblockcommit/snapshots-2-4           |  99 -------------
- .../bitmapblockcommit/snapshots-2-5           | 103 --------------
- .../bitmapblockcommit/snapshots-3-4           |  72 ----------
- .../bitmapblockcommit/snapshots-3-5           |  76 ----------
- .../bitmapblockcommit/snapshots-4-5           |  33 -----
- .../snapshots-synthetic-broken-1-2            |  57 --------
- .../snapshots-synthetic-broken-1-3            | 112 ---------------
- .../snapshots-synthetic-broken-1-4            | 119 ----------------
- .../snapshots-synthetic-broken-1-5            | 119 ----------------
- .../snapshots-synthetic-broken-2-3            |  89 ------------
- .../snapshots-synthetic-broken-2-4            |  96 -------------
- .../snapshots-synthetic-broken-2-5            |  96 -------------
- .../snapshots-synthetic-broken-3-4            |  27 ----
- .../snapshots-synthetic-broken-3-5            |  27 ----
- .../snapshots-synthetic-broken-4-5            |  20 ---
- .../bitmapblockcopy/basic-deep-out.json       | 117 ---------------
- .../bitmapblockcopy/basic-shallow-out.json    | 117 ---------------
- .../bitmapblockcopy/snapshots-deep-out.json   | 133 ------------------
- .../snapshots-shallow-out.json                |  48 -------
- .../checkpointdelete/basic-current-out.json   |  29 ----
- .../basic-intermediate1-out.json              |  22 ---
- .../basic-intermediate2-out.json              |  22 ---
- .../basic-intermediate3-out.json              |  22 ---
- .../checkpointdelete/basic-noparent-out.json  |   9 --
- .../snapshots-current-out.json                |  29 ----
- .../snapshots-intermediate1-out.json          |  24 ----
- .../snapshots-intermediate2-out.json          |  62 --------
- .../snapshots-intermediate3-out.json          |  61 --------
- .../snapshots-noparent-out.json               |  27 ----
- ...hots-synthetic-checkpoint-current-out.json |  29 ----
- ...ynthetic-checkpoint-intermediate1-out.json |  31 ----
- ...ynthetic-checkpoint-intermediate2-out.json |  34 -----
- ...ynthetic-checkpoint-intermediate3-out.json |  61 --------
- ...ots-synthetic-checkpoint-noparent-out.json |  27 ----
- 49 files changed, 2909 deletions(-)
- delete mode 100644 tests/qemublocktestdata/backupmerge/basic-deep-out.json
- delete mode 100644 tests/qemublocktestdata/backupmerge/basic-flat-out.json
- delete mode 100644 tests/qemublocktestdata/backupmerge/basic-intermediate-out.json
- delete mode 100644 tests/qemublocktestdata/backupmerge/snapshot-deep-out.json
- delete mode 100644 tests/qemublocktestdata/backupmerge/snapshot-flat-out.json
- delete mode 100644 tests/qemublocktestdata/backupmerge/snapshot-intermediate-out.json
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-2
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-1-3
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/basic-2-3
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5
- delete mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
- delete mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
- delete mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
- delete mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/basic-current-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
- delete mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 36e3378f5b..239b2ef9df 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1311,14 +1311,6 @@ mymain(void)
- 
-     TEST_BACKUP_BITMAP_CALCULATE("empty", bitmapSourceChain, "a", "empty");
- 
--    TEST_BACKUP_BITMAP_CALCULATE("basic-flat", bitmapSourceChain, "current", "basic");
--    TEST_BACKUP_BITMAP_CALCULATE("basic-intermediate", bitmapSourceChain, "d", "basic");
--    TEST_BACKUP_BITMAP_CALCULATE("basic-deep", bitmapSourceChain, "a", "basic");
--
--    TEST_BACKUP_BITMAP_CALCULATE("snapshot-flat", bitmapSourceChain, "current", "snapshots");
--    TEST_BACKUP_BITMAP_CALCULATE("snapshot-intermediate", bitmapSourceChain, "d", "snapshots");
--    TEST_BACKUP_BITMAP_CALCULATE("snapshot-deep", bitmapSourceChain, "a", "snapshots");
--
- #define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, parbmp, named) \
-     do { \
-         checkpointdeletedata.name = testname; \
-@@ -1333,24 +1325,6 @@ mymain(void)
- 
-     TEST_CHECKPOINT_DELETE_MERGE("empty", "a", NULL, "empty");
- 
--    TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL, "basic");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate1", "b", "a", "basic");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate2", "c", "b", "basic");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate3", "d", "c", "basic");
--    TEST_CHECKPOINT_DELETE_MERGE("basic-current", "current", "d", "basic");
--
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-noparent", "a", NULL, "snapshots");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate1", "b", "a", "snapshots");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate2", "c", "b", "snapshots");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate3", "d", "c", "snapshots");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-current", "current", "d", "snapshots");
--
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-noparent", "a", NULL, "snapshots-synthetic-checkpoint");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate1", "b", "a", "snapshots-synthetic-checkpoint");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate2", "c", "b", "snapshots-synthetic-checkpoint");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate3", "d", "c", "snapshots-synthetic-checkpoint");
--    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-current", "current", "d", "snapshots-synthetic-checkpoint");
--
- #define TEST_BITMAP_VALIDATE(testname, bitmap, rc) \
-     do { \
-         blockbitmapvalidatedata.name = testname; \
-@@ -1365,36 +1339,6 @@ mymain(void)
- 
-     TEST_BITMAP_VALIDATE("empty", "a", false);
- 
--    TEST_BITMAP_VALIDATE("basic", "a", true);
--    TEST_BITMAP_VALIDATE("basic", "b", true);
--    TEST_BITMAP_VALIDATE("basic", "c", true);
--    TEST_BITMAP_VALIDATE("basic", "d", true);
--    TEST_BITMAP_VALIDATE("basic", "current", true);
--
--    TEST_BITMAP_VALIDATE("snapshots", "a", true);
--    TEST_BITMAP_VALIDATE("snapshots", "b", true);
--    TEST_BITMAP_VALIDATE("snapshots", "c", true);
--    TEST_BITMAP_VALIDATE("snapshots", "d", true);
--    TEST_BITMAP_VALIDATE("snapshots", "current", true);
--
--    TEST_BITMAP_VALIDATE("synthetic", "a", false);
--    TEST_BITMAP_VALIDATE("synthetic", "b", true);
--    TEST_BITMAP_VALIDATE("synthetic", "c", true);
--    TEST_BITMAP_VALIDATE("synthetic", "d", true);
--    TEST_BITMAP_VALIDATE("synthetic", "current", true);
--
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "a", true);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "b", true);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "c", true);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "d", true);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "current", true);
--
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "a", false);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "b", true);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "c", true);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "d", false);
--    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "current", true);
--
- #define TEST_BITMAP_BLOCKCOPY(testname, shllw, ndf) \
-     do { \
-         blockbitmapblockcopydata.name = testname; \
-@@ -1410,12 +1354,6 @@ mymain(void)
-     TEST_BITMAP_BLOCKCOPY("empty-shallow", true, "empty");
-     TEST_BITMAP_BLOCKCOPY("empty-deep", false, "empty");
- 
--    TEST_BITMAP_BLOCKCOPY("basic-shallow", true, "basic");
--    TEST_BITMAP_BLOCKCOPY("basic-deep", false, "basic");
--
--    TEST_BITMAP_BLOCKCOPY("snapshots-shallow", true, "snapshots");
--    TEST_BITMAP_BLOCKCOPY("snapshots-deep", false, "snapshots");
--
- 
- #define TEST_BITMAP_BLOCKCOMMIT(testname, topimg, baseimg, ndf) \
-     do {\
-@@ -1431,38 +1369,6 @@ mymain(void)
- 
-     TEST_BITMAP_BLOCKCOMMIT("empty", 1, 2, "empty");
- 
--    TEST_BITMAP_BLOCKCOMMIT("basic-1-2", 1, 2, "basic");
--    TEST_BITMAP_BLOCKCOMMIT("basic-1-3", 1, 3, "basic");
--    TEST_BITMAP_BLOCKCOMMIT("basic-2-3", 2, 3, "basic");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-2", 1, 2, "snapshots");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-3", 1, 3, "snapshots");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-4", 1, 4, "snapshots");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-1-5", 1, 5, "snapshots");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-3", 2, 3, "snapshots");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-4", 2, 4, "snapshots");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-2-5", 2, 5, "snapshots");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-3-4", 3, 4, "snapshots");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-3-5", 3, 5, "snapshots");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-4-5", 4, 5, "snapshots");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-2", 1, 2, "snapshots-synthetic-broken");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-3", 1, 3, "snapshots-synthetic-broken");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-4", 1, 4, "snapshots-synthetic-broken");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-1-5", 1, 5, "snapshots-synthetic-broken");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-2-3", 2, 3, "snapshots-synthetic-broken");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-2-4", 2, 4, "snapshots-synthetic-broken");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-2-5", 2, 5, "snapshots-synthetic-broken");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-3-4", 3, 4, "snapshots-synthetic-broken");
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-3-5", 3, 5, "snapshots-synthetic-broken");
--
--    TEST_BITMAP_BLOCKCOMMIT("snapshots-synthetic-broken-4-5", 4, 5, "snapshots-synthetic-broken");
--
-  cleanup:
-     qemuTestDriverFree(&driver);
-     VIR_FREE(capslatest_x86_64);
-diff --git a/tests/qemublocktestdata/backupmerge/basic-deep-out.json b/tests/qemublocktestdata/backupmerge/basic-deep-out.json
-deleted file mode 100644
-index 28c3d16259..0000000000
---- a/tests/qemublocktestdata/backupmerge/basic-deep-out.json
-+++ /dev/null
-@@ -1,22 +0,0 @@
--[
--  {
--    "node": "libvirt-1-format",
--    "name": "current"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "d"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "c"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "b"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "a"
--  }
--]
-diff --git a/tests/qemublocktestdata/backupmerge/basic-flat-out.json b/tests/qemublocktestdata/backupmerge/basic-flat-out.json
-deleted file mode 100644
-index b89252e284..0000000000
---- a/tests/qemublocktestdata/backupmerge/basic-flat-out.json
-+++ /dev/null
-@@ -1,6 +0,0 @@
--[
--  {
--    "node": "libvirt-1-format",
--    "name": "current"
--  }
--]
-diff --git a/tests/qemublocktestdata/backupmerge/basic-intermediate-out.json b/tests/qemublocktestdata/backupmerge/basic-intermediate-out.json
-deleted file mode 100644
-index 0dffcafd5f..0000000000
---- a/tests/qemublocktestdata/backupmerge/basic-intermediate-out.json
-+++ /dev/null
-@@ -1,10 +0,0 @@
--[
--  {
--    "node": "libvirt-1-format",
--    "name": "current"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "d"
--  }
--]
-diff --git a/tests/qemublocktestdata/backupmerge/snapshot-deep-out.json b/tests/qemublocktestdata/backupmerge/snapshot-deep-out.json
-deleted file mode 100644
-index 526fc8d55b..0000000000
---- a/tests/qemublocktestdata/backupmerge/snapshot-deep-out.json
-+++ /dev/null
-@@ -1,38 +0,0 @@
--[
--  {
--    "node": "libvirt-1-format",
--    "name": "current"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "d"
--  },
--  {
--    "node": "libvirt-2-format",
--    "name": "d"
--  },
--  {
--    "node": "libvirt-2-format",
--    "name": "c"
--  },
--  {
--    "node": "libvirt-3-format",
--    "name": "c"
--  },
--  {
--    "node": "libvirt-3-format",
--    "name": "b"
--  },
--  {
--    "node": "libvirt-3-format",
--    "name": "a"
--  },
--  {
--    "node": "libvirt-4-format",
--    "name": "a"
--  },
--  {
--    "node": "libvirt-5-format",
--    "name": "a"
--  }
--]
-diff --git a/tests/qemublocktestdata/backupmerge/snapshot-flat-out.json b/tests/qemublocktestdata/backupmerge/snapshot-flat-out.json
-deleted file mode 100644
-index b89252e284..0000000000
---- a/tests/qemublocktestdata/backupmerge/snapshot-flat-out.json
-+++ /dev/null
-@@ -1,6 +0,0 @@
--[
--  {
--    "node": "libvirt-1-format",
--    "name": "current"
--  }
--]
-diff --git a/tests/qemublocktestdata/backupmerge/snapshot-intermediate-out.json b/tests/qemublocktestdata/backupmerge/snapshot-intermediate-out.json
-deleted file mode 100644
-index 537d776ec6..0000000000
---- a/tests/qemublocktestdata/backupmerge/snapshot-intermediate-out.json
-+++ /dev/null
-@@ -1,14 +0,0 @@
--[
--  {
--    "node": "libvirt-1-format",
--    "name": "current"
--  },
--  {
--    "node": "libvirt-1-format",
--    "name": "d"
--  },
--  {
--    "node": "libvirt-2-format",
--    "name": "d"
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-2 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
-deleted file mode 100644
-index 8eeb4c3a11..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/basic-1-2
-+++ /dev/null
-@@ -1,119 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "a",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-1-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
-deleted file mode 100644
-index 71b48e31a5..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/basic-1-3
-+++ /dev/null
-@@ -1,119 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "a",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/basic-2-3 b/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-deleted file mode 100644
-index bfc58f994e..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/basic-2-3
-+++ /dev/null
-@@ -1,2 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
-deleted file mode 100644
-index 0015b9ceb3..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-2
-+++ /dev/null
-@@ -1,49 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "d"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
-deleted file mode 100644
-index 5691b408aa..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-3
-+++ /dev/null
-@@ -1,76 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "c"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        },
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
-deleted file mode 100644
-index 454001531a..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-4
-+++ /dev/null
-@@ -1,126 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        },
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        },
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
-deleted file mode 100644
-index 2fd43d7917..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-1-5
-+++ /dev/null
-@@ -1,130 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        },
--        {
--          "node": "libvirt-4-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        },
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        },
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
-deleted file mode 100644
-index d719a90bd7..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-3
-+++ /dev/null
-@@ -1,49 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "c"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
-deleted file mode 100644
-index 9e37962344..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-4
-+++ /dev/null
-@@ -1,99 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        },
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
-deleted file mode 100644
-index d6b20a5d05..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-2-5
-+++ /dev/null
-@@ -1,103 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        },
--        {
--          "node": "libvirt-4-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        },
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "d",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
-deleted file mode 100644
-index b96e8910d7..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-4
-+++ /dev/null
-@@ -1,72 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
-deleted file mode 100644
-index 9570c34c40..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-3-5
-+++ /dev/null
-@@ -1,76 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        },
--        {
--          "node": "libvirt-4-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-deleted file mode 100644
-index 7e1020d96e..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-4-5
-+++ /dev/null
-@@ -1,33 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-4-format",
--          "name": "a"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-deleted file mode 100644
-index 463120d442..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-2
-+++ /dev/null
-@@ -1,57 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "oa"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "ob"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "oa"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "ob"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-deleted file mode 100644
-index fec6f95dd1..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-3
-+++ /dev/null
-@@ -1,112 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "oa",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "oa",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "oa"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "ob",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "ob",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "ob"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-deleted file mode 100644
-index 697230f67b..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-4
-+++ /dev/null
-@@ -1,119 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "oa",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "oa",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "oa"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "ob",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "ob",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "ob"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-deleted file mode 100644
-index 6bf1f0da64..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-1-5
-+++ /dev/null
-@@ -1,119 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "oa",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "oa",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "oa"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "ob",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "ob",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "ob"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-deleted file mode 100644
-index f202bb94b1..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-3
-+++ /dev/null
-@@ -1,89 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "oa",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "oa",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "oa"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "ob",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "ob",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "ob"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-deleted file mode 100644
-index 864cc9041b..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-4
-+++ /dev/null
-@@ -1,96 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "oa",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "oa",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "oa"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "ob",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "ob",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "ob"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-deleted file mode 100644
-index 4c5d8dbe80..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-2-5
-+++ /dev/null
-@@ -1,96 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "oa",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "oa",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "oa"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "ob",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "ob",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "ob"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4
-deleted file mode 100644
-index 367a930a74..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-4
-+++ /dev/null
-@@ -1,27 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-4-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5
-deleted file mode 100644
-index 0062ec140c..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-3-5
-+++ /dev/null
-@@ -1,27 +0,0 @@
--pre job bitmap disable:
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-5-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5 b/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5
-deleted file mode 100644
-index b1f10a8a24..0000000000
---- a/tests/qemublocktestdata/bitmapblockcommit/snapshots-synthetic-broken-4-5
-+++ /dev/null
-@@ -1,20 +0,0 @@
--pre job bitmap disable:
--[
--  {
--    "type": "block-dirty-bitmap-disable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--merge bitmpas:
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
-deleted file mode 100644
-index 4ed2b97e95..0000000000
---- a/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
-+++ /dev/null
-@@ -1,117 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "a",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
-deleted file mode 100644
-index 4ed2b97e95..0000000000
---- a/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
-+++ /dev/null
-@@ -1,117 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "a",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
-deleted file mode 100644
-index 5456553d78..0000000000
---- a/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
-+++ /dev/null
-@@ -1,133 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "a",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "a"
--        },
--        {
--          "node": "libvirt-4-format",
--          "name": "a"
--        },
--        {
--          "node": "libvirt-5-format",
--          "name": "a"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        },
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        },
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-deleted file mode 100644
-index ddd47f7ee1..0000000000
---- a/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-+++ /dev/null
-@@ -1,48 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "current",
--      "persistent": true,
--      "disabled": false,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "current",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "mirror-format-node",
--      "name": "d",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "mirror-format-node",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-current-out.json b/tests/qemublocktestdata/checkpointdelete/basic-current-out.json
-deleted file mode 100644
-index 1b607567e8..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/basic-current-out.json
-+++ /dev/null
-@@ -1,29 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "d"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "current"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
-deleted file mode 100644
-index eccb7ed15f..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
-+++ /dev/null
-@@ -1,22 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "b"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
-deleted file mode 100644
-index de40e4b5b0..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
-+++ /dev/null
-@@ -1,22 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "c"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-deleted file mode 100644
-index b5d85f43f0..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-+++ /dev/null
-@@ -1,22 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "d"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-deleted file mode 100644
-index e87382fdb4..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-+++ /dev/null
-@@ -1,9 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "a"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
-deleted file mode 100644
-index 1b607567e8..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
-+++ /dev/null
-@@ -1,29 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "d"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "current"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-deleted file mode 100644
-index c9bda3a17a..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-+++ /dev/null
-@@ -1,24 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  }
--]
--reopen nodes:
--libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-deleted file mode 100644
-index 8a0e3f2cff..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-+++ /dev/null
-@@ -1,62 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "c"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "c"
--    }
--  }
--]
--reopen nodes:
--libvirt-3-format
--libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-deleted file mode 100644
-index 211bc40baf..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-+++ /dev/null
-@@ -1,61 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "d"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "c"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "d"
--    }
--  }
--]
--reopen nodes:
--libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-deleted file mode 100644
-index f750f44da2..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-+++ /dev/null
-@@ -1,27 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "a"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "a"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--reopen nodes:
--libvirt-5-format
--libvirt-4-format
--libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json
-deleted file mode 100644
-index 1b607567e8..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json
-+++ /dev/null
-@@ -1,29 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "d"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "d",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "current"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "current"
--    }
--  }
--]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-deleted file mode 100644
-index d7e6d18637..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-+++ /dev/null
-@@ -1,31 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "a"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-3-format",
--      "target": "a",
--      "bitmaps": [
--        {
--          "node": "libvirt-3-format",
--          "name": "b"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "b"
--    }
--  }
--]
--reopen nodes:
--libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-deleted file mode 100644
-index cfbff010c2..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-+++ /dev/null
-@@ -1,34 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "b",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "b",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "c"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "c"
--    }
--  }
--]
--reopen nodes:
--libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-deleted file mode 100644
-index 211bc40baf..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-+++ /dev/null
-@@ -1,61 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-add",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "c",
--      "persistent": true,
--      "disabled": true,
--      "granularity": 65536
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-1-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-1-format",
--          "name": "d"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-1-format",
--      "name": "d"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-enable",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "c"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-merge",
--    "data": {
--      "node": "libvirt-2-format",
--      "target": "c",
--      "bitmaps": [
--        {
--          "node": "libvirt-2-format",
--          "name": "d"
--        }
--      ]
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-2-format",
--      "name": "d"
--    }
--  }
--]
--reopen nodes:
--libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-deleted file mode 100644
-index f750f44da2..0000000000
---- a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-+++ /dev/null
-@@ -1,27 +0,0 @@
--[
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-3-format",
--      "name": "a"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-4-format",
--      "name": "a"
--    }
--  },
--  {
--    "type": "block-dirty-bitmap-remove",
--    "data": {
--      "node": "libvirt-5-format",
--      "name": "a"
--    }
--  }
--]
--reopen nodes:
--libvirt-5-format
--libvirt-4-format
--libvirt-3-format
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Extract-printing-of-nodename-list.patch b/SOURCES/libvirt-qemublocktest-Extract-printing-of-nodename-list.patch
deleted file mode 100644
index d957b5c..0000000
--- a/SOURCES/libvirt-qemublocktest-Extract-printing-of-nodename-list.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 25790c1e38a02e16182bb8c708af656f82db950a Mon Sep 17 00:00:00 2001
-Message-Id: <25790c1e38a02e16182bb8c708af656f82db950a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:46 +0200
-Subject: [PATCH] qemublocktest: Extract printing of nodename list
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There will be multiple places where we'll need to print nodenames from a
-GSList of virStorageSource for testing purposes. Extract the code into a
-function.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 69cacbe5061a82d3207df113d5c845f38f3decca)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <6f3b4a3424a76d6fe788545b0ddffd3cbb372623.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 27 ++++++++++++++++++---------
- 1 file changed, 18 insertions(+), 9 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 75527ca64b..9d6d871be8 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -647,6 +647,23 @@ testQemuDetectBitmaps(const void *opaque)
- }
- 
- 
-+static void
-+testQemuBitmapListPrint(const char *title,
-+                        GSList *next,
-+                        virBufferPtr buf)
-+{
-+    if (!next)
-+        return;
-+
-+    virBufferAsprintf(buf, "%s\n", title);
-+
-+    for (; next; next = next->next) {
-+        virStorageSourcePtr src = next->data;
-+        virBufferAsprintf(buf, "%s\n", src->nodeformat);
-+    }
-+}
-+
-+
- static virStorageSourcePtr
- testQemuBackupIncrementalBitmapCalculateGetFakeImage(size_t idx)
- {
-@@ -829,7 +846,6 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-     g_autoptr(virHashTable) nodedata = NULL;
-     g_autoptr(GSList) reopenimages = NULL;
-     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
--    GSList *tmp;
- 
-     expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
-                                  checkpointDeletePrefix, data->name);
-@@ -858,14 +874,7 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-         virBufferAddLit(&buf, "NULL\n");
-     }
- 
--    if (reopenimages) {
--        virBufferAddLit(&buf, "reopen nodes:\n");
--
--        for (tmp = reopenimages; tmp; tmp = tmp->next) {
--            virStorageSourcePtr src = tmp->data;
--            virBufferAsprintf(&buf, "%s\n", src->nodeformat);
--        }
--    }
-+    testQemuBitmapListPrint("reopen nodes:", reopenimages, &buf);
- 
-     actual = virBufferContentAndReset(&buf);
- 
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Extract-schema-root-for-blockdev-add-validation.patch b/SOURCES/libvirt-qemublocktest-Extract-schema-root-for-blockdev-add-validation.patch
deleted file mode 100644
index 04d9fc9..0000000
--- a/SOURCES/libvirt-qemublocktest-Extract-schema-root-for-blockdev-add-validation.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From fbeabd58626de924d59891338dade4f56044a3cc Mon Sep 17 00:00:00 2001
-Message-Id: <fbeabd58626de924d59891338dade4f56044a3cc@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:10 +0100
-Subject: [PATCH] qemublocktest: Extract schema root for blockdev-add
- validation
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Move lookup of the schema root earlier so that multiple functions
-can use it for validation.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 218ce53069b730daa508a4a67d8640b415d69b4e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <9f33cec13b55e431b1144042ddcbeb7afefcf969.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 20 +++++++++++---------
- 1 file changed, 11 insertions(+), 9 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index f805265c93..94f20eeb47 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -864,6 +864,7 @@ mymain(void)
-     char *capslatest_x86_64 = NULL;
-     virQEMUCapsPtr caps_x86_64 = NULL;
-     g_autoptr(virHashTable) qmp_schema_x86_64 = NULL;
-+    virJSONValuePtr qmp_schemaroot_x86_64_blockdev_add = NULL;
-     g_autoptr(virStorageSource) bitmapSourceChain = NULL;
- 
-     if (qemuTestDriverInit(&driver) < 0)
-@@ -891,6 +892,15 @@ mymain(void)
-         goto cleanup;
-     }
- 
-+    if (virQEMUQAPISchemaPathGet("blockdev-add/arg-type",
-+                                 qmp_schema_x86_64,
-+                                 &qmp_schemaroot_x86_64_blockdev_add) < 0 ||
-+        !qmp_schemaroot_x86_64_blockdev_add) {
-+        VIR_TEST_VERBOSE("failed to find schema entry for blockdev-add");
-+        ret = -1;
-+        goto cleanup;
-+    }
-+
-     virTestCounterReset("qemu storage source xml->json->xml ");
- 
- #define TEST_JSON_FORMAT(tpe, xmlstr) \
-@@ -990,15 +1000,7 @@ mymain(void)
- #define TEST_DISK_TO_JSON(nme) TEST_DISK_TO_JSON_FULL(nme, false)
- 
-     diskxmljsondata.schema = qmp_schema_x86_64;
--
--    if (virQEMUQAPISchemaPathGet("blockdev-add/arg-type",
--                                 diskxmljsondata.schema,
--                                 &diskxmljsondata.schemaroot) < 0 ||
--        !diskxmljsondata.schemaroot) {
--        VIR_TEST_VERBOSE("failed to find schema entry for blockdev-add");
--        ret = -1;
--        goto cleanup;
--    }
-+    diskxmljsondata.schemaroot = qmp_schemaroot_x86_64_blockdev_add;
- 
-     TEST_DISK_TO_JSON_FULL("nodename-long-format", true);
-     TEST_DISK_TO_JSON_FULL("nodename-long-protocol", true);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Fix-and-optimize-fake-image-chain.patch b/SOURCES/libvirt-qemublocktest-Fix-and-optimize-fake-image-chain.patch
deleted file mode 100644
index 270afad..0000000
--- a/SOURCES/libvirt-qemublocktest-Fix-and-optimize-fake-image-chain.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From a0a2e4eaa6ab0b6435286f9af6e7026f0000b9e5 Mon Sep 17 00:00:00 2001
-Message-Id: <a0a2e4eaa6ab0b6435286f9af6e7026f0000b9e5@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:23 +0100
-Subject: [PATCH] qemublocktest: Fix and optimize fake image chain
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Set the 'id' field of the backing chain properly so that we can look
-up images, and initialize 6 images instead of 10 as we don't use more
-currently.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit f8389505aae66e705046f5cbd9fe4ac10f1dee2e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <c45885fd70242874545a5c8129bcb52022014112.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index f48875e16d..6ccc2328b3 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -636,6 +636,7 @@ testQemuBackupIncrementalBitmapCalculateGetFakeImage(size_t idx)
-    if (!(ret = virStorageSourceNew()))
-        abort();
- 
-+   ret->id = idx;
-    ret->type = VIR_STORAGE_TYPE_FILE;
-    ret->format = VIR_STORAGE_FILE_QCOW2;
-    ret->path = g_strdup_printf("/image%zu", idx);
-@@ -655,7 +656,7 @@ testQemuBackupIncrementalBitmapCalculateGetFakeChain(void)
- 
-     n = ret = testQemuBackupIncrementalBitmapCalculateGetFakeImage(1);
- 
--    for (i = 2; i < 10; i++) {
-+    for (i = 2; i < 6; i++) {
-         n->backingStore = testQemuBackupIncrementalBitmapCalculateGetFakeImage(i);
-         n = n->backingStore;
-     }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Load-QMP-schema-earlier.patch b/SOURCES/libvirt-qemublocktest-Load-QMP-schema-earlier.patch
deleted file mode 100644
index 23c260e..0000000
--- a/SOURCES/libvirt-qemublocktest-Load-QMP-schema-earlier.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From e0454c4801452c031856681c68bf5d154440bbb0 Mon Sep 17 00:00:00 2001
-Message-Id: <e0454c4801452c031856681c68bf5d154440bbb0@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:09 +0100
-Subject: [PATCH] qemublocktest: Load QMP schema earlier
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Multiple tests require the schema. Extract the loading into a separate
-variable to avoid issues with ownership of the pointer.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 1262cdede447a2566b6e8cb99434b767a4ef67da)
-
- Conflicts:
-	tests/qemublocktest.c
-        QMP schema loading for non-x86_64 qemus was not backported.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <d8a7b2d9987175b106363d781df23d313a02d870.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 3057db6930..f805265c93 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -863,6 +863,7 @@ mymain(void)
-     struct testQemuBlockBitmapBlockcopyData blockbitmapblockcopydata;
-     char *capslatest_x86_64 = NULL;
-     virQEMUCapsPtr caps_x86_64 = NULL;
-+    g_autoptr(virHashTable) qmp_schema_x86_64 = NULL;
-     g_autoptr(virStorageSource) bitmapSourceChain = NULL;
- 
-     if (qemuTestDriverInit(&driver) < 0)
-@@ -885,6 +886,11 @@ mymain(void)
-     diskxmljsondata.qemuCaps = caps_x86_64;
-     imagecreatedata.qemuCaps = caps_x86_64;
- 
-+    if (!(qmp_schema_x86_64 = testQEMUSchemaLoad())) {
-+        ret = -1;
-+        goto cleanup;
-+    }
-+
-     virTestCounterReset("qemu storage source xml->json->xml ");
- 
- #define TEST_JSON_FORMAT(tpe, xmlstr) \
-@@ -983,10 +989,7 @@ mymain(void)
- 
- #define TEST_DISK_TO_JSON(nme) TEST_DISK_TO_JSON_FULL(nme, false)
- 
--    if (!(diskxmljsondata.schema = testQEMUSchemaLoad())) {
--        ret = -1;
--        goto cleanup;
--    }
-+    diskxmljsondata.schema = qmp_schema_x86_64;
- 
-     if (virQEMUQAPISchemaPathGet("blockdev-add/arg-type",
-                                  diskxmljsondata.schema,
-@@ -1045,7 +1048,9 @@ mymain(void)
-                        &imagecreatedata) < 0) \
-             ret = -1; \
-     } while (0)
--    imagecreatedata.schema = diskxmljsondata.schema;
-+
-+    imagecreatedata.schema = qmp_schema_x86_64;
-+
-     if (virQEMUQAPISchemaPathGet("blockdev-create/arg-type/options",
-                                  imagecreatedata.schema,
-                                  &imagecreatedata.schemaroot) < 0 ||
-@@ -1198,7 +1203,6 @@ mymain(void)
-     TEST_BITMAP_BLOCKCOPY("snapshots-deep", false, "snapshots");
- 
-  cleanup:
--    virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
-     VIR_FREE(capslatest_x86_64);
-     virObjectUnref(caps_x86_64);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-Re-add-bitmap-validation-for-basic-and-snapshots-cases.patch b/SOURCES/libvirt-qemublocktest-Re-add-bitmap-validation-for-basic-and-snapshots-cases.patch
deleted file mode 100644
index cd5929e..0000000
--- a/SOURCES/libvirt-qemublocktest-Re-add-bitmap-validation-for-basic-and-snapshots-cases.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 82ab591e0d4183f9d4d12c8d905f2c0c71795f68 Mon Sep 17 00:00:00 2001
-Message-Id: <82ab591e0d4183f9d4d12c8d905f2c0c71795f68@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:51 +0200
-Subject: [PATCH] qemublocktest: Re-add bitmap validation for 'basic' and
- 'snapshots' cases
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Now that we've updated both the test data and the validator to new
-semantics we can start testing again.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 9c007fd418e7fa7320662347662b926835a20c16)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <ebe9e994fde00010d9a7d809a3c27dc21f6a1bbe.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 9d6d871be8..af81f1b77a 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1345,6 +1345,18 @@ mymain(void)
- 
-     TEST_BITMAP_VALIDATE("empty", "a", false);
- 
-+    TEST_BITMAP_VALIDATE("basic", "a", true);
-+    TEST_BITMAP_VALIDATE("basic", "b", true);
-+    TEST_BITMAP_VALIDATE("basic", "c", true);
-+    TEST_BITMAP_VALIDATE("basic", "d", true);
-+    TEST_BITMAP_VALIDATE("basic", "current", true);
-+
-+    TEST_BITMAP_VALIDATE("snapshots", "a", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "b", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "c", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "d", true);
-+    TEST_BITMAP_VALIDATE("snapshots", "current", true);
-+
- #define TEST_BITMAP_BLOCKCOPY(testname, shllw, ndf) \
-     do { \
-         blockbitmapblockcopydata.name = testname; \
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Re-introduce-testing-of-checkpoint-deletion.patch b/SOURCES/libvirt-qemublocktest-Re-introduce-testing-of-checkpoint-deletion.patch
deleted file mode 100644
index 3f40790..0000000
--- a/SOURCES/libvirt-qemublocktest-Re-introduce-testing-of-checkpoint-deletion.patch
+++ /dev/null
@@ -1,401 +0,0 @@
-From 4b9cb933c1501309a858130f5465313699840ec1 Mon Sep 17 00:00:00 2001
-Message-Id: <4b9cb933c1501309a858130f5465313699840ec1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:55 +0200
-Subject: [PATCH] qemublocktest: Re-introduce testing of checkpoint deletion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Exercise the now arguably simpler checkpoint deletion code on the
-'basic', 'snapshots', and 'synthetic' test data sets.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 2c5a3da365d9a33ff23458ca2a914f9d35ebd510)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <8df51bc8ee6e86fe36d971670ecdc89ecc989532.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         | 18 ++++++++
- .../checkpointdelete/basic-current-out.json   |  9 ++++
- .../basic-intermediate1-out.json              |  9 ++++
- .../basic-intermediate2-out.json              |  9 ++++
- .../basic-intermediate3-out.json              |  9 ++++
- .../checkpointdelete/basic-noparent-out.json  |  9 ++++
- .../snapshots-current-out.json                |  9 ++++
- .../snapshots-intermediate1-out.json          | 26 ++++++++++++
- .../snapshots-intermediate2-out.json          | 26 ++++++++++++
- .../snapshots-intermediate3-out.json          | 18 ++++++++
- .../snapshots-noparent-out.json               | 42 +++++++++++++++++++
- .../synthetic-current-out.json                |  9 ++++
- .../synthetic-intermediate1-out.json          | 11 +++++
- .../synthetic-intermediate2-out.json          | 11 +++++
- .../synthetic-intermediate3-out.json          | 19 +++++++++
- .../synthetic-noparent-out.json               | 11 +++++
- 16 files changed, 245 insertions(+)
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-current-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/synthetic-current-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/synthetic-intermediate1-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/synthetic-intermediate2-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/synthetic-intermediate3-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/synthetic-noparent-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 0ec964c2c6..7c8f67dd6b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1329,6 +1329,24 @@ mymain(void)
- 
-     TEST_CHECKPOINT_DELETE("empty", "a", "empty");
- 
-+    TEST_CHECKPOINT_DELETE("basic-noparent", "a", "basic");
-+    TEST_CHECKPOINT_DELETE("basic-intermediate1", "b", "basic");
-+    TEST_CHECKPOINT_DELETE("basic-intermediate2", "c", "basic");
-+    TEST_CHECKPOINT_DELETE("basic-intermediate3", "d", "basic");
-+    TEST_CHECKPOINT_DELETE("basic-current", "current", "basic");
-+
-+    TEST_CHECKPOINT_DELETE("snapshots-noparent", "a", "snapshots");
-+    TEST_CHECKPOINT_DELETE("snapshots-intermediate1", "b", "snapshots");
-+    TEST_CHECKPOINT_DELETE("snapshots-intermediate2", "c", "snapshots");
-+    TEST_CHECKPOINT_DELETE("snapshots-intermediate3", "d", "snapshots");
-+    TEST_CHECKPOINT_DELETE("snapshots-current", "current", "snapshots");
-+
-+    TEST_CHECKPOINT_DELETE("synthetic-noparent", "a", "synthetic");
-+    TEST_CHECKPOINT_DELETE("synthetic-intermediate1", "b", "synthetic");
-+    TEST_CHECKPOINT_DELETE("synthetic-intermediate2", "c", "synthetic");
-+    TEST_CHECKPOINT_DELETE("synthetic-intermediate3", "d", "synthetic");
-+    TEST_CHECKPOINT_DELETE("synthetic-current", "current", "synthetic");
-+
- #define TEST_BITMAP_VALIDATE(testname, bitmap, rc) \
-     do { \
-         blockbitmapvalidatedata.name = testname; \
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-current-out.json b/tests/qemublocktestdata/checkpointdelete/basic-current-out.json
-new file mode 100644
-index 0000000000..6ed1b63b66
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-current-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "current"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
-new file mode 100644
-index 0000000000..e1dd4920cd
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "b"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
-new file mode 100644
-index 0000000000..5638532d35
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "c"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-new file mode 100644
-index 0000000000..8c56b0e689
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-new file mode 100644
-index 0000000000..e87382fdb4
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "a"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
-new file mode 100644
-index 0000000000..6ed1b63b66
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "current"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-new file mode 100644
-index 0000000000..1cde09131e
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-@@ -0,0 +1,26 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "b"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "b"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-3-format
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-new file mode 100644
-index 0000000000..6fcd7ee0d1
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-@@ -0,0 +1,26 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "c"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-3-format
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-new file mode 100644
-index 0000000000..2977dc3042
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-@@ -0,0 +1,18 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-new file mode 100644
-index 0000000000..e4a6a413a3
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-@@ -0,0 +1,42 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-5-format
-+libvirt-4-format
-+libvirt-3-format
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/synthetic-current-out.json b/tests/qemublocktestdata/checkpointdelete/synthetic-current-out.json
-new file mode 100644
-index 0000000000..6ed1b63b66
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/synthetic-current-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "current"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate1-out.json
-new file mode 100644
-index 0000000000..6eb9716aaa
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate1-out.json
-@@ -0,0 +1,11 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate2-out.json
-new file mode 100644
-index 0000000000..92b849cfc9
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate2-out.json
-@@ -0,0 +1,11 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-3-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate3-out.json
-new file mode 100644
-index 0000000000..466df52007
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/synthetic-intermediate3-out.json
-@@ -0,0 +1,19 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "d"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-3-format
-+libvirt-2-format
-diff --git a/tests/qemublocktestdata/checkpointdelete/synthetic-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/synthetic-noparent-out.json
-new file mode 100644
-index 0000000000..0479815f36
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/synthetic-noparent-out.json
-@@ -0,0 +1,11 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
-+reopen nodes:
-+libvirt-5-format
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Rename-TEST_CHECKPOINT_DELETE_MERGE-to-TEST_CHECKPOINT_DELETE.patch b/SOURCES/libvirt-qemublocktest-Rename-TEST_CHECKPOINT_DELETE_MERGE-to-TEST_CHECKPOINT_DELETE.patch
deleted file mode 100644
index 2caebb2..0000000
--- a/SOURCES/libvirt-qemublocktest-Rename-TEST_CHECKPOINT_DELETE_MERGE-to-TEST_CHECKPOINT_DELETE.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From a97672d9aa9be91ddb2fee0e592e0e137ecca20f Mon Sep 17 00:00:00 2001
-Message-Id: <a97672d9aa9be91ddb2fee0e592e0e137ecca20f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:54 +0200
-Subject: [PATCH] qemublocktest: Rename TEST_CHECKPOINT_DELETE_MERGE to
- TEST_CHECKPOINT_DELETE
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Also rename the helper struct and function.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 520d139b9c3bbf6cc6453044fa6304e1429b7f11)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <cd907a614df510e759d085739ff0523a1ae7b7cc.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 201e5df6b4..0ec964c2c6 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -826,7 +826,7 @@ testQemuBackupIncrementalBitmapCalculate(const void *opaque)
- 
- static const char *checkpointDeletePrefix = "qemublocktestdata/checkpointdelete/";
- 
--struct testQemuCheckpointDeleteMergeData {
-+struct testQemuCheckpointDeleteData {
-     const char *name;
-     virStorageSourcePtr chain;
-     const char *deletebitmap;
-@@ -835,9 +835,9 @@ struct testQemuCheckpointDeleteMergeData {
- 
- 
- static int
--testQemuCheckpointDeleteMerge(const void *opaque)
-+testQemuCheckpointDelete(const void *opaque)
- {
--    const struct testQemuCheckpointDeleteMergeData *data = opaque;
-+    const struct testQemuCheckpointDeleteData *data = opaque;
-     g_autofree char *actual = NULL;
-     g_autofree char *expectpath = NULL;
-     g_autoptr(virJSONValue) actions = NULL;
-@@ -1037,7 +1037,7 @@ mymain(void)
-     struct testJSONtoJSONData jsontojsondata;
-     struct testQemuImageCreateData imagecreatedata;
-     struct testQemuBackupIncrementalBitmapCalculateData backupbitmapcalcdata;
--    struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
-+    struct testQemuCheckpointDeleteData checkpointdeletedata;
-     struct testQemuBlockBitmapValidateData blockbitmapvalidatedata;
-     struct testQemuBlockBitmapBlockcopyData blockbitmapblockcopydata;
-     struct testQemuBlockBitmapBlockcommitData blockbitmapblockcommitdata;
-@@ -1316,18 +1316,18 @@ mymain(void)
- 
-     TEST_BACKUP_BITMAP_CALCULATE("empty", bitmapSourceChain, "a", "empty");
- 
--#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, named) \
-+#define TEST_CHECKPOINT_DELETE(testname, delbmp, named) \
-     do { \
-         checkpointdeletedata.name = testname; \
-         checkpointdeletedata.chain = bitmapSourceChain; \
-         checkpointdeletedata.deletebitmap = delbmp; \
-         checkpointdeletedata.nodedatafile = named; \
-         if (virTestRun("checkpoint delete " testname, \
--                       testQemuCheckpointDeleteMerge, &checkpointdeletedata) < 0) \
-+                       testQemuCheckpointDelete, &checkpointdeletedata) < 0) \
-         ret = -1; \
-     } while (0)
- 
--    TEST_CHECKPOINT_DELETE_MERGE("empty", "a", "empty");
-+    TEST_CHECKPOINT_DELETE("empty", "a", "empty");
- 
- #define TEST_BITMAP_VALIDATE(testname, bitmap, rc) \
-     do { \
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Replace-basic-bitmap-detection-test-case-data.patch b/SOURCES/libvirt-qemublocktest-Replace-basic-bitmap-detection-test-case-data.patch
deleted file mode 100644
index a3263a1..0000000
--- a/SOURCES/libvirt-qemublocktest-Replace-basic-bitmap-detection-test-case-data.patch
+++ /dev/null
@@ -1,282 +0,0 @@
-From 79ee60c0e547a9023eeb7912b10fe363645f5d5a Mon Sep 17 00:00:00 2001
-Message-Id: <79ee60c0e547a9023eeb7912b10fe363645f5d5a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:48 +0200
-Subject: [PATCH] qemublocktest: Replace 'basic' bitmap detection test case
- data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use test data which conforms to the new semantics which changed in the
-previous patch.
-
-The test data was created by the same set of commands as originally in
-commit 9aac9d5bdab039a50de2d8c627b3a1f1578ed471
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit de32397007d5d2a9ca57791ec159f72f7666322b)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <f0985f5309514919dab4baedb04e4b3c214ae407.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktestdata/bitmap/basic.json | 229 +++++++++++-----------
- tests/qemublocktestdata/bitmap/basic.out  |   8 +-
- 2 files changed, 119 insertions(+), 118 deletions(-)
-
-diff --git a/tests/qemublocktestdata/bitmap/basic.json b/tests/qemublocktestdata/bitmap/basic.json
-index 9d418b1a37..718106bf99 100644
---- a/tests/qemublocktestdata/bitmap/basic.json
-+++ b/tests/qemublocktestdata/bitmap/basic.json
-@@ -1,117 +1,118 @@
- [
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.qcow2",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 200704,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-format",
--        "backing_file_depth": 0,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "dirty-bitmaps": [
--            {
--                "name": "current",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "d",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "c",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "b",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            },
--            {
--                "name": "a",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
--            }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 10485760,
-+      "filename": "/tmp/bitmaps.qcow2",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 200704,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "dirty-flag": false
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 197120,
--            "filename": "/tmp/pull4.qcow2",
--            "format": "file",
--            "actual-size": 200704,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    }
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-1-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "dirty-bitmaps": [
-+      {
-+        "name": "current",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "d",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "c",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "b",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.qcow2",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 197120,
-+      "filename": "/tmp/bitmaps.qcow2",
-+      "format": "file",
-+      "actual-size": 200704,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-1-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.qcow2",
-+    "encryption_key_missing": false
-+  }
- ]
-diff --git a/tests/qemublocktestdata/bitmap/basic.out b/tests/qemublocktestdata/bitmap/basic.out
-index 539f7d9bad..5c4c35b3f0 100644
---- a/tests/qemublocktestdata/bitmap/basic.out
-+++ b/tests/qemublocktestdata/bitmap/basic.out
-@@ -1,6 +1,6 @@
- libvirt-1-format:
-   current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        b: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        c: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Replace-snapshots-bitmap-detection-test-case-data.patch b/SOURCES/libvirt-qemublocktest-Replace-snapshots-bitmap-detection-test-case-data.patch
deleted file mode 100644
index a3d14ec..0000000
--- a/SOURCES/libvirt-qemublocktest-Replace-snapshots-bitmap-detection-test-case-data.patch
+++ /dev/null
@@ -1,1476 +0,0 @@
-From 31106cd65ee58f168769bb91eab8a0e5116b7a97 Mon Sep 17 00:00:00 2001
-Message-Id: <31106cd65ee58f168769bb91eab8a0e5116b7a97@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 23 Jun 2020 12:23:49 +0200
-Subject: [PATCH] qemublocktest: Replace 'snapshots' bitmap detection test case
- data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use test data which conforms to the new semantics which changed in the
-previous patch.
-
-The test data was created by the same set of commands as originally in
-commit 0b27b655b1bac480186ce80457113cd5dc34e6a1
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit ff00fa228d66b47e1b24c4a8cccf845af1d9385c)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804593
-Message-Id: <f38005bfc322242472a18e1c05a4a44ddc4780a6.1592906423.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktestdata/bitmap/snapshots.json | 1382 +++++++----------
- tests/qemublocktestdata/bitmap/snapshots.out  |   13 +-
- 2 files changed, 588 insertions(+), 807 deletions(-)
-
-diff --git a/tests/qemublocktestdata/bitmap/snapshots.json b/tests/qemublocktestdata/bitmap/snapshots.json
-index 87e77ad408..2a20aea812 100644
---- a/tests/qemublocktestdata/bitmap/snapshots.json
-+++ b/tests/qemublocktestdata/bitmap/snapshots.json
-@@ -1,836 +1,612 @@
- [
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "backing-image": {
--                        "backing-image": {
--                            "virtual-size": 10485760,
--                            "filename": "/tmp/pull4.qcow2",
--                            "cluster-size": 65536,
--                            "format": "qcow2",
--                            "actual-size": 208896,
--                            "format-specific": {
--                                "type": "qcow2",
--                                "data": {
--                                    "compat": "1.1",
--                                    "lazy-refcounts": false,
--                                    "bitmaps": [
--                                        {
--                                            "flags": [
--                                                "auto"
--                                            ],
--                                            "name": "a",
--                                            "granularity": 65536
--                                        }
--                                    ],
--                                    "refcount-bits": 16,
--                                    "corrupt": false
--                                }
--                            },
--                            "dirty-flag": false
--                        },
--                        "backing-filename-format": "qcow2",
--                        "virtual-size": 10485760,
--                        "filename": "/tmp/pull4.1575911522",
--                        "cluster-size": 65536,
--                        "format": "qcow2",
--                        "actual-size": 208896,
--                        "format-specific": {
--                            "type": "qcow2",
--                            "data": {
--                                "compat": "1.1",
--                                "lazy-refcounts": false,
--                                "bitmaps": [
--                                    {
--                                        "flags": [
--                                            "auto"
--                                        ],
--                                        "name": "a",
--                                        "granularity": 65536
--                                    }
--                                ],
--                                "refcount-bits": 16,
--                                "corrupt": false
--                            }
--                        },
--                        "full-backing-filename": "/tmp/pull4.qcow2",
--                        "backing-filename": "/tmp/pull4.qcow2",
--                        "dirty-flag": false
--                    },
--                    "backing-filename-format": "qcow2",
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.1575911527",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 217088,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "c",
--                                    "granularity": 65536
--                                },
--                                {
--                                    "flags": [
--
--                                    ],
--                                    "name": "b",
--                                    "granularity": 65536
--                                },
--                                {
--                                    "flags": [
--
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "full-backing-filename": "/tmp/pull4.1575911522",
--                    "backing-filename": "/tmp/pull4.1575911522",
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911540",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 212992,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "d",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "c",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.1575911527",
--                "backing-filename": "/tmp/pull4.1575911527",
--                "dirty-flag": false
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 104857600,
-+      "filename": "/tmp/bitmaps.1591792950",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 225280,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-+            {
-+              "flags": [
-+                "in-use",
-+                "auto"
-+              ],
-+              "name": "current",
-+              "granularity": 65536
-+            },
-+            {
-+              "flags": [
-+                "in-use",
-+                "auto"
-+              ],
-+              "name": "c",
-+              "granularity": 65536
-             },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911550",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 212992,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "in-use",
--                                "auto"
--                            ],
--                            "name": "current",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--                                "in-use"
--                            ],
--                            "name": "d",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
-+            {
-+              "flags": [
-+                "in-use",
-+                "auto"
-+              ],
-+              "name": "b",
-+              "granularity": 65536
-             },
--            "full-backing-filename": "/tmp/pull4.1575911540",
--            "backing-filename": "/tmp/pull4.1575911540",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-format",
--        "backing_file_depth": 4,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911540",
--        "dirty-bitmaps": [
-             {
--                "name": "d",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "in-use",
-+                "auto"
-+              ],
-+              "name": "a",
-+              "granularity": 65536
-             },
-             {
--                "name": "current",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "in-use",
-+                "auto"
-+              ],
-+              "name": "d",
-+              "granularity": 65536
-             }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911550",
--        "encryption_key_missing": false
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.1591792938",
-+      "backing-filename": "/tmp/bitmaps.1591792938",
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-1-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.1591792938",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "d",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "b",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "c",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "current",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1591792950",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 590336,
-+      "filename": "/tmp/bitmaps.1591792950",
-+      "format": "file",
-+      "actual-size": 225280,
-+      "dirty-flag": false
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 393728,
--            "filename": "/tmp/pull4.1575911550",
--            "format": "file",
--            "actual-size": 212992,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-1-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911550",
--        "encryption_key_missing": false
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-1-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "backing-image": {
--                        "virtual-size": 10485760,
--                        "filename": "/tmp/pull4.qcow2",
--                        "cluster-size": 65536,
--                        "format": "qcow2",
--                        "actual-size": 208896,
--                        "format-specific": {
--                            "type": "qcow2",
--                            "data": {
--                                "compat": "1.1",
--                                "lazy-refcounts": false,
--                                "bitmaps": [
--                                    {
--                                        "flags": [
--                                            "auto"
--                                        ],
--                                        "name": "a",
--                                        "granularity": 65536
--                                    }
--                                ],
--                                "refcount-bits": 16,
--                                "corrupt": false
--                            }
--                        },
--                        "dirty-flag": false
--                    },
--                    "backing-filename-format": "qcow2",
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.1575911522",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 208896,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "full-backing-filename": "/tmp/pull4.qcow2",
--                    "backing-filename": "/tmp/pull4.qcow2",
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911527",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 217088,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "c",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "b",
--                                "granularity": 65536
--                            },
--                            {
--                                "flags": [
--
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.1575911522",
--                "backing-filename": "/tmp/pull4.1575911522",
--                "dirty-flag": false
-+    "file": "/tmp/bitmaps.1591792950",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 104857600,
-+      "filename": "/tmp/bitmaps.1591792938",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 221184,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-+            {
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "d",
-+              "granularity": 65536
-             },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911540",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 212992,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "d",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "c",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
-+            {
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "a",
-+              "granularity": 65536
-             },
--            "full-backing-filename": "/tmp/pull4.1575911527",
--            "backing-filename": "/tmp/pull4.1575911527",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-2-format",
--        "backing_file_depth": 3,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911527",
--        "dirty-bitmaps": [
-             {
--                "name": "c",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "b",
-+              "granularity": 65536
-             },
-             {
--                "name": "d",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "c",
-+              "granularity": 65536
-             }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911540",
--        "encryption_key_missing": false
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.1591792930",
-+      "backing-filename": "/tmp/bitmaps.1591792930",
-+      "dirty-flag": false
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 393728,
--            "filename": "/tmp/pull4.1575911540",
--            "format": "file",
--            "actual-size": 212992,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-2-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911540",
--        "encryption_key_missing": false
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-2-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.1591792930",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "c",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "b",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "d",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "backing-image": {
--                    "virtual-size": 10485760,
--                    "filename": "/tmp/pull4.qcow2",
--                    "cluster-size": 65536,
--                    "format": "qcow2",
--                    "actual-size": 208896,
--                    "format-specific": {
--                        "type": "qcow2",
--                        "data": {
--                            "compat": "1.1",
--                            "lazy-refcounts": false,
--                            "bitmaps": [
--                                {
--                                    "flags": [
--                                        "auto"
--                                    ],
--                                    "name": "a",
--                                    "granularity": 65536
--                                }
--                            ],
--                            "refcount-bits": 16,
--                            "corrupt": false
--                        }
--                    },
--                    "dirty-flag": false
--                },
--                "backing-filename-format": "qcow2",
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.1575911522",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 208896,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "full-backing-filename": "/tmp/pull4.qcow2",
--                "backing-filename": "/tmp/pull4.qcow2",
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911527",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 217088,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "c",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "b",
--                            "granularity": 65536
--                        },
--                        {
--                            "flags": [
--
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.1575911522",
--            "backing-filename": "/tmp/pull4.1575911522",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-3-format",
--        "backing_file_depth": 2,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.1575911522",
--        "dirty-bitmaps": [
-+    "file": "/tmp/bitmaps.1591792938",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 524800,
-+      "filename": "/tmp/bitmaps.1591792938",
-+      "format": "file",
-+      "actual-size": 221184,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-2-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1591792938",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 104857600,
-+      "filename": "/tmp/bitmaps.1591792930",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 217088,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-             {
--                "name": "a",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "c",
-+              "granularity": 65536
-             },
-             {
--                "name": "b",
--                "recording": false,
--                "persistent": true,
--                "busy": false,
--                "status": "disabled",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "b",
-+              "granularity": 65536
-             },
-             {
--                "name": "c",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "a",
-+              "granularity": 65536
-             }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911527",
--        "encryption_key_missing": false
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.1591792925",
-+      "backing-filename": "/tmp/bitmaps.1591792925",
-+      "dirty-flag": false
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 459264,
--            "filename": "/tmp/pull4.1575911527",
--            "format": "file",
--            "actual-size": 217088,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-3-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911527",
--        "encryption_key_missing": false
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-3-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.1591792925",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "b",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      },
-+      {
-+        "name": "c",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "backing-image": {
--                "virtual-size": 10485760,
--                "filename": "/tmp/pull4.qcow2",
--                "cluster-size": 65536,
--                "format": "qcow2",
--                "actual-size": 208896,
--                "format-specific": {
--                    "type": "qcow2",
--                    "data": {
--                        "compat": "1.1",
--                        "lazy-refcounts": false,
--                        "bitmaps": [
--                            {
--                                "flags": [
--                                    "auto"
--                                ],
--                                "name": "a",
--                                "granularity": 65536
--                            }
--                        ],
--                        "refcount-bits": 16,
--                        "corrupt": false
--                    }
--                },
--                "dirty-flag": false
--            },
--            "backing-filename-format": "qcow2",
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.1575911522",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 208896,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "full-backing-filename": "/tmp/pull4.qcow2",
--            "backing-filename": "/tmp/pull4.qcow2",
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-4-format",
--        "backing_file_depth": 1,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "backing_file": "/tmp/pull4.qcow2",
--        "dirty-bitmaps": [
-+    "file": "/tmp/bitmaps.1591792930",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 459264,
-+      "filename": "/tmp/bitmaps.1591792930",
-+      "format": "file",
-+      "actual-size": 217088,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-3-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1591792930",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "backing-filename-format": "qcow2",
-+      "virtual-size": 104857600,
-+      "filename": "/tmp/bitmaps.1591792925",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 208896,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-             {
--                "name": "a",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "a",
-+              "granularity": 65536
-             }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911522",
--        "encryption_key_missing": false
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "full-backing-filename": "/tmp/bitmaps.qcow2",
-+      "backing-filename": "/tmp/bitmaps.qcow2",
-+      "dirty-flag": false
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 328192,
--            "filename": "/tmp/pull4.1575911522",
--            "format": "file",
--            "actual-size": 208896,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-4-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.1575911522",
--        "encryption_key_missing": false
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-4-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "backing_file": "/tmp/bitmaps.qcow2",
-+    "dirty-bitmaps": [
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 10485760,
--            "filename": "/tmp/pull4.qcow2",
--            "cluster-size": 65536,
--            "format": "qcow2",
--            "actual-size": 208896,
--            "format-specific": {
--                "type": "qcow2",
--                "data": {
--                    "compat": "1.1",
--                    "lazy-refcounts": false,
--                    "bitmaps": [
--                        {
--                            "flags": [
--                                "auto"
--                            ],
--                            "name": "a",
--                            "granularity": 65536
--                        }
--                    ],
--                    "refcount-bits": 16,
--                    "corrupt": false
--                }
--            },
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": true,
--        "node-name": "libvirt-5-format",
--        "backing_file_depth": 0,
--        "drv": "qcow2",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "dirty-bitmaps": [
-+    "file": "/tmp/bitmaps.1591792925",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 328192,
-+      "filename": "/tmp/bitmaps.1591792925",
-+      "format": "file",
-+      "actual-size": 208896,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-4-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.1591792925",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 104857600,
-+      "filename": "/tmp/bitmaps.qcow2",
-+      "cluster-size": 65536,
-+      "format": "qcow2",
-+      "actual-size": 208896,
-+      "format-specific": {
-+        "type": "qcow2",
-+        "data": {
-+          "compat": "1.1",
-+          "compression-type": "zlib",
-+          "lazy-refcounts": false,
-+          "bitmaps": [
-             {
--                "name": "a",
--                "recording": true,
--                "persistent": true,
--                "busy": false,
--                "status": "active",
--                "granularity": 65536,
--                "count": 0
-+              "flags": [
-+                "auto"
-+              ],
-+              "name": "a",
-+              "granularity": 65536
-             }
--        ],
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
-+          ],
-+          "refcount-bits": 16,
-+          "corrupt": false
-+        }
-+      },
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": true,
-+    "node-name": "libvirt-5-format",
-+    "backing_file_depth": 0,
-+    "drv": "qcow2",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "dirty-bitmaps": [
-+      {
-+        "name": "a",
-+        "recording": true,
-+        "persistent": true,
-+        "busy": false,
-+        "status": "active",
-+        "granularity": 65536,
-+        "count": 0
-+      }
-+    ],
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-+    },
-+    "file": "/tmp/bitmaps.qcow2",
-+    "encryption_key_missing": false
-+  },
-+  {
-+    "iops_rd": 0,
-+    "detect_zeroes": "off",
-+    "image": {
-+      "virtual-size": 328192,
-+      "filename": "/tmp/bitmaps.qcow2",
-+      "format": "file",
-+      "actual-size": 208896,
-+      "dirty-flag": false
-+    },
-+    "iops_wr": 0,
-+    "ro": false,
-+    "node-name": "libvirt-5-storage",
-+    "backing_file_depth": 0,
-+    "drv": "file",
-+    "iops": 0,
-+    "bps_wr": 0,
-+    "write_threshold": 0,
-+    "encrypted": false,
-+    "bps": 0,
-+    "bps_rd": 0,
-+    "cache": {
-+      "no-flush": false,
-+      "direct": false,
-+      "writeback": true
-     },
--    {
--        "iops_rd": 0,
--        "detect_zeroes": "off",
--        "image": {
--            "virtual-size": 328192,
--            "filename": "/tmp/pull4.qcow2",
--            "format": "file",
--            "actual-size": 208896,
--            "dirty-flag": false
--        },
--        "iops_wr": 0,
--        "ro": false,
--        "node-name": "libvirt-5-storage",
--        "backing_file_depth": 0,
--        "drv": "file",
--        "iops": 0,
--        "bps_wr": 0,
--        "write_threshold": 0,
--        "encrypted": false,
--        "bps": 0,
--        "bps_rd": 0,
--        "cache": {
--            "no-flush": false,
--            "direct": false,
--            "writeback": true
--        },
--        "file": "/tmp/pull4.qcow2",
--        "encryption_key_missing": false
--    }
-+    "file": "/tmp/bitmaps.qcow2",
-+    "encryption_key_missing": false
-+  }
- ]
-diff --git a/tests/qemublocktestdata/bitmap/snapshots.out b/tests/qemublocktestdata/bitmap/snapshots.out
-index 5dafe946cf..24ca27e4d8 100644
---- a/tests/qemublocktestdata/bitmap/snapshots.out
-+++ b/tests/qemublocktestdata/bitmap/snapshots.out
-@@ -1,12 +1,17 @@
- libvirt-1-format:
--        d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        c: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-   current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
- libvirt-2-format:
--        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        c: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-         d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
- libvirt-3-format:
--        a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--        b: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-         c: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
- libvirt-4-format:
-         a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-qemublocktest-Test-backing-store-strings.patch b/SOURCES/libvirt-qemublocktest-Test-backing-store-strings.patch
deleted file mode 100644
index 97827fd..0000000
--- a/SOURCES/libvirt-qemublocktest-Test-backing-store-strings.patch
+++ /dev/null
@@ -1,1587 +0,0 @@
-From 0d41c52b4ccd749e2c2c33bfe20c2f01d319a962 Mon Sep 17 00:00:00 2001
-Message-Id: <0d41c52b4ccd749e2c2c33bfe20c2f01d319a962@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:02 +0100
-Subject: [PATCH] qemublocktest: Test backing store strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-With -blockdev libvirt provides the string which is recorded  as
-'backing store' property of an image to qemu. Add testing for
-qemuBlockGetBackingStoreString which generates these strings as there's
-logic which determines which format to use.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 5f3b4a37275a4079949bb3428149ab310c6c4e2e)
-
- Conflicts: tests/qemublocktest.c: virBufferTrim changes not backported
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <398610db4cddda5d1ec6dc3b67b2d4c68afbf32c.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  20 ++-
- .../xml2json/block-raw-noopts-srconly.json    |  13 +-
- .../block-raw-reservations-srconly.json       |  13 +-
- .../xml2json/dir-fat-cache-srconly.json       |  15 +-
- .../xml2json/dir-fat-floppy-srconly.json      |  15 +-
- .../xml2json/dir-fat-readonly-srconly.json    |  15 +-
- ...ile-backing_basic-aio_threads-srconly.json |  68 +++++----
- ...acking_basic-cache-directsync-srconly.json |  68 +++++----
- ...file-backing_basic-cache-none-srconly.json |  68 +++++----
- ...le-backing_basic-cache-unsafe-srconly.json |  68 +++++----
- ...backing_basic-cache-writeback-srconly.json |  68 +++++----
- ...king_basic-cache-writethrough-srconly.json |  68 +++++----
- .../file-backing_basic-detect-srconly.json    |  68 +++++----
- .../file-backing_basic-noopts-srconly.json    |  52 ++++---
- ...le-backing_basic-unmap-detect-srconly.json |  68 +++++----
- ...le-backing_basic-unmap-ignore-srconly.json |  68 +++++----
- .../file-backing_basic-unmap-srconly.json     |  68 +++++----
- .../xml2json/file-bochs-noopts-srconly.json   |  13 +-
- .../xml2json/file-cloop-noopts-srconly.json   |  13 +-
- .../xml2json/file-dmg-noopts-srconly.json     |  13 +-
- .../xml2json/file-ploop-noopts-srconly.json   |  13 +-
- ...cow2-backing-chain-encryption-srconly.json |  26 ++--
- ...le-qcow2-backing-chain-noopts-srconly.json | 130 ++++++++++++------
- ...w2-backing-chain-unterminated-srconly.json |  26 ++--
- .../xml2json/file-raw-aio_native-srconly.json |  13 +-
- .../xml2json/file-raw-luks-srconly.json       |  13 +-
- .../xml2json/file-raw-noopts-srconly.json     |  13 +-
- .../xml2json/file-vdi-noopts-srconly.json     |  13 +-
- .../xml2json/file-vhd-noopts-srconly.json     |  13 +-
- .../xml2json/file-vpc-noopts-srconly.json     |  13 +-
- .../xml2json/network-nbd-tls-srconly.json     |  19 ++-
- ...w2-backing-chain-cache-unsafe-srconly.json |  68 ++++++---
- ...backing-chain-encryption_auth-srconly.json |  68 ++++++---
- .../xml2json/nvme-raw-noopts-srconly.json     |  19 ++-
- 34 files changed, 876 insertions(+), 433 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index c009db7996..cf56c8a983 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -184,6 +184,7 @@ struct testQemuDiskXMLToJSONImageData {
-     virJSONValuePtr formatprops;
-     virJSONValuePtr storageprops;
-     virJSONValuePtr storagepropssrc;
-+    char *backingstore;
- };
- 
- 
-@@ -210,6 +211,7 @@ testQemuDiskXMLToPropsClear(struct testQemuDiskXMLToJSONData *data)
-         virJSONValueFree(data->images[i].formatprops);
-         virJSONValueFree(data->images[i].storageprops);
-         virJSONValueFree(data->images[i].storagepropssrc);
-+        g_free(data->images[i].backingstore);
-     }
-     data->nimages = 0;
-     VIR_FREE(data->images);
-@@ -287,6 +289,7 @@ testQemuDiskXMLToProps(const void *opaque)
-     }
- 
-     for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
-+        g_autofree char *backingstore = NULL;
- 
-         if (testQemuDiskXMLToJSONFakeSecrets(n) < 0)
-             return -1;
-@@ -298,7 +301,8 @@ testQemuDiskXMLToProps(const void *opaque)
- 
-         if (!(formatProps = qemuBlockStorageSourceGetBlockdevProps(n, n->backingStore)) ||
-             !(storageSrcOnlyProps = qemuBlockStorageSourceGetBackendProps(n, false, true, true)) ||
--            !(storageProps = qemuBlockStorageSourceGetBackendProps(n, false, false, true))) {
-+            !(storageProps = qemuBlockStorageSourceGetBackendProps(n, false, false, true)) ||
-+            !(backingstore = qemuBlockGetBackingStoreString(n, true))) {
-             if (!data->fail) {
-                 VIR_TEST_VERBOSE("failed to generate qemu blockdev props");
-                 return -1;
-@@ -314,6 +318,7 @@ testQemuDiskXMLToProps(const void *opaque)
-         data->images[data->nimages].formatprops = g_steal_pointer(&formatProps);
-         data->images[data->nimages].storageprops = g_steal_pointer(&storageProps);
-         data->images[data->nimages].storagepropssrc = g_steal_pointer(&storageSrcOnlyProps);
-+        data->images[data->nimages].backingstore = g_steal_pointer(&backingstore);
- 
-         data->nimages++;
-     }
-@@ -425,10 +430,21 @@ testQemuDiskXMLToPropsValidateFileSrcOnly(const void *opaque)
-     for (i = 0; i < data->nimages; i++) {
-         g_autofree char *jsonstr = NULL;
- 
-+        virBufferAddLit(&buf, "(\n");
-+        virBufferAdjustIndent(&buf, 2);
-+        virBufferAddLit(&buf, "source only properties:\n");
-+
-         if (!(jsonstr = virJSONValueToString(data->images[i].storagepropssrc, true)))
-             return -1;
- 
--        virBufferAdd(&buf, jsonstr, -1);
-+        virBufferAddStr(&buf, jsonstr);
-+
-+        virBufferAddLit(&buf, "backing store string:\n");
-+        virBufferAddStr(&buf, data->images[i].backingstore);
-+
-+        virBufferTrim(&buf, "\n", -1);
-+        virBufferAdjustIndent(&buf, -2);
-+        virBufferAddLit(&buf, "\n)\n");
-     }
- 
-     actual = virBufferContentAndReset(&buf);
-diff --git a/tests/qemublocktestdata/xml2json/block-raw-noopts-srconly.json b/tests/qemublocktestdata/xml2json/block-raw-noopts-srconly.json
-index 72f9067353..07f7390433 100644
---- a/tests/qemublocktestdata/xml2json/block-raw-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/block-raw-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "host_device",
--  "filename": "/dev/blah"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "host_device",
-+    "filename": "/dev/blah"
-+  }
-+  backing store string:
-+  /dev/blah
-+)
-diff --git a/tests/qemublocktestdata/xml2json/block-raw-reservations-srconly.json b/tests/qemublocktestdata/xml2json/block-raw-reservations-srconly.json
-index 72f9067353..07f7390433 100644
---- a/tests/qemublocktestdata/xml2json/block-raw-reservations-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/block-raw-reservations-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "host_device",
--  "filename": "/dev/blah"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "host_device",
-+    "filename": "/dev/blah"
-+  }
-+  backing store string:
-+  /dev/blah
-+)
-diff --git a/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json b/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json
-index 6ec4f78d7b..8bc58fa033 100644
---- a/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json
-@@ -1,5 +1,10 @@
--{
--  "driver": "vvfat",
--  "dir": "/var/somefiles",
--  "floppy": false
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "vvfat",
-+    "dir": "/var/somefiles",
-+    "floppy": false
-+  }
-+  backing store string:
-+  /var/somefiles
-+)
-diff --git a/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json b/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json
-index 6b0388bc18..043b796435 100644
---- a/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json
-@@ -1,5 +1,10 @@
--{
--  "driver": "vvfat",
--  "dir": "/var/somefiles",
--  "floppy": true
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "vvfat",
-+    "dir": "/var/somefiles",
-+    "floppy": true
-+  }
-+  backing store string:
-+  /var/somefiles
-+)
-diff --git a/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json b/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json
-index 6ec4f78d7b..8bc58fa033 100644
---- a/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json
-@@ -1,5 +1,10 @@
--{
--  "driver": "vvfat",
--  "dir": "/var/somefiles",
--  "floppy": false
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "vvfat",
-+    "dir": "/var/somefiles",
-+    "floppy": false
-+  }
-+  backing store string:
-+  /var/somefiles
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_threads-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-directsync-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-none-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-none-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-none-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-none-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-unsafe-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writeback-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-cache-writethrough-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-detect-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-detect-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-detect-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-detect-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-noopts-srconly.json
-index dbdf6e563b..35a8c3af37 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-noopts-srconly.json
-@@ -1,16 +1,36 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/c"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/c"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-detect-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-ignore-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-srconly.json
-index ea490b0034..65a3773b97 100644
---- a/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-backing_basic-unmap-srconly.json
-@@ -1,24 +1,44 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
--{
--  "driver": "gluster",
--  "volume": "images",
--  "path": "c",
--  "server": [
--    {
--      "type": "inet",
--      "host": "test.org",
--      "port": "24007"
--    }
--  ]
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/d"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "gluster",
-+    "volume": "images",
-+    "path": "c",
-+    "server": [
-+      {
-+        "type": "inet",
-+        "host": "test.org",
-+        "port": "24007"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  gluster://test.org:24007/images/c
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/d"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/d
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-bochs-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-bochs-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-bochs-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-bochs-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-cloop-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-cloop-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-cloop-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-cloop-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-dmg-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-dmg-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-dmg-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-dmg-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-ploop-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-ploop-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-ploop-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-ploop-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption-srconly.json b/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption-srconly.json
-index 316dbc9df2..29644f8c0f 100644
---- a/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-encryption-srconly.json
-@@ -1,8 +1,18 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/a"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/b"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/a"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/a
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/b"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/b
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts-srconly.json
-index d998acc194..7691609577 100644
---- a/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-noopts-srconly.json
-@@ -1,40 +1,90 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1507297895"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1484071872"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483615252"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483605924"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483605920"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483546244"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483545901"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483545313"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1483536402"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.qcow2"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1507297895"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1507297895
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1484071872"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1484071872
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483615252"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483615252
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483605924"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483605924
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483605920"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483605920
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483546244"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483546244
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483545901"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483545901
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483545313"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483545313
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1483536402"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1483536402
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.qcow2"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.qcow2
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated-srconly.json b/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated-srconly.json
-index e0bce3bcd2..f2fd81184b 100644
---- a/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-qcow2-backing-chain-unterminated-srconly.json
-@@ -1,8 +1,18 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1507297895"
--}
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/rhel7.3.1484071872"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1507297895"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1507297895
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/rhel7.3.1484071872"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/rhel7.3.1484071872
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-raw-aio_native-srconly.json b/tests/qemublocktestdata/xml2json/file-raw-aio_native-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-raw-aio_native-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-raw-aio_native-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-raw-luks-srconly.json b/tests/qemublocktestdata/xml2json/file-raw-luks-srconly.json
-index 6d7088211f..c065e3fab0 100644
---- a/tests/qemublocktestdata/xml2json/file-raw-luks-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-raw-luks-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/luks.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/luks.img"
-+  }
-+  backing store string:
-+  /path/luks.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-raw-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-raw-noopts-srconly.json
-index bb3e8af9eb..a2b32b09e0 100644
---- a/tests/qemublocktestdata/xml2json/file-raw-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-raw-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/var/lib/libvirt/images/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/var/lib/libvirt/images/i.img"
-+  }
-+  backing store string:
-+  /var/lib/libvirt/images/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-vdi-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-vdi-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-vdi-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-vdi-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-vhd-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-vhd-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-vhd-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-vhd-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/file-vpc-noopts-srconly.json b/tests/qemublocktestdata/xml2json/file-vpc-noopts-srconly.json
-index c50fa903f5..58dd7e1c34 100644
---- a/tests/qemublocktestdata/xml2json/file-vpc-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/file-vpc-noopts-srconly.json
-@@ -1,4 +1,9 @@
--{
--  "driver": "file",
--  "filename": "/path/to/i.img"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "file",
-+    "filename": "/path/to/i.img"
-+  }
-+  backing store string:
-+  /path/to/i.img
-+)
-diff --git a/tests/qemublocktestdata/xml2json/network-nbd-tls-srconly.json b/tests/qemublocktestdata/xml2json/network-nbd-tls-srconly.json
-index 455f4e5140..606e68713a 100644
---- a/tests/qemublocktestdata/xml2json/network-nbd-tls-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/network-nbd-tls-srconly.json
-@@ -1,8 +1,13 @@
--{
--  "driver": "nbd",
--  "server": {
--    "type": "inet",
--    "host": "host1.example.com",
--    "port": "10809"
-+(
-+  source only properties:
-+  {
-+    "driver": "nbd",
-+    "server": {
-+      "type": "inet",
-+      "host": "host1.example.com",
-+      "port": "10809"
-+    }
-   }
--}
-+  backing store string:
-+  nbd://host1.example.com:10809
-+)
-diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
-index 69ca9caf88..2d7eeb3bca 100644
---- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-cache-unsafe-srconly.json
-@@ -1,22 +1,46 @@
--{
--  "driver": "rbd",
--  "pool": "rbdpool",
--  "image": "rbdimg",
--  "server": [
--    {
--      "host": "host1.example.com",
--      "port": "0"
--    },
--    {
--      "host": "host2.example.com",
--      "port": "0"
--    }
--  ]
--}
--{
--  "driver": "iscsi",
--  "portal": "example.org:3260",
--  "target": "iscsitarget",
--  "lun": 1,
--  "transport": "tcp"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "rbd",
-+    "pool": "rbdpool",
-+    "image": "rbdimg",
-+    "server": [
-+      {
-+        "host": "host1.example.com",
-+        "port": "0"
-+      },
-+      {
-+        "host": "host2.example.com",
-+        "port": "0"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  json:{
-+    "driver": "rbd",
-+    "pool": "rbdpool",
-+    "image": "rbdimg",
-+    "server": [
-+      {
-+        "host": "host1.example.com",
-+        "port": "0"
-+      },
-+      {
-+        "host": "host2.example.com",
-+        "port": "0"
-+      }
-+    ]
-+  }
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "iscsi",
-+    "portal": "example.org:3260",
-+    "target": "iscsitarget",
-+    "lun": 1,
-+    "transport": "tcp"
-+  }
-+  backing store string:
-+  iscsi://example.org:3260/iscsitarget/1
-+)
-diff --git a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
-index 6298329812..5679318fbe 100644
---- a/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/network-qcow2-backing-chain-encryption_auth-srconly.json
-@@ -1,22 +1,46 @@
--{
--  "driver": "rbd",
--  "pool": "rbdpool",
--  "image": "rbdimg",
--  "server": [
--    {
--      "host": "host1.example.com",
--      "port": "0"
--    },
--    {
--      "host": "host2.example.com",
--      "port": "0"
--    }
--  ]
--}
--{
--  "driver": "iscsi",
--  "portal": "example.org:3260",
--  "target": "iqn.2016-09.com.example:iscsitarget",
--  "lun": 1,
--  "transport": "tcp"
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "rbd",
-+    "pool": "rbdpool",
-+    "image": "rbdimg",
-+    "server": [
-+      {
-+        "host": "host1.example.com",
-+        "port": "0"
-+      },
-+      {
-+        "host": "host2.example.com",
-+        "port": "0"
-+      }
-+    ]
-+  }
-+  backing store string:
-+  json:{
-+    "driver": "rbd",
-+    "pool": "rbdpool",
-+    "image": "rbdimg",
-+    "server": [
-+      {
-+        "host": "host1.example.com",
-+        "port": "0"
-+      },
-+      {
-+        "host": "host2.example.com",
-+        "port": "0"
-+      }
-+    ]
-+  }
-+)
-+(
-+  source only properties:
-+  {
-+    "driver": "iscsi",
-+    "portal": "example.org:3260",
-+    "target": "iqn.2016-09.com.example:iscsitarget",
-+    "lun": 1,
-+    "transport": "tcp"
-+  }
-+  backing store string:
-+  iscsi://example.org:3260/iqn.2016-09.com.example%3Aiscsitarget/1
-+)
-diff --git a/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json b/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-index ed55c08cbf..970e1bb8af 100644
---- a/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-@@ -1,5 +1,14 @@
--{
--  "driver": "nvme",
--  "device": "0000:01:00.0",
--  "namespace": 1
--}
-+(
-+  source only properties:
-+  {
-+    "driver": "nvme",
-+    "device": "0000:01:00.0",
-+    "namespace": 1
-+  }
-+  backing store string:
-+  json:{
-+    "driver": "nvme",
-+    "device": "0000:01:00.0",
-+    "namespace": 1
-+  }
-+)
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemublocktest-XMLjsonXML-Test-formatting-parsing-of-modern-JSON.patch b/SOURCES/libvirt-qemublocktest-XMLjsonXML-Test-formatting-parsing-of-modern-JSON.patch
deleted file mode 100644
index 45c09be..0000000
--- a/SOURCES/libvirt-qemublocktest-XMLjsonXML-Test-formatting-parsing-of-modern-JSON.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From 6b38c75d24769798a6152ebf69ec71a24a4a2e50 Mon Sep 17 00:00:00 2001
-Message-Id: <6b38c75d24769798a6152ebf69ec71a24a4a2e50@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:11 +0100
-Subject: [PATCH] qemublocktest: XMLjsonXML: Test formatting/parsing of modern
- JSON
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The test was invoking the JSON formatter with the 'legacy' flag thus
-formatting bunch of obsolete JSON blockdev definitions. We also should
-test the modern ones. Add a boolean and re-run all the tests in both
-cases.
-
-Additionally for any modern invocation we should also validate that the
-output conforms to the QAPI schema.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 7f8d0ca56a8335b29f3973e5490815c7cfbeac13)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <df8b109c41f11362999ffb84b9d1cf477a89c8f4.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 28 +++++++++++++++++++++++++++-
- 1 file changed, 27 insertions(+), 1 deletion(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 94f20eeb47..d2ba85c5e5 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -41,6 +41,9 @@ VIR_LOG_INIT("tests.storagetest");
- struct testBackingXMLjsonXMLdata {
-     int type;
-     const char *xml;
-+    bool legacy;
-+    virHashTablePtr schema;
-+    virJSONValuePtr schemaroot;
- };
- 
- static int
-@@ -57,6 +60,7 @@ testBackingXMLjsonXML(const void *args)
-     g_autofree char *actualxml = NULL;
-     g_autoptr(virStorageSource) xmlsrc = NULL;
-     g_autoptr(virStorageSource) jsonsrc = NULL;
-+    g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
- 
-     if (!(xmlsrc = virStorageSourceNew()))
-         return -1;
-@@ -71,12 +75,27 @@ testBackingXMLjsonXML(const void *args)
-         return -1;
-     }
- 
--    if (!(backendprops = qemuBlockStorageSourceGetBackendProps(xmlsrc, true, false,
-+    if (!(backendprops = qemuBlockStorageSourceGetBackendProps(xmlsrc,
-+                                                               data->legacy,
-+                                                               false,
-                                                                false))) {
-         fprintf(stderr, "failed to format disk source json\n");
-         return -1;
-     }
- 
-+    if (!data->legacy) {
-+        if (testQEMUSchemaValidate(backendprops, data->schemaroot,
-+                                   data->schema, &debug) < 0) {
-+            g_autofree char *debugmsg = virBufferContentAndReset(&debug);
-+            g_autofree char *debugprops = virJSONValueToString(backendprops, true);
-+
-+            VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-+            VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-+                           debugprops, NULLSTR(debugmsg));
-+            return -1;
-+        }
-+    }
-+
-     if (virJSONValueObjectCreate(&wrapper, "a:file", &backendprops, NULL) < 0)
-         return -1;
- 
-@@ -907,6 +926,10 @@ mymain(void)
-     do { \
-         xmljsonxmldata.type = tpe; \
-         xmljsonxmldata.xml = xmlstr; \
-+        xmljsonxmldata.legacy = true; \
-+        if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
-+                       &xmljsonxmldata) < 0) \
-+        xmljsonxmldata.legacy = false; \
-         if (virTestRun(virTestCounterNext(), testBackingXMLjsonXML, \
-                        &xmljsonxmldata) < 0) \
-             ret = -1; \
-@@ -915,6 +938,9 @@ mymain(void)
- #define TEST_JSON_FORMAT_NET(xmlstr) \
-     TEST_JSON_FORMAT(VIR_STORAGE_TYPE_NETWORK, xmlstr)
- 
-+    xmljsonxmldata.schema = qmp_schema_x86_64;
-+    xmljsonxmldata.schemaroot = qmp_schemaroot_x86_64_blockdev_add;
-+
-     TEST_JSON_FORMAT(VIR_STORAGE_TYPE_FILE, "<source file='/path/to/file'/>\n");
- 
-     /* type VIR_STORAGE_TYPE_BLOCK is not tested since it parses back to 'file' */
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemublocktest-xml-json-Add-test-for-NVMe.patch b/SOURCES/libvirt-qemublocktest-xml-json-Add-test-for-NVMe.patch
deleted file mode 100644
index f1f7077..0000000
--- a/SOURCES/libvirt-qemublocktest-xml-json-Add-test-for-NVMe.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 9fac737d1a60821d00d5c0352ee8c6b01f56d15c Mon Sep 17 00:00:00 2001
-Message-Id: <9fac737d1a60821d00d5c0352ee8c6b01f56d15c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:25:56 +0100
-Subject: [PATCH] qemublocktest: xml->json: Add test for NVMe
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Based on the configuration from the only qemuxml2argv test.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 2337dbfdd1271891e3aa56c3d01389030ca10741)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <3b5eb8505338de198ce8c783bffaecf2ee0127a3.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                              |  2 ++
- .../xml2json/nvme-raw-noopts-srconly.json          |  5 +++++
- .../xml2json/nvme-raw-noopts.json                  | 14 ++++++++++++++
- .../qemublocktestdata/xml2json/nvme-raw-noopts.xml | 13 +++++++++++++
- 4 files changed, 34 insertions(+)
- create mode 100644 tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
- create mode 100644 tests/qemublocktestdata/xml2json/nvme-raw-noopts.json
- create mode 100644 tests/qemublocktestdata/xml2json/nvme-raw-noopts.xml
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index cd7ea6bb2b..189e95f46a 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1203,6 +1203,8 @@ mymain(void)
-     TEST_DISK_TO_JSON("block-raw-noopts");
-     TEST_DISK_TO_JSON("block-raw-reservations");
- 
-+    TEST_DISK_TO_JSON("nvme-raw-noopts");
-+
- #define TEST_JSON_TO_JSON(nme) \
-     do { \
-         jsontojsondata.name = nme; \
-diff --git a/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json b/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-new file mode 100644
-index 0000000000..ed55c08cbf
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/nvme-raw-noopts-srconly.json
-@@ -0,0 +1,5 @@
-+{
-+  "driver": "nvme",
-+  "device": "0000:01:00.0",
-+  "namespace": 1
-+}
-diff --git a/tests/qemublocktestdata/xml2json/nvme-raw-noopts.json b/tests/qemublocktestdata/xml2json/nvme-raw-noopts.json
-new file mode 100644
-index 0000000000..e18e96099c
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/nvme-raw-noopts.json
-@@ -0,0 +1,14 @@
-+{
-+  "node-name": "0123456789ABCDEF0123456789ABCDE",
-+  "read-only": false,
-+  "driver": "raw",
-+  "file": "0123456789ABCDEF0123456789ABCDE"
-+}
-+{
-+  "driver": "nvme",
-+  "device": "0000:01:00.0",
-+  "namespace": 1,
-+  "node-name": "0123456789ABCDEF0123456789ABCDE",
-+  "auto-read-only": true,
-+  "discard": "unmap"
-+}
-diff --git a/tests/qemublocktestdata/xml2json/nvme-raw-noopts.xml b/tests/qemublocktestdata/xml2json/nvme-raw-noopts.xml
-new file mode 100644
-index 0000000000..1e4dbd6e56
---- /dev/null
-+++ b/tests/qemublocktestdata/xml2json/nvme-raw-noopts.xml
-@@ -0,0 +1,13 @@
-+<disk type='nvme' device='disk'>
-+  <driver name='qemu' type='raw'/>
-+  <source type='pci' managed='yes' namespace='1'>
-+    <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
-+    <privateData>
-+      <nodenames>
-+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
-+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
-+      </nodenames>
-+    </privateData>
-+  </source>
-+  <target dev='vda' bus='virtio'/>
-+</disk>
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemublocktest-xml-json-Refactor-cleanup-in-test-case-functions.patch b/SOURCES/libvirt-qemublocktest-xml-json-Refactor-cleanup-in-test-case-functions.patch
deleted file mode 100644
index 98a1655..0000000
--- a/SOURCES/libvirt-qemublocktest-xml-json-Refactor-cleanup-in-test-case-functions.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-From 4adce466baf293c7b6c8751f3c295faef85b402e Mon Sep 17 00:00:00 2001
-Message-Id: <4adce466baf293c7b6c8751f3c295faef85b402e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:25:58 +0100
-Subject: [PATCH] qemublocktest: xml->json: Refactor cleanup in test case
- functions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use automatic variable clearing and remove the cleanup sections of
-testQemuDiskXMLToProps, testQemuDiskXMLToPropsValidateSchema and
-testQemuDiskXMLToPropsValidateFile.
-
-testQemuDiskXMLToPropsValidateFileSrcOnly already uses new helpers.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 4a9f355535f6af92731cd6e8afaf6cfde2751bf1)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <6f11c48265348f2fa72c51f637bb1339dd9d64ee.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 76 +++++++++++++++----------------------------
- 1 file changed, 27 insertions(+), 49 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 189e95f46a..40aa1e2825 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -259,39 +259,38 @@ testQemuDiskXMLToProps(const void *opaque)
-     g_autoptr(virDomainDef) vmdef = NULL;
-     virDomainDiskDefPtr disk = NULL;
-     virStorageSourcePtr n;
--    virJSONValuePtr formatProps = NULL;
--    virJSONValuePtr storageProps = NULL;
-+    g_autoptr(virJSONValue) formatProps = NULL;
-+    g_autoptr(virJSONValue) storageProps = NULL;
-     g_autoptr(virJSONValue) storageSrcOnlyProps = NULL;
--    char *xmlpath = NULL;
--    char *xmlstr = NULL;
--    int ret = -1;
-+    g_autofree char *xmlpath = NULL;
-+    g_autofree char *xmlstr = NULL;
- 
-     xmlpath = g_strdup_printf("%s%s.xml", testQemuDiskXMLToJSONPath, data->name);
- 
-     if (virTestLoadFile(xmlpath, &xmlstr) < 0)
--        goto cleanup;
-+        return -1;
- 
-     /* qemu stores node names in the status XML portion */
-     if (!(disk = virDomainDiskDefParse(xmlstr, data->driver->xmlopt,
-                                        VIR_DOMAIN_DEF_PARSE_STATUS)))
--        goto cleanup;
-+        return -1;
- 
-     if (!(vmdef = virDomainDefNew()) ||
-         virDomainDiskInsert(vmdef, disk) < 0)
--        goto cleanup;
-+        return -1;
- 
-     if (qemuCheckDiskConfig(disk, data->qemuCaps) < 0 ||
-         qemuDomainDeviceDefValidateDisk(disk, data->qemuCaps) < 0) {
-         VIR_TEST_VERBOSE("invalid configuration for disk");
--        goto cleanup;
-+        return -1;
-     }
- 
-     for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
-         if (testQemuDiskXMLToJSONFakeSecrets(n) < 0)
--            goto cleanup;
-+            return -1;
- 
-         if (qemuDomainValidateStorageSource(n, data->qemuCaps) < 0)
--            goto cleanup;
-+            return -1;
- 
-         qemuDomainPrepareDiskSourceData(disk, n);
- 
-@@ -300,27 +299,20 @@ testQemuDiskXMLToProps(const void *opaque)
-             !(storageProps = qemuBlockStorageSourceGetBackendProps(n, false, false, true))) {
-             if (!data->fail) {
-                 VIR_TEST_VERBOSE("failed to generate qemu blockdev props");
--                goto cleanup;
-+                return -1;
-             }
-         } else if (data->fail) {
-             VIR_TEST_VERBOSE("qemu blockdev props should have failed");
--            goto cleanup;
-+            return -1;
-         }
- 
-         if (VIR_APPEND_ELEMENT(data->props, data->nprops, formatProps) < 0 ||
-             VIR_APPEND_ELEMENT(data->props, data->nprops, storageProps) < 0 ||
-             VIR_APPEND_ELEMENT(data->propssrc, data->npropssrc, storageSrcOnlyProps) < 0)
--            goto cleanup;
-+            return -1;
-     }
- 
--    ret = 0;
--
-- cleanup:
--    virJSONValueFree(formatProps);
--    virJSONValueFree(storageProps);
--    VIR_FREE(xmlpath);
--    VIR_FREE(xmlstr);
--    return ret;
-+    return 0;
- }
- 
- 
-@@ -328,9 +320,6 @@ static int
- testQemuDiskXMLToPropsValidateSchema(const void *opaque)
- {
-     struct testQemuDiskXMLToJSONData *data = (void *) opaque;
--    virBuffer debug = VIR_BUFFER_INITIALIZER;
--    char *propsstr = NULL;
--    char *debugmsg = NULL;
-     int ret = 0;
-     size_t i;
- 
-@@ -338,35 +327,31 @@ testQemuDiskXMLToPropsValidateSchema(const void *opaque)
-         return EXIT_AM_SKIP;
- 
-     for (i = 0; i < data->nprops; i++) {
-+        g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
-+
-         if (testQEMUSchemaValidate(data->props[i], data->schemaroot,
-                                    data->schema, &debug) < 0) {
--            debugmsg = virBufferContentAndReset(&debug);
--            propsstr = virJSONValueToString(data->props[i], true);
-+            g_autofree char *debugmsg = virBufferContentAndReset(&debug);
-+            g_autofree char *propsstr = virJSONValueToString(data->props[i], true);
-             VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-             VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-                            propsstr, NULLSTR(debugmsg));
--            VIR_FREE(debugmsg);
--            VIR_FREE(propsstr);
-             ret = -1;
-         }
--
--        virBufferFreeAndReset(&debug);
-     }
- 
-     for (i = 0; i < data->npropssrc; i++) {
-+        g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
-+
-         if (testQEMUSchemaValidate(data->propssrc[i], data->schemaroot,
-                                    data->schema, &debug) < 0) {
--            debugmsg = virBufferContentAndReset(&debug);
--            propsstr = virJSONValueToString(data->propssrc[i], true);
-+            g_autofree char *debugmsg = virBufferContentAndReset(&debug);
-+            g_autofree char *propsstr = virJSONValueToString(data->propssrc[i], true);
-             VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-             VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-                            propsstr, NULLSTR(debugmsg));
--            VIR_FREE(debugmsg);
--            VIR_FREE(propsstr);
-             ret = -1;
-         }
--
--        virBufferFreeAndReset(&debug);
-     }
- 
-     return ret;
-@@ -378,9 +363,8 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque)
- {
-     struct testQemuDiskXMLToJSONData *data = (void *) opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
--    char *jsonpath = NULL;
--    char *actual = NULL;
--    int ret = -1;
-+    g_autofree char *jsonpath = NULL;
-+    g_autofree char *actual = NULL;
-     size_t i;
- 
-     if (data->fail)
-@@ -389,23 +373,17 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque)
-     jsonpath = g_strdup_printf("%s%s.json", testQemuDiskXMLToJSONPath, data->name);
- 
-     for (i = 0; i < data->nprops; i++) {
--        char *jsonstr;
-+        g_autofree char *jsonstr = NULL;
- 
-         if (!(jsonstr = virJSONValueToString(data->props[i], true)))
--            goto cleanup;
-+            return -1;
- 
-         virBufferAdd(&buf, jsonstr, -1);
--        VIR_FREE(jsonstr);
-     }
- 
-     actual = virBufferContentAndReset(&buf);
- 
--    ret = virTestCompareToFile(actual, jsonpath);
--
-- cleanup:
--    VIR_FREE(jsonpath);
--    VIR_FREE(actual);
--    return ret;
-+    return virTestCompareToFile(actual, jsonpath);
- }
- 
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemumonitorjsontest-AddNetdev-Use-real-variant.patch b/SOURCES/libvirt-qemumonitorjsontest-AddNetdev-Use-real-variant.patch
deleted file mode 100644
index dc5c9dd..0000000
--- a/SOURCES/libvirt-qemumonitorjsontest-AddNetdev-Use-real-variant.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From d2d22773873d6386f30f88a2d477c23a2fd534e2 Mon Sep 17 00:00:00 2001
-Message-Id: <d2d22773873d6386f30f88a2d477c23a2fd534e2@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Sun, 26 Apr 2020 13:04:05 -0400
-Subject: [PATCH] qemumonitorjsontest: AddNetdev: Use real variant
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-QEMU now formalized the arguments of netdev-add in the schema, so we
-must use a real type to pass the schema validation once the schema is
-updated.
-
-The 'user' variant doesn't have any other mandatory fields.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-
-Required on 8.2.1 branch due to adding caps_5.0.0.x86_64.replies
-Prerequisite for https://bugzilla.redhat.com/1802592
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20200426170415.18328-3-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- tests/qemumonitorjsontest.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
-index 2c696a2e8b..2fb72b827d 100644
---- a/tests/qemumonitorjsontest.c
-+++ b/tests/qemumonitorjsontest.c
-@@ -1308,7 +1308,7 @@ GEN_TEST_FUNC(qemuMonitorJSONDump, "dummy_protocol", "elf",
-               true)
- GEN_TEST_FUNC(qemuMonitorJSONGraphicsRelocate, VIR_DOMAIN_GRAPHICS_TYPE_SPICE,
-               "localhost", 12345, 12346, "certsubjectval")
--GEN_TEST_FUNC(qemuMonitorJSONAddNetdev, "id=net0,type=test")
-+GEN_TEST_FUNC(qemuMonitorJSONAddNetdev, "id=net0,type=user")
- GEN_TEST_FUNC(qemuMonitorJSONRemoveNetdev, "net0")
- GEN_TEST_FUNC(qemuMonitorJSONDelDevice, "ide0")
- GEN_TEST_FUNC(qemuMonitorJSONAddDevice, "some_dummy_devicestr")
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-qemuxml2argvtest-Add-test-case-for-disks-with-http-s-source.patch b/SOURCES/libvirt-qemuxml2argvtest-Add-test-case-for-disks-with-http-s-source.patch
deleted file mode 100644
index 55b7842..0000000
--- a/SOURCES/libvirt-qemuxml2argvtest-Add-test-case-for-disks-with-http-s-source.patch
+++ /dev/null
@@ -1,166 +0,0 @@
-From 566b77b94d498426062dfddaf5a8c77250ba0857 Mon Sep 17 00:00:00 2001
-Message-Id: <566b77b94d498426062dfddaf5a8c77250ba0857@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:00 +0100
-Subject: [PATCH] qemuxml2argvtest: Add test case for disks with http(s) source
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Upcoming patches will implement the support for sslverify, cookies,
-readahead, and timeout properties. Add a test file which will collect
-the cases.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3dd7952f6f996d13a0a685e1300c178fd9be6658)
-
- Conflicts:
-  tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args:
-  Test output differs on the '-cpu qemu64' line due to previous fixes
-  to the testsuite not being backported
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <4ff67b442d284d3e8cdc9564b9378990b57fa3c0.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../disk-network-http.x86_64-latest.args      | 56 +++++++++++++++++++
- tests/qemuxml2argvdata/disk-network-http.xml  | 50 +++++++++++++++++
- tests/qemuxml2argvtest.c                      |  1 +
- 3 files changed, 107 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
- create mode 100644 tests/qemuxml2argvdata/disk-network-http.xml
-
-diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-new file mode 100644
-index 0000000000..d39f357072
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-@@ -0,0 +1,56 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest1 \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-x86_64 \
-+-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=kvm,usb=off,dump-guest-core=off \
-+-m 214 \
-+-overcommit mem-lock=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 \
-+-blockdev '{"driver":"http","url":"http://example.org:80/test.img",\
-+"node-name":"libvirt-4-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-4-format","read-only":false,"driver":"raw",\
-+"file":"libvirt-4-storage"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=libvirt-4-format,\
-+id=virtio-disk0,bootindex=1 \
-+-blockdev '{"driver":"https","url":"https://example.org:443/test2.img",\
-+"node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw",\
-+"file":"libvirt-3-storage"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-3-format,\
-+id=virtio-disk1 \
-+-blockdev '{"driver":"http","url":"http://example.org:1234/test3.img",\
-+"node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw",\
-+"file":"libvirt-2-storage"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-2-format,\
-+id=virtio-disk2 \
-+-blockdev '{"driver":"https","url":"https://example.org:1234/test4.img",\
-+"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw",\
-+"file":"libvirt-1-storage"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=libvirt-1-format,\
-+id=virtio-disk3 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
-new file mode 100644
-index 0000000000..83a9865c83
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-network-http.xml
-@@ -0,0 +1,50 @@
-+<domain type='kvm'>
-+  <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='x86_64' 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>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='http' name='test.img'>
-+        <host name='example.org'/>
-+      </source>
-+      <target dev='vda' bus='virtio'/>
-+    </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='https' name='test2.img'>
-+        <host name='example.org'/>
-+      </source>
-+      <target dev='vdb' bus='virtio'/>
-+    </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='http' name='test3.img'>
-+        <host name='example.org' port='1234'/>
-+      </source>
-+      <target dev='vdc' bus='virtio'/>
-+    </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='https' name='test4.img'>
-+        <host name='example.org' port='1234'/>
-+      </source>
-+      <target dev='vdd' bus='virtio'/>
-+    </disk>
-+    <controller type='usb' index='0'/>
-+    <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 265ffce465..7bc01d55d5 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1089,6 +1089,7 @@ mymain(void)
-             QEMU_CAPS_OBJECT_TLS_CREDS_X509, QEMU_CAPS_NBD_TLS);
-     DO_TEST_CAPS_VER("disk-network-tlsx509", "2.12.0");
-     DO_TEST_CAPS_LATEST("disk-network-tlsx509");
-+    DO_TEST_CAPS_LATEST("disk-network-http");
-     driver.config->vxhsTLS = 0;
-     VIR_FREE(driver.config->vxhsTLSx509certdir);
-     DO_TEST("disk-no-boot", NONE);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-qemuxml2xmltest-Add-case-for-host-model-vendor_id.patch b/SOURCES/libvirt-qemuxml2xmltest-Add-case-for-host-model-vendor_id.patch
deleted file mode 100644
index 55abb7a..0000000
--- a/SOURCES/libvirt-qemuxml2xmltest-Add-case-for-host-model-vendor_id.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From a620d42d440828f1f978a75c01a9515d0c131721 Mon Sep 17 00:00:00 2001
-Message-Id: <a620d42d440828f1f978a75c01a9515d0c131721@dist-git>
-From: Jiri Denemark <jdenemar@redhat.com>
-Date: Thu, 20 Feb 2020 09:08:04 +0100
-Subject: [PATCH] qemuxml2xmltest: Add case for host-model vendor_id
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This patch shows a bug in our code: the
-
-    <model vendor_id="Libvirt QEMU"/>
-
-element present in the source XML is lost when the parsed CPU definition
-is formatted back to XML.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804549
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 1939fbef989e6990cb5dd2d2d7ff8ea002c517c2)
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <cef7f3e28619a9fc306f17eddaa6d81df5ce21c2.1582186015.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../cpu-host-model-vendor.xml                 | 28 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  1 +
- 2 files changed, 29 insertions(+)
- create mode 100644 tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
-
-diff --git a/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
-new file mode 100644
-index 0000000000..d2447ccd10
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/cpu-host-model-vendor.xml
-@@ -0,0 +1,28 @@
-+<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'>6</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-+    <boot dev='network'/>
-+  </os>
-+  <cpu mode='host-model' check='partial'/>
-+  <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='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 a3c7f8fd47..7c105e5207 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -266,6 +266,7 @@ mymain(void)
-     DO_TEST("cpu-host-kvmclock", NONE);
-     DO_TEST("cpu-host-passthrough-features", NONE);
-     DO_TEST("cpu-host-model-features", NONE);
-+    DO_TEST("cpu-host-model-vendor", NONE);
-     DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
-     DO_TEST("kvmclock", NONE);
-     DO_TEST("clock-timer-hyperv-rtc", NONE);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-qemuxml2xmltest-Add-numatune-distance-test-case.patch b/SOURCES/libvirt-qemuxml2xmltest-Add-numatune-distance-test-case.patch
deleted file mode 100644
index 64b5e6f..0000000
--- a/SOURCES/libvirt-qemuxml2xmltest-Add-numatune-distance-test-case.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From 6047fac5e90c96d2d79b08e0c9d32ee7f0ad52cd Mon Sep 17 00:00:00 2001
-Message-Id: <6047fac5e90c96d2d79b08e0c9d32ee7f0ad52cd@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:32 +0200
-Subject: [PATCH] qemuxml2xmltest: Add "numatune-distance" test case
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This test case checks that expanding NUMA distance works. On
-input we accept if only distance from A to B is specified. On the
-output we format the B to A distance too.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit afb1ea67769d88290499c5c6a0c34982bad6e9c9)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <6974ab2c0987840742965ea925adcc4395f72ec2.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../qemuxml2xmloutdata/numatune-distances.xml | 96 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  1 +
- 2 files changed, 97 insertions(+)
- create mode 100644 tests/qemuxml2xmloutdata/numatune-distances.xml
-
-diff --git a/tests/qemuxml2xmloutdata/numatune-distances.xml b/tests/qemuxml2xmloutdata/numatune-distances.xml
-new file mode 100644
-index 0000000000..48f89cb015
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/numatune-distances.xml
-@@ -0,0 +1,96 @@
-+<domain type='qemu'>
-+  <name>QEMUGuest</name>
-+  <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
-+  <memory unit='KiB'>8388608</memory>
-+  <currentMemory unit='KiB'>8388608</currentMemory>
-+  <vcpu placement='static'>12</vcpu>
-+  <os>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <acpi/>
-+    <apic/>
-+    <pae/>
-+  </features>
-+  <cpu>
-+    <numa>
-+      <cell id='0' cpus='0,11' memory='2097152' unit='KiB'>
-+        <distances>
-+          <sibling id='0' value='10'/>
-+          <sibling id='1' value='21'/>
-+          <sibling id='2' value='31'/>
-+          <sibling id='3' value='41'/>
-+          <sibling id='4' value='51'/>
-+          <sibling id='5' value='61'/>
-+        </distances>
-+      </cell>
-+      <cell id='1' cpus='1,10' memory='2097152' unit='KiB'>
-+        <distances>
-+          <sibling id='0' value='21'/>
-+          <sibling id='1' value='10'/>
-+          <sibling id='2' value='21'/>
-+          <sibling id='3' value='31'/>
-+          <sibling id='4' value='41'/>
-+          <sibling id='5' value='51'/>
-+        </distances>
-+      </cell>
-+      <cell id='2' cpus='2,9' memory='2097152' unit='KiB'>
-+        <distances>
-+          <sibling id='0' value='31'/>
-+          <sibling id='1' value='21'/>
-+          <sibling id='2' value='10'/>
-+          <sibling id='3' value='21'/>
-+          <sibling id='4' value='31'/>
-+          <sibling id='5' value='41'/>
-+        </distances>
-+      </cell>
-+      <cell id='3' cpus='3,8' memory='2097152' unit='KiB'>
-+        <distances>
-+          <sibling id='0' value='41'/>
-+          <sibling id='1' value='31'/>
-+          <sibling id='2' value='21'/>
-+          <sibling id='3' value='10'/>
-+          <sibling id='4' value='21'/>
-+          <sibling id='5' value='31'/>
-+        </distances>
-+      </cell>
-+      <cell id='4' cpus='4,7' memory='2097152' unit='KiB'>
-+        <distances>
-+          <sibling id='0' value='51'/>
-+          <sibling id='1' value='41'/>
-+          <sibling id='2' value='31'/>
-+          <sibling id='3' value='21'/>
-+          <sibling id='4' value='10'/>
-+          <sibling id='5' value='21'/>
-+        </distances>
-+      </cell>
-+      <cell id='5' cpus='5-6' memory='2097152' unit='KiB'>
-+        <distances>
-+          <sibling id='0' value='61'/>
-+          <sibling id='1' value='51'/>
-+          <sibling id='2' value='41'/>
-+          <sibling id='3' value='31'/>
-+          <sibling id='4' value='21'/>
-+          <sibling id='5' value='10'/>
-+        </distances>
-+      </cell>
-+    </numa>
-+  </cpu>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>restart</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='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 c8218e423e..6c3f5c4a9e 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1104,6 +1104,7 @@ mymain(void)
-     DO_TEST("numatune-auto-prefer", NONE);
-     DO_TEST("numatune-memnode", QEMU_CAPS_NUMA, QEMU_CAPS_OBJECT_MEMORY_FILE);
-     DO_TEST("numatune-memnode-no-memory", QEMU_CAPS_OBJECT_MEMORY_FILE);
-+    DO_TEST("numatune-distances", QEMU_CAPS_NUMA, QEMU_CAPS_NUMA_DIST);
- 
-     DO_TEST("bios-nvram", NONE);
-     DO_TEST("bios-nvram-os-interleave", NONE);
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-qemuxml2xmltest-Wire-up-disk-network-http-case.patch b/SOURCES/libvirt-qemuxml2xmltest-Wire-up-disk-network-http-case.patch
deleted file mode 100644
index 38d79bc..0000000
--- a/SOURCES/libvirt-qemuxml2xmltest-Wire-up-disk-network-http-case.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From eae7db4b5daa44a6bf83e2d57601d108d3b93beb Mon Sep 17 00:00:00 2001
-Message-Id: <eae7db4b5daa44a6bf83e2d57601d108d3b93beb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:39 +0200
-Subject: [PATCH] qemuxml2xmltest: Wire up 'disk-network-http' case
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c34ec56abad4b2286ef82a0a3ab9deb4d807a9bf)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-
-Conflicts: The XML output file differs in the <cpu> element as changes
-           in default cpu handling were not backported.
-Message-Id: <dd5d567d2c6f0a0e50f9184360265fc0aff78296.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- .../disk-network-http.x86_64-latest.xml       | 68 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  2 +
- 2 files changed, 70 insertions(+)
- create mode 100644 tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-
-diff --git a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-new file mode 100644
-index 0000000000..238a5fef58
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-@@ -0,0 +1,68 @@
-+<domain type='kvm'>
-+  <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='x86_64' 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-x86_64</emulator>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='http' name='test.img'>
-+        <host name='example.org' port='80'/>
-+        <timeout seconds='1234'/>
-+      </source>
-+      <target dev='vda' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-+    </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='https' name='test2.img'>
-+        <host name='example.org' port='443'/>
-+        <readahead size='1024'/>
-+      </source>
-+      <target dev='vdb' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+    </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='http' name='test3.img'>
-+        <host name='example.org' port='1234'/>
-+        <cookies>
-+          <cookie name='test'>testcookievalue</cookie>
-+          <cookie name='test2'>blurb</cookie>
-+        </cookies>
-+      </source>
-+      <target dev='vdc' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-+    </disk>
-+    <disk type='network' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source protocol='https' name='test4.img'>
-+        <host name='example.org' port='1234'/>
-+        <ssl verify='no'/>
-+        <cookies>
-+          <cookie name='test'>testcookievalue</cookie>
-+          <cookie name='test2'>blurb</cookie>
-+        </cookies>
-+      </source>
-+      <target dev='vdd' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
-+    </disk>
-+    <controller type='usb' index='0' model='piix3-uhci'>
-+      <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 f77f59fa3c..15110dd104 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -1089,6 +1089,8 @@ mymain(void)
-     DO_TEST("disk-backing-chains-index", NONE);
-     DO_TEST("disk-backing-chains-noindex", NONE);
- 
-+    DO_TEST_CAPS_LATEST("disk-network-http");
-+
-     DO_TEST("chardev-label",
-             QEMU_CAPS_DEVICE_VIRTIO_RNG);
- 
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-qemuxml2xmltest-set-driver-as-privileged.patch b/SOURCES/libvirt-qemuxml2xmltest-set-driver-as-privileged.patch
deleted file mode 100644
index 51a7908..0000000
--- a/SOURCES/libvirt-qemuxml2xmltest-set-driver-as-privileged.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From dc5c05491ab6e66cb2ce411530cb24a2cd76763b Mon Sep 17 00:00:00 2001
-Message-Id: <dc5c05491ab6e66cb2ce411530cb24a2cd76763b@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:38 +0100
-Subject: [PATCH] qemuxml2xmltest: set driver as privileged
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some validation check might reject unprivileged drivers in the future.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 99dc98db3d3e2381f322120bf00c25ba0501b092)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <e97eb61c987fdb72ced457131c6c86260dd449a0.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- tests/qemuxml2xmltest.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 7c105e5207..d58259587b 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -162,6 +162,7 @@ mymain(void)
-         return EXIT_FAILURE;
- 
-     cfg = virQEMUDriverGetConfig(&driver);
-+    driver.privileged = true;
- 
- # define DO_TEST_INTERNAL(_name, suffix, when, ...) \
-     do { \
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-rhel-Enable-usage-of-x-blockdev-reopen.patch b/SOURCES/libvirt-rhel-Enable-usage-of-x-blockdev-reopen.patch
deleted file mode 100644
index 94c53cd..0000000
--- a/SOURCES/libvirt-rhel-Enable-usage-of-x-blockdev-reopen.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From 0ca4a633af46f2e06d3ef831919ca75387f42103 Mon Sep 17 00:00:00 2001
-Message-Id: <0ca4a633af46f2e06d3ef831919ca75387f42103@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:34 +0100
-Subject: [PATCH] rhel: Enable usage of x-blockdev-reopen
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-RHEL-only
-
-Introduce a new capability QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API
-based on the presence of '__com.redhat_rhel-av-8_2_0-api' feature for
-'x-blockdev-reopen' which states that reopen works for what libvirt
-is going to use it and wire up code to call the x- prefixed command.
-
-This implementation will become dormant once qemu starts supporting
-upstream-stable blockdev-reopen.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1799013
-Message-Id: <098dc0e73e1b561af991f2a9ecf13436dde3b33d.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c        |  3 ++-
- src/qemu/qemu_capabilities.c | 13 +++++++++++++
- src/qemu/qemu_capabilities.h |  3 +++
- src/qemu/qemu_monitor.c      |  5 +++--
- src/qemu/qemu_monitor.h      |  3 ++-
- src/qemu/qemu_monitor_json.c | 12 +++++++++---
- src/qemu/qemu_monitor_json.h |  3 ++-
- 7 files changed, 34 insertions(+), 8 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 21c1ad9618..099ceeb802 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -3225,6 +3225,7 @@ qemuBlockReopenFormat(virDomainObjPtr vm,
-     qemuDomainObjPrivatePtr priv = vm->privateData;
-     virQEMUDriverPtr driver = priv->driver;
-     g_autoptr(virJSONValue) reopenprops = NULL;
-+    bool downstream = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API);
-     int rc;
- 
-     /* If we are lacking the object here, qemu might have opened an image with
-@@ -3241,7 +3242,7 @@ qemuBlockReopenFormat(virDomainObjPtr vm,
-     if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
-         return -1;
- 
--    rc = qemuMonitorBlockdevReopen(priv->mon, &reopenprops);
-+    rc = qemuMonitorBlockdevReopen(priv->mon, &reopenprops, downstream);
- 
-     if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
-         return -1;
-diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
-index a4046b09d6..0b4ed4253c 100644
---- a/src/qemu/qemu_capabilities.c
-+++ b/src/qemu/qemu_capabilities.c
-@@ -561,6 +561,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
-               "vhost-user-fs",
-               "blockdev-snapshot.allow-write-only-overlay",
-               "blockdev-reopen",
-+
-+              /* 355 */
-+              "blockdev-reopen.__com.redhat_rhel-av-8_2_0-api"
-     );
- 
- 
-@@ -1419,6 +1422,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsNVDIMM[] = {
- 
- /* see documentation for virQEMUQAPISchemaPathGet for the query format */
- static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
-+    { "x-blockdev-reopen/$__com.redhat_rhel-av-8_2_0-api", QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API },
-     { "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
-     { "blockdev-add/arg-type/+gluster/debug", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
-     { "blockdev-add/arg-type/+vxhs", QEMU_CAPS_VXHS},
-@@ -4861,6 +4865,15 @@ virQEMUCapsInitProcessCaps(virQEMUCapsPtr qemuCaps)
-         virQEMUCapsGet(qemuCaps, QEMU_CAPS_SAVEVM_MONITOR_NODES))
-         virQEMUCapsSet(qemuCaps, QEMU_CAPS_BLOCKDEV);
- 
-+    /* RHEL-only:
-+     * - if upstream blockdev-reopen is enabled, clear the downstream flag
-+     * - if the downstream flag is present but not the upstream, assert the upstream flag too
-+     */
-+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN))
-+        virQEMUCapsClear(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API);
-+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API))
-+        virQEMUCapsSet(qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN);
-+
-     virQEMUCapsInitProcessCapsInterlock(qemuCaps);
- }
- 
-diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
-index 8fdbe05638..0f7c586703 100644
---- a/src/qemu/qemu_capabilities.h
-+++ b/src/qemu/qemu_capabilities.h
-@@ -543,6 +543,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
-     QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY, /* blockdev-snapshot has the 'allow-write-only-overlay' feature */
-     QEMU_CAPS_BLOCKDEV_REOPEN, /* 'blockdev-reopen' qmp command is supported */
- 
-+    /* 355 */
-+    QEMU_CAPS_BLOCKDEV_REOPEN_COM_REDHAT_AV_8_2_0_API, /* downstream support for blockdev reopen in rhel-av-8.2.0 */
-+
-     QEMU_CAPS_LAST /* this must always be the last item */
- } virQEMUCapsFlags;
- 
-diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
-index c4202d59af..5915035589 100644
---- a/src/qemu/qemu_monitor.c
-+++ b/src/qemu/qemu_monitor.c
-@@ -4409,14 +4409,15 @@ qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
- 
- int
- qemuMonitorBlockdevReopen(qemuMonitorPtr mon,
--                          virJSONValuePtr *props)
-+                          virJSONValuePtr *props,
-+                          bool downstream)
- {
-     VIR_DEBUG("props=%p (node-name=%s)", *props,
-               NULLSTR(virJSONValueObjectGetString(*props, "node-name")));
- 
-     QEMU_CHECK_MONITOR(mon);
- 
--    return qemuMonitorJSONBlockdevReopen(mon, props);
-+    return qemuMonitorJSONBlockdevReopen(mon, props, downstream);
- }
- 
- 
-diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
-index 481fc8e12e..ca975d084c 100644
---- a/src/qemu/qemu_monitor.h
-+++ b/src/qemu/qemu_monitor.h
-@@ -1326,7 +1326,8 @@ int qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
-                            virJSONValuePtr *props);
- 
- int qemuMonitorBlockdevReopen(qemuMonitorPtr mon,
--                              virJSONValuePtr *props);
-+                              virJSONValuePtr *props,
-+                              bool downstream);
- 
- int qemuMonitorBlockdevDel(qemuMonitorPtr mon,
-                            const char *nodename);
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 0122b77259..92d7317a82 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -8832,14 +8832,20 @@ qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
- 
- int
- qemuMonitorJSONBlockdevReopen(qemuMonitorPtr mon,
--                              virJSONValuePtr *props)
-+                              virJSONValuePtr *props,
-+                              bool downstream)
- {
-     g_autoptr(virJSONValue) cmd = NULL;
-     g_autoptr(virJSONValue) reply = NULL;
-     virJSONValuePtr pr = g_steal_pointer(props);
- 
--    if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", pr)))
--        return -1;
-+    if (downstream) {
-+        if (!(cmd = qemuMonitorJSONMakeCommandInternal("x-blockdev-reopen", pr)))
-+            return -1;
-+    } else {
-+        if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", pr)))
-+            return -1;
-+    }
- 
-     if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
-         return -1;
-diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
-index 801babef97..38c61a5661 100644
---- a/src/qemu/qemu_monitor_json.h
-+++ b/src/qemu/qemu_monitor_json.h
-@@ -601,7 +601,8 @@ int qemuMonitorJSONBlockdevAdd(qemuMonitorPtr mon,
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
- 
- int qemuMonitorJSONBlockdevReopen(qemuMonitorPtr mon,
--                                  virJSONValuePtr *props)
-+                                  virJSONValuePtr *props,
-+                                  bool downstream)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
- 
- int qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-rpc-add-support-for-filtering-acls-by-uint-params.patch b/SOURCES/libvirt-rpc-add-support-for-filtering-acls-by-uint-params.patch
deleted file mode 100644
index 78f2dcc..0000000
--- a/SOURCES/libvirt-rpc-add-support-for-filtering-acls-by-uint-params.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From ea90c1e23120e8bde86d22d83d179bc393bc2daa Mon Sep 17 00:00:00 2001
-Message-Id: <ea90c1e23120e8bde86d22d83d179bc393bc2daa@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 29 Sep 2020 14:43:04 +0200
-Subject: [PATCH] rpc: add support for filtering @acls by uint params
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CVE-2020-25637
-
-Add a new field to @acl annotations for filtering by
-unsigned int parameters.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 50864dcda191eb35732dbd80fb6ca251a6bba923)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <7900a5f9e8479789a5cc427a85f385095e517e87.1601383236.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/remote/remote_protocol.x |  3 +++
- src/rpc/gendispatch.pl       | 21 ++++++++++++++++++++-
- 2 files changed, 23 insertions(+), 1 deletion(-)
-
-diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
-index 79cdb13a90..2527a78142 100644
---- a/src/remote/remote_protocol.x
-+++ b/src/remote/remote_protocol.x
-@@ -3805,6 +3805,7 @@ enum remote_procedure {
-      *
-      * - @acl: <object>:<permission>
-      * - @acl: <object>:<permission>:<flagname>
-+     * - @acl: <object>:<permission>::<param>:<value>
-      *
-      *   Declare the access control requirements for the API. May be repeated
-      *   multiple times, if multiple rules are required.
-@@ -3814,6 +3815,8 @@ enum remote_procedure {
-      *     <permission> is one of the permissions in access/viraccessperm.h
-      *     <flagname> indicates the rule only applies if the named flag
-      *     is set in the API call
-+     *     <param> and <value> can be used to check an unsigned int parameter
-+     *     against value
-      *
-      * - @aclfilter: <object>:<permission>
-      *
-diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
-index 4cb9701e59..6a4f8074ad 100755
---- a/src/rpc/gendispatch.pl
-+++ b/src/rpc/gendispatch.pl
-@@ -2104,10 +2104,12 @@ elsif ($mode eq "client") {
-             my @acl;
-             foreach (@{$acl}) {
-                 my @bits = split /:/;
--                push @acl, { object => $bits[0], perm => $bits[1], flags => $bits[2] }
-+                push @acl, { object => $bits[0], perm => $bits[1], flags => $bits[2],
-+                             param => $bits[3], value => $bits[4] }
-             }
- 
-             my $checkflags = 0;
-+            my $paramtocheck = undef;
-             for (my $i = 1 ; $i <= $#acl ; $i++) {
-                 if ($acl[$i]->{object} ne $acl[0]->{object}) {
-                     die "acl for '$call->{ProcName}' cannot check different objects";
-@@ -2115,6 +2117,9 @@ elsif ($mode eq "client") {
-                 if (defined $acl[$i]->{flags} && length $acl[$i]->{flags}) {
-                     $checkflags = 1;
-                 }
-+                if (defined $acl[$i]->{param}) {
-+                    $paramtocheck = $acl[$i]->{param};
-+                }
-             }
- 
-             my $apiname = $prefix . $call->{ProcName};
-@@ -2150,6 +2155,9 @@ elsif ($mode eq "client") {
-             if ($checkflags) {
-                 push @argdecls, "unsigned int flags";
-             }
-+            if (defined $paramtocheck) {
-+                push @argdecls, "unsigned int " . $paramtocheck;
-+            }
- 
-             my $ret;
-             my $pass;
-@@ -2210,6 +2218,17 @@ elsif ($mode eq "client") {
-                         }
-                         print "        ";
-                     }
-+                    if (defined $acl->{param}) {
-+                        my $param = $acl->{param};
-+                        my $value = $acl->{value};
-+                        if ($value =~ /^\!/) {
-+                            $value = substr $value, 1;
-+                            print "($param != ($value)) &&\n";
-+                        } else {
-+                            print "($param == ($value)) &&\n";
-+                        }
-+                        print "        ";
-+                    }
-                     print "(rv = $method(" . join(", ", @argvars, $perm) . ")) <= 0) {\n";
-                     print "        virObjectUnref(mgr);\n";
-                     if ($action eq "Ensure") {
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-rpc-gendispatch-handle-empty-flags.patch b/SOURCES/libvirt-rpc-gendispatch-handle-empty-flags.patch
deleted file mode 100644
index f279dc2..0000000
--- a/SOURCES/libvirt-rpc-gendispatch-handle-empty-flags.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From fa5b4100c32d3125eeb0d6b0024892af86ecddb0 Mon Sep 17 00:00:00 2001
-Message-Id: <fa5b4100c32d3125eeb0d6b0024892af86ecddb0@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 29 Sep 2020 14:43:03 +0200
-Subject: [PATCH] rpc: gendispatch: handle empty flags
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CVE-2020-25637
-
-Prepare for omission of the <flagname> in remote_protocol.x
-@acl annotations:
- @acl: <object>:<permission>:<flagname>
-so that we can add more fields after, e.g.:
- @acl: <object>:<permission>::<field>
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 955029bd0ad7ef96000f529ac38204a8f4a96401)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <5fda9fc6cfe45eace10b8c2565a8b0c46b51f46c.1601383236.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/rpc/gendispatch.pl | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
-index 8656c8f205..4cb9701e59 100755
---- a/src/rpc/gendispatch.pl
-+++ b/src/rpc/gendispatch.pl
-@@ -2112,7 +2112,7 @@ elsif ($mode eq "client") {
-                 if ($acl[$i]->{object} ne $acl[0]->{object}) {
-                     die "acl for '$call->{ProcName}' cannot check different objects";
-                 }
--                if (defined $acl[$i]->{flags}) {
-+                if (defined $acl[$i]->{flags} && length $acl[$i]->{flags}) {
-                     $checkflags = 1;
-                 }
-             }
-@@ -2200,7 +2200,7 @@ elsif ($mode eq "client") {
-                     my $method = "virAccessManagerCheck" . $object;
-                     my $space = ' ' x length($method);
-                     print "    if (";
--                    if (defined $acl->{flags}) {
-+                    if (defined $acl->{flags} && length $acl->{flags}) {
-                         my $flags = $acl->{flags};
-                         if ($flags =~ /^\!/) {
-                             $flags = substr $flags, 1;
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-rpc-require-write-acl-for-guest-agent-in-virDomainInterfaceAddresses.patch b/SOURCES/libvirt-rpc-require-write-acl-for-guest-agent-in-virDomainInterfaceAddresses.patch
deleted file mode 100644
index fdc0d5e..0000000
--- a/SOURCES/libvirt-rpc-require-write-acl-for-guest-agent-in-virDomainInterfaceAddresses.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 48f74599ffc86aa632ee39aff1aa8459880ec283 Mon Sep 17 00:00:00 2001
-Message-Id: <48f74599ffc86aa632ee39aff1aa8459880ec283@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Tue, 29 Sep 2020 14:43:05 +0200
-Subject: [PATCH] rpc: require write acl for guest agent in
- virDomainInterfaceAddresses
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CVE-2020-25637
-
-Add a requirement for domain:write if source is set to
-VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
-(cherry picked from commit e4116eaa44cb366b59f7fe98f4b88d04c04970ad)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-
-Conflicts: src/lxc/lxc_driver.c
-    The LXC implementation of the API was introduced
-    in libvirt 6.1.0, so it's not present downstream.
-Message-Id: <5fdc2ebf7621698c8136b354922c687fc09286de.1601383236.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/libxl/libxl_driver.c     | 2 +-
- src/qemu/qemu_driver.c       | 2 +-
- src/remote/remote_protocol.x | 1 +
- 3 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
-index f021ec9c5d..1449795494 100644
---- a/src/libxl/libxl_driver.c
-+++ b/src/libxl/libxl_driver.c
-@@ -6318,7 +6318,7 @@ libxlDomainInterfaceAddresses(virDomainPtr dom,
-     if (!(vm = libxlDomObjFromDomain(dom)))
-         goto cleanup;
- 
--    if (virDomainInterfaceAddressesEnsureACL(dom->conn, vm->def) < 0)
-+    if (virDomainInterfaceAddressesEnsureACL(dom->conn, vm->def, source) < 0)
-         goto cleanup;
- 
-     if (virDomainObjCheckActive(vm) < 0)
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index f8a259e020..0f06974a1b 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -22240,7 +22240,7 @@ qemuDomainInterfaceAddresses(virDomainPtr dom,
-     if (!(vm = qemuDomainObjFromDomain(dom)))
-         goto cleanup;
- 
--    if (virDomainInterfaceAddressesEnsureACL(dom->conn, vm->def) < 0)
-+    if (virDomainInterfaceAddressesEnsureACL(dom->conn, vm->def, source) < 0)
-         goto cleanup;
- 
-     if (virDomainObjCheckActive(vm) < 0)
-diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
-index 2527a78142..fbd30085b2 100644
---- a/src/remote/remote_protocol.x
-+++ b/src/remote/remote_protocol.x
-@@ -6211,6 +6211,7 @@ enum remote_procedure {
-     /**
-      * @generate: none
-      * @acl: domain:read
-+     * @acl: domain:write::source:VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT
-      */
-     REMOTE_PROC_DOMAIN_INTERFACE_ADDRESSES = 353,
- 
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-schema-wrap-fsDriver-in-a-choice-group.patch b/SOURCES/libvirt-schema-wrap-fsDriver-in-a-choice-group.patch
deleted file mode 100644
index d8bfa52..0000000
--- a/SOURCES/libvirt-schema-wrap-fsDriver-in-a-choice-group.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From f37eb0d50ba30f036e08e8144bd52b3ebc1751e1 Mon Sep 17 00:00:00 2001
-Message-Id: <f37eb0d50ba30f036e08e8144bd52b3ebc1751e1@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:35 +0100
-Subject: [PATCH] schema: wrap fsDriver in a choice group
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow adding new groups without changing indentation.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-Tested-by: Andrea Bolognani <abologna@redhat.com>
-(cherry picked from commit 3913abd476cfe663db978d9110daa8bdc6d4e5b6)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <a802f84a40623bf55d9c1b1307a117b6e133daad.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- docs/schemas/domaincommon.rng | 50 +++++++++++++++++++----------------
- 1 file changed, 27 insertions(+), 23 deletions(-)
-
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 38aef19e89..bfd8786ea8 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -2620,29 +2620,33 @@
-            for this kind of info, and 'type' for the
-            storage format. We need the latter too, so
-            had to invent a new attribute name -->
--      <optional>
--        <attribute name="type">
--          <choice>
--            <value>path</value>
--            <value>handle</value>
--            <value>loop</value>
--            <value>nbd</value>
--            <value>ploop</value>
--          </choice>
--        </attribute>
--      </optional>
--      <optional>
--        <attribute name="format">
--          <ref name="storageFormat"/>
--        </attribute>
--      </optional>
--      <optional>
--        <attribute name="wrpolicy">
--          <value>immediate</value>
--        </attribute>
--      </optional>
--      <ref name='virtioOptions'/>
--      <empty/>
-+      <choice>
-+        <group>
-+          <optional>
-+            <attribute name="type">
-+              <choice>
-+                <value>path</value>
-+                <value>handle</value>
-+                <value>loop</value>
-+                <value>nbd</value>
-+                <value>ploop</value>
-+              </choice>
-+            </attribute>
-+          </optional>
-+          <optional>
-+            <attribute name="format">
-+              <ref name="storageFormat"/>
-+            </attribute>
-+          </optional>
-+          <optional>
-+            <attribute name="wrpolicy">
-+              <value>immediate</value>
-+            </attribute>
-+          </optional>
-+          <ref name='virtioOptions'/>
-+        </group>
-+        <empty/>
-+      </choice>
-     </element>
-   </define>
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-schemas-rng-Use-interleave-in-the-disk-source-element.patch b/SOURCES/libvirt-schemas-rng-Use-interleave-in-the-disk-source-element.patch
deleted file mode 100644
index ba85b9f..0000000
--- a/SOURCES/libvirt-schemas-rng-Use-interleave-in-the-disk-source-element.patch
+++ /dev/null
@@ -1,497 +0,0 @@
-From d7aeea8dfb78168ae305252bf581d46766496e24 Mon Sep 17 00:00:00 2001
-Message-Id: <d7aeea8dfb78168ae305252bf581d46766496e24@dist-git>
-From: Han Han <hhan@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:44 +0200
-Subject: [PATCH] schemas: rng: Use interleave in the disk source element
-
-Signed-off-by: Han Han <hhan@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 8b41b21aee4fb3b0f5fed1ecc73c5a7fd6879a93)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <79373ae94fb73576d1433b22545327a4afca2d99.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/schemas/domaincommon.rng | 398 ++++++++++++++++++----------------
- 1 file changed, 211 insertions(+), 187 deletions(-)
-
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index ac6f180382..e17f7ff8c0 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1642,21 +1642,23 @@
-     </optional>
-     <optional>
-       <element name="source">
--        <optional>
--          <attribute name="file">
--            <ref name="absFilePath"/>
--          </attribute>
--        </optional>
--        <ref name="diskSourceCommon"/>
--        <optional>
--          <ref name="storageStartupPolicy"/>
--        </optional>
--        <optional>
--          <ref name="encryption"/>
--        </optional>
--        <zeroOrMore>
--          <ref name='devSeclabel'/>
--        </zeroOrMore>
-+        <interleave>
-+          <optional>
-+            <attribute name="file">
-+              <ref name="absFilePath"/>
-+            </attribute>
-+          </optional>
-+          <ref name="diskSourceCommon"/>
-+          <optional>
-+            <ref name="storageStartupPolicy"/>
-+          </optional>
-+          <optional>
-+            <ref name="encryption"/>
-+          </optional>
-+          <zeroOrMore>
-+            <ref name='devSeclabel'/>
-+          </zeroOrMore>
-+        </interleave>
-       </element>
-     </optional>
-   </define>
-@@ -1667,24 +1669,26 @@
-     </attribute>
-     <optional>
-       <element name="source">
--        <optional>
--          <attribute name="dev">
--            <ref name="absFilePath"/>
--          </attribute>
--        </optional>
--        <ref name="diskSourceCommon"/>
--        <optional>
--          <ref name="storageStartupPolicy"/>
--        </optional>
--        <optional>
--          <ref name="encryption"/>
--        </optional>
--        <optional>
--          <ref name="reservations"/>
--        </optional>
--        <zeroOrMore>
--          <ref name='devSeclabel'/>
--        </zeroOrMore>
-+        <interleave>
-+          <optional>
-+            <attribute name="dev">
-+              <ref name="absFilePath"/>
-+            </attribute>
-+          </optional>
-+          <ref name="diskSourceCommon"/>
-+          <optional>
-+            <ref name="storageStartupPolicy"/>
-+          </optional>
-+          <optional>
-+            <ref name="encryption"/>
-+          </optional>
-+          <optional>
-+            <ref name="reservations"/>
-+          </optional>
-+          <zeroOrMore>
-+            <ref name='devSeclabel'/>
-+          </zeroOrMore>
-+        </interleave>
-       </element>
-     </optional>
-   </define>
-@@ -1695,17 +1699,19 @@
-     </attribute>
-     <optional>
-       <element name="source">
--        <attribute name="dir">
--          <ref name="absFilePath"/>
--        </attribute>
--        <ref name="diskSourceCommon"/>
--        <optional>
--          <ref name="storageStartupPolicy"/>
--        </optional>
--        <optional>
--          <ref name="encryption"/>
--        </optional>
--        <empty/>
-+        <interleave>
-+          <attribute name="dir">
-+            <ref name="absFilePath"/>
-+          </attribute>
-+          <ref name="diskSourceCommon"/>
-+          <optional>
-+            <ref name="storageStartupPolicy"/>
-+          </optional>
-+          <optional>
-+            <ref name="encryption"/>
-+          </optional>
-+          <empty/>
-+        </interleave>
-       </element>
-     </optional>
-   </define>
-@@ -1856,138 +1862,152 @@
- 
-   <define name="diskSourceNetworkProtocolHTTPS">
-     <element name="source">
--      <attribute name="protocol">
--        <choice>
--          <value>https</value>
--        </choice>
--      </attribute>
--      <attribute name="name"/>
--      <ref name="diskSourceCommon"/>
--      <ref name="diskSourceNetworkHost"/>
--      <optional>
--        <ref name="encryption"/>
--      </optional>
--      <optional>
--        <ref name="diskSourceNetworkProtocolSSLVerify"/>
--      </optional>
--      <optional>
--        <ref name="diskSourceNetworkProtocolHTTPCookies"/>
--      </optional>
--      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      <interleave>
-+        <attribute name="protocol">
-+          <choice>
-+            <value>https</value>
-+          </choice>
-+        </attribute>
-+        <attribute name="name"/>
-+        <ref name="diskSourceCommon"/>
-+        <ref name="diskSourceNetworkHost"/>
-+        <optional>
-+          <ref name="encryption"/>
-+        </optional>
-+        <optional>
-+          <ref name="diskSourceNetworkProtocolSSLVerify"/>
-+        </optional>
-+        <optional>
-+          <ref name="diskSourceNetworkProtocolHTTPCookies"/>
-+        </optional>
-+        <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+        </interleave>
-     </element>
-   </define>
- 
-   <define name="diskSourceNetworkProtocolHTTP">
-     <element name="source">
--      <attribute name="protocol">
--        <choice>
--          <value>http</value>
--        </choice>
--      </attribute>
--      <attribute name="name"/>
--      <ref name="diskSourceCommon"/>
--      <ref name="diskSourceNetworkHost"/>
--      <optional>
--        <ref name="encryption"/>
--      </optional>
--      <optional>
--        <ref name="diskSourceNetworkProtocolHTTPCookies"/>
--      </optional>
--      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      <interleave>
-+        <attribute name="protocol">
-+          <choice>
-+            <value>http</value>
-+          </choice>
-+        </attribute>
-+        <attribute name="name"/>
-+        <ref name="diskSourceCommon"/>
-+        <ref name="diskSourceNetworkHost"/>
-+        <optional>
-+          <ref name="encryption"/>
-+        </optional>
-+        <optional>
-+          <ref name="diskSourceNetworkProtocolHTTPCookies"/>
-+        </optional>
-+        <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      </interleave>
-     </element>
-   </define>
- 
-   <define name="diskSourceNetworkProtocolFTPS">
-     <element name="source">
--      <attribute name="protocol">
--        <choice>
--          <value>ftps</value>
--        </choice>
--      </attribute>
--      <attribute name="name"/>
--      <ref name="diskSourceCommon"/>
--      <ref name="diskSourceNetworkHost"/>
--      <optional>
--        <ref name="encryption"/>
--      </optional>
--      <optional>
--        <ref name="diskSourceNetworkProtocolSSLVerify"/>
--      </optional>
--      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      <interleave>
-+        <attribute name="protocol">
-+          <choice>
-+            <value>ftps</value>
-+          </choice>
-+        </attribute>
-+        <attribute name="name"/>
-+        <ref name="diskSourceCommon"/>
-+        <ref name="diskSourceNetworkHost"/>
-+        <optional>
-+          <ref name="encryption"/>
-+        </optional>
-+        <optional>
-+          <ref name="diskSourceNetworkProtocolSSLVerify"/>
-+        </optional>
-+        <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      </interleave>
-     </element>
-   </define>
- 
-   <define name="diskSourceNetworkProtocolSimple">
-     <element name="source">
--      <attribute name="protocol">
--        <choice>
--          <value>sheepdog</value>
--          <value>ftp</value>
--          <value>tftp</value>
--        </choice>
--      </attribute>
--      <attribute name="name"/>
--      <ref name="diskSourceCommon"/>
--      <ref name="diskSourceNetworkHost"/>
--      <optional>
--        <ref name="encryption"/>
--      </optional>
--      <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      <interleave>
-+        <attribute name="protocol">
-+          <choice>
-+            <value>sheepdog</value>
-+            <value>ftp</value>
-+            <value>tftp</value>
-+          </choice>
-+        </attribute>
-+        <attribute name="name"/>
-+        <ref name="diskSourceCommon"/>
-+        <ref name="diskSourceNetworkHost"/>
-+        <optional>
-+          <ref name="encryption"/>
-+        </optional>
-+        <ref name="diskSourceNetworkProtocolPropsCommon"/>
-+      </interleave>
-     </element>
-   </define>
- 
-   <define name="diskSourceNetworkProtocolNBD">
-     <element name="source">
--      <attribute name="protocol">
--        <value>nbd</value>
--      </attribute>
--      <optional>
--        <attribute name="name"/>
--      </optional>
--      <optional>
--        <attribute name="tls">
--          <ref name="virYesNo"/>
-+      <interleave>
-+        <attribute name="protocol">
-+          <value>nbd</value>
-         </attribute>
--      </optional>
--      <ref name="diskSourceCommon"/>
--      <ref name="diskSourceNetworkHost"/>
--      <optional>
--        <ref name="encryption"/>
--      </optional>
-+        <optional>
-+          <attribute name="name"/>
-+        </optional>
-+        <optional>
-+          <attribute name="tls">
-+            <ref name="virYesNo"/>
-+          </attribute>
-+        </optional>
-+        <ref name="diskSourceCommon"/>
-+        <ref name="diskSourceNetworkHost"/>
-+        <optional>
-+          <ref name="encryption"/>
-+        </optional>
-+      </interleave>
-     </element>
-   </define>
- 
-   <define name="diskSourceNetworkProtocolGluster">
-     <element name="source">
--      <attribute name="protocol">
--        <value>gluster</value>
--      </attribute>
--      <attribute name="name"/>
--      <ref name="diskSourceCommon"/>
--      <oneOrMore>
--        <ref name="diskSourceNetworkHost"/>
--      </oneOrMore>
--      <optional>
--        <ref name="encryption"/>
--      </optional>
-+      <interleave>
-+        <attribute name="protocol">
-+          <value>gluster</value>
-+        </attribute>
-+        <attribute name="name"/>
-+        <ref name="diskSourceCommon"/>
-+        <oneOrMore>
-+          <ref name="diskSourceNetworkHost"/>
-+        </oneOrMore>
-+        <optional>
-+          <ref name="encryption"/>
-+        </optional>
-+      </interleave>
-     </element>
-   </define>
- 
-   <define name="diskSourceNetworkProtocolVxHS">
-     <element name="source">
--      <attribute name="protocol">
--        <choice>
--          <value>vxhs</value>
--        </choice>
--      </attribute>
--      <attribute name="name"/>
--      <ref name="diskSourceCommon"/>
--      <optional>
--        <attribute name="tls">
--          <ref name="virYesNo"/>
-+      <interleave>
-+        <attribute name="protocol">
-+          <choice>
-+            <value>vxhs</value>
-+          </choice>
-         </attribute>
--      </optional>
--      <ref name="diskSourceNetworkHost"/>
-+        <attribute name="name"/>
-+        <ref name="diskSourceCommon"/>
-+        <optional>
-+          <attribute name="tls">
-+            <ref name="virYesNo"/>
-+          </attribute>
-+        </optional>
-+        <ref name="diskSourceNetworkHost"/>
-+      </interleave>
-     </element>
-   </define>
- 
-@@ -2014,30 +2034,32 @@
-     </attribute>
-     <optional>
-       <element name="source">
--        <attribute name="pool">
--          <ref name="poolName"/>
--        </attribute>
--        <attribute name="volume">
--          <ref name="volName"/>
--        </attribute>
--        <optional>
--          <attribute name="mode">
--            <choice>
--              <value>host</value>
--              <value>direct</value>
--            </choice>
-+        <interleave>
-+          <attribute name="pool">
-+            <ref name="poolName"/>
-           </attribute>
--        </optional>
--        <ref name="diskSourceCommon"/>
--        <optional>
--          <ref name="storageStartupPolicy"/>
--        </optional>
--        <optional>
--          <ref name="encryption"/>
--        </optional>
--        <zeroOrMore>
--          <ref name='devSeclabel'/>
--        </zeroOrMore>
-+          <attribute name="volume">
-+            <ref name="volName"/>
-+          </attribute>
-+          <optional>
-+            <attribute name="mode">
-+              <choice>
-+                <value>host</value>
-+                <value>direct</value>
-+              </choice>
-+            </attribute>
-+          </optional>
-+          <ref name="diskSourceCommon"/>
-+          <optional>
-+            <ref name="storageStartupPolicy"/>
-+          </optional>
-+          <optional>
-+            <ref name="encryption"/>
-+          </optional>
-+          <zeroOrMore>
-+            <ref name='devSeclabel'/>
-+          </zeroOrMore>
-+        </interleave>
-       </element>
-     </optional>
-   </define>
-@@ -2048,27 +2070,29 @@
-     </attribute>
-     <optional>
-       <element name="source">
--        <attribute name="type">
--          <value>pci</value>
--        </attribute>
--        <attribute name="namespace">
--          <ref name="uint32"/>
--        </attribute>
--        <optional>
--          <attribute name="managed">
--            <ref name="virYesNo"/>
-+        <interleave>
-+          <attribute name="type">
-+            <value>pci</value>
-           </attribute>
--        </optional>
--        <element name="address">
--          <ref name="pciaddress"/>
--        </element>
--        <ref name="diskSourceCommon"/>
--        <optional>
--          <ref name="storageStartupPolicy"/>
--        </optional>
--        <optional>
--          <ref name="encryption"/>
--        </optional>
-+          <attribute name="namespace">
-+            <ref name="uint32"/>
-+          </attribute>
-+          <optional>
-+            <attribute name="managed">
-+              <ref name="virYesNo"/>
-+            </attribute>
-+          </optional>
-+          <element name="address">
-+            <ref name="pciaddress"/>
-+          </element>
-+          <ref name="diskSourceCommon"/>
-+          <optional>
-+            <ref name="storageStartupPolicy"/>
-+          </optional>
-+          <optional>
-+            <ref name="encryption"/>
-+          </optional>
-+        </interleave>
-       </element>
-     </optional>
-   </define>
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-security-Don-t-fail-if-locking-a-file-on-NFS-mount-fails.patch b/SOURCES/libvirt-security-Don-t-fail-if-locking-a-file-on-NFS-mount-fails.patch
deleted file mode 100644
index 0c4c782..0000000
--- a/SOURCES/libvirt-security-Don-t-fail-if-locking-a-file-on-NFS-mount-fails.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 4f9e2b4b36fda208d25acf4126abbf4fee37f0b5 Mon Sep 17 00:00:00 2001
-Message-Id: <4f9e2b4b36fda208d25acf4126abbf4fee37f0b5@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 25 Feb 2020 11:24:52 +0100
-Subject: [PATCH] security: Don't fail if locking a file on NFS mount fails
-
-The way that our file locking works is that we open() the file we
-want to lock and then use fcntl(fd, F_SETLKW, ...) to lock it.
-The problem is, we are doing all of these as root which doesn't
-work if the file lives on root squashed NFS, because if it does
-then the open() fails. The way to resolve this is to make this a
-non fatal error and leave callers deal with this (i.e. disable
-remembering) - implemented in the previous commit.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804672
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit f16663d58f7aab6bf800fcffd34f83f522927897)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <d3cb3d3214cf3e67bd357fa9781ce55f8dc8c751.1582626185.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/security/security_manager.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/security/security_manager.c b/src/security/security_manager.c
-index 9d06316a99..23ed6a127c 100644
---- a/src/security/security_manager.c
-+++ b/src/security/security_manager.c
-@@ -1343,6 +1343,11 @@ virSecurityManagerMetadataLock(virSecurityManagerPtr mgr G_GNUC_UNUSED,
-                 continue;
-             }
- 
-+            if (virFileIsSharedFS(p)) {
-+                /* Probably a root squashed NFS. */
-+                continue;
-+            }
-+
-             virReportSystemError(errno,
-                                  _("unable to open %s"),
-                                  p);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-security-Don-t-remember-seclabel-for-paths-we-haven-t-locked-successfully.patch b/SOURCES/libvirt-security-Don-t-remember-seclabel-for-paths-we-haven-t-locked-successfully.patch
deleted file mode 100644
index 69cd76d..0000000
--- a/SOURCES/libvirt-security-Don-t-remember-seclabel-for-paths-we-haven-t-locked-successfully.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From f08dc7e622b398b00d6916ead44a8c9058b5a17e Mon Sep 17 00:00:00 2001
-Message-Id: <f08dc7e622b398b00d6916ead44a8c9058b5a17e@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 25 Feb 2020 11:24:51 +0100
-Subject: [PATCH] security: Don't remember seclabel for paths we haven't locked
- successfully
-
-There are some cases where we want to remember the original owner
-of a file but we fail to lock it for XATTR change (e.g. root
-squashed NFS). If that is the case we error out and refuse to
-start a domain. Well, we can do better if we disable remembering
-for paths we haven't locked successfully.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 5fddf61351f44e4186c0313d81907024c574201b)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1804672
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <4c2586a6da3b01adce09573a6123a15b3aea5ae6.1582626185.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/security/security_dac.c     | 14 ++++++++++++++
- src/security/security_manager.c |  7 -------
- src/security/security_manager.h |  6 ++++++
- src/security/security_selinux.c | 14 ++++++++++++++
- 4 files changed, 34 insertions(+), 7 deletions(-)
-
-diff --git a/src/security/security_dac.c b/src/security/security_dac.c
-index 2561ee440e..0cfe3626d4 100644
---- a/src/security/security_dac.c
-+++ b/src/security/security_dac.c
-@@ -240,6 +240,20 @@ virSecurityDACTransactionRun(pid_t pid G_GNUC_UNUSED,
- 
-         if (!(state = virSecurityManagerMetadataLock(list->manager, paths, npaths)))
-             goto cleanup;
-+
-+        for (i = 0; i < list->nItems; i++) {
-+            virSecurityDACChownItemPtr item = list->items[i];
-+            size_t j;
-+
-+            for (j = 0; j < state->nfds; j++) {
-+                if (STREQ_NULLABLE(item->path, state->paths[j]))
-+                    break;
-+            }
-+
-+            /* If path wasn't locked, don't try to remember its label. */
-+            if (j == state->nfds)
-+                item->remember = false;
-+        }
-     }
- 
-     for (i = 0; i < list->nItems; i++) {
-diff --git a/src/security/security_manager.c b/src/security/security_manager.c
-index 05d20e36af..9d06316a99 100644
---- a/src/security/security_manager.c
-+++ b/src/security/security_manager.c
-@@ -1245,13 +1245,6 @@ virSecurityManagerRestoreTPMLabels(virSecurityManagerPtr mgr,
- }
- 
- 
--struct _virSecurityManagerMetadataLockState {
--    size_t nfds; /* Captures size of both @fds and @paths */
--    int *fds;
--    const char **paths;
--};
--
--
- static int
- cmpstringp(const void *p1, const void *p2)
- {
-diff --git a/src/security/security_manager.h b/src/security/security_manager.h
-index f835356b7e..b92ea5dc87 100644
---- a/src/security/security_manager.h
-+++ b/src/security/security_manager.h
-@@ -203,6 +203,12 @@ int virSecurityManagerRestoreTPMLabels(virSecurityManagerPtr mgr,
- 
- typedef struct _virSecurityManagerMetadataLockState virSecurityManagerMetadataLockState;
- typedef virSecurityManagerMetadataLockState *virSecurityManagerMetadataLockStatePtr;
-+struct _virSecurityManagerMetadataLockState {
-+    size_t nfds; /* Captures size of both @fds and @paths */
-+    int *fds;
-+    const char **paths;
-+};
-+
- 
- virSecurityManagerMetadataLockStatePtr
- virSecurityManagerMetadataLock(virSecurityManagerPtr mgr,
-diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
-index 21279e7622..d7362327e6 100644
---- a/src/security/security_selinux.c
-+++ b/src/security/security_selinux.c
-@@ -271,6 +271,20 @@ virSecuritySELinuxTransactionRun(pid_t pid G_GNUC_UNUSED,
- 
-         if (!(state = virSecurityManagerMetadataLock(list->manager, paths, npaths)))
-             goto cleanup;
-+
-+        for (i = 0; i < list->nItems; i++) {
-+            virSecuritySELinuxContextItemPtr item = list->items[i];
-+            size_t j;
-+
-+            for (j = 0; j < state->nfds; j++) {
-+                if (STREQ_NULLABLE(item->path, state->paths[j]))
-+                    break;
-+            }
-+
-+            /* If path wasn't locked, don't try to remember its label. */
-+            if (j == state->nfds)
-+                item->remember = false;
-+        }
-     }
- 
-     rv = 0;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-security-Introduce-VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP-flag.patch b/SOURCES/libvirt-security-Introduce-VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP-flag.patch
deleted file mode 100644
index 0aad95b..0000000
--- a/SOURCES/libvirt-security-Introduce-VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP-flag.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 04b7241a14015f67b68d9779be71f9e8f91791c3 Mon Sep 17 00:00:00 2001
-Message-Id: <04b7241a14015f67b68d9779be71f9e8f91791c3@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 9 Mar 2020 14:58:56 +0100
-Subject: [PATCH] security: Introduce
- VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP flag
-
-Our decision whether to remember seclabel for a disk image
-depends on a few factors. If the image is readonly or shared or
-not the chain top the remembering is suppressed for the image.
-However, the virSecurityManagerSetImageLabel() is too low level
-to determine whether passed @src is chain top or not. Even though
-the function has the @parent argument it does not necessarily
-reflect the chain top - it only points to the top level image in
-the chain we want to relabel and not to the topmost image of the
-whole chain. And this can't be derived from the passed domain
-definition reliably neither - in some cases (like snapshots or
-block copy) the @src is added to the definition only after the
-operation succeeded. Therefore, introduce a flag which callers
-can use to help us with the decision.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 62f3d8adbc0381223499ff2bef45b23e7dca401d)
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1803551
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <bd4b1cca6feabd0c6d421603abe38397090c5394.1583760062.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/security/security_dac.c     | 15 ++++++++++-----
- src/security/security_manager.h |  4 ++++
- src/security/security_selinux.c | 17 +++++++++++------
- 3 files changed, 25 insertions(+), 11 deletions(-)
-
-diff --git a/src/security/security_dac.c b/src/security/security_dac.c
-index 0cfe3626d4..66906245eb 100644
---- a/src/security/security_dac.c
-+++ b/src/security/security_dac.c
-@@ -885,14 +885,14 @@ static int
- virSecurityDACSetImageLabelInternal(virSecurityManagerPtr mgr,
-                                     virDomainDefPtr def,
-                                     virStorageSourcePtr src,
--                                    virStorageSourcePtr parent)
-+                                    virStorageSourcePtr parent,
-+                                    bool isChainTop)
- {
-     virSecurityLabelDefPtr secdef;
-     virSecurityDeviceLabelDefPtr disk_seclabel;
-     virSecurityDeviceLabelDefPtr parent_seclabel = NULL;
-     virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
-     bool remember;
--    bool is_toplevel = parent == src || parent->externalDataStore == src;
-     uid_t user;
-     gid_t group;
- 
-@@ -950,7 +950,7 @@ virSecurityDACSetImageLabelInternal(virSecurityManagerPtr mgr,
-      * but the top layer, or read only image, or disk explicitly
-      * marked as shared.
-      */
--    remember = is_toplevel && !src->readonly && !src->shared;
-+    remember = isChainTop && !src->readonly && !src->shared;
- 
-     return virSecurityDACSetOwnership(mgr, src, NULL, user, group, remember);
- }
-@@ -966,7 +966,9 @@ virSecurityDACSetImageLabelRelative(virSecurityManagerPtr mgr,
-     virStorageSourcePtr n;
- 
-     for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
--        if (virSecurityDACSetImageLabelInternal(mgr, def, n, parent) < 0)
-+        const bool isChainTop = flags & VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP;
-+
-+        if (virSecurityDACSetImageLabelInternal(mgr, def, n, parent, isChainTop) < 0)
-             return -1;
- 
-         if (n->externalDataStore &&
-@@ -979,6 +981,8 @@ virSecurityDACSetImageLabelRelative(virSecurityManagerPtr mgr,
- 
-         if (!(flags & VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN))
-             break;
-+
-+        flags &= ~VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP;
-     }
- 
-     return 0;
-@@ -2106,7 +2110,8 @@ virSecurityDACSetAllLabel(virSecurityManagerPtr mgr,
-         if (virDomainDiskGetType(def->disks[i]) == VIR_STORAGE_TYPE_DIR)
-             continue;
-         if (virSecurityDACSetImageLabel(mgr, def, def->disks[i]->src,
--                                        VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN) < 0)
-+                                        VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN |
-+                                        VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP) < 0)
-             return -1;
-     }
- 
-diff --git a/src/security/security_manager.h b/src/security/security_manager.h
-index b92ea5dc87..7699bcbc6f 100644
---- a/src/security/security_manager.h
-+++ b/src/security/security_manager.h
-@@ -151,6 +151,10 @@ virSecurityManagerPtr* virSecurityManagerGetNested(virSecurityManagerPtr mgr);
- 
- typedef enum {
-     VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN = 1 << 0,
-+    /* The VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP should be set if the
-+     * image passed to virSecurityManagerSetImageLabel() is the top parent of
-+     * the whole backing chain. */
-+    VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP = 1 << 1,
- } virSecurityDomainImageLabelFlags;
- 
- int virSecurityManagerSetImageLabel(virSecurityManagerPtr mgr,
-diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
-index d7362327e6..985c7eda1a 100644
---- a/src/security/security_selinux.c
-+++ b/src/security/security_selinux.c
-@@ -1824,7 +1824,8 @@ static int
- virSecuritySELinuxSetImageLabelInternal(virSecurityManagerPtr mgr,
-                                         virDomainDefPtr def,
-                                         virStorageSourcePtr src,
--                                        virStorageSourcePtr parent)
-+                                        virStorageSourcePtr parent,
-+                                        bool isChainTop)
- {
-     virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(mgr);
-     virSecurityLabelDefPtr secdef;
-@@ -1832,7 +1833,6 @@ virSecuritySELinuxSetImageLabelInternal(virSecurityManagerPtr mgr,
-     virSecurityDeviceLabelDefPtr parent_seclabel = NULL;
-     char *use_label = NULL;
-     bool remember;
--    bool is_toplevel = parent == src || parent->externalDataStore == src;
-     g_autofree char *vfioGroupDev = NULL;
-     const char *path = src->path;
-     int ret;
-@@ -1856,7 +1856,7 @@ virSecuritySELinuxSetImageLabelInternal(virSecurityManagerPtr mgr,
-      * but the top layer, or read only image, or disk explicitly
-      * marked as shared.
-      */
--    remember = is_toplevel && !src->readonly && !src->shared;
-+    remember = isChainTop && !src->readonly && !src->shared;
- 
-     disk_seclabel = virStorageSourceGetSecurityLabelDef(src,
-                                                         SECURITY_SELINUX_NAME);
-@@ -1873,7 +1873,7 @@ virSecuritySELinuxSetImageLabelInternal(virSecurityManagerPtr mgr,
-             return 0;
- 
-         use_label = parent_seclabel->label;
--    } else if (is_toplevel) {
-+    } else if (parent == src || parent->externalDataStore == src) {
-         if (src->shared) {
-             use_label = data->file_context;
-         } else if (src->readonly) {
-@@ -1930,7 +1930,9 @@ virSecuritySELinuxSetImageLabelRelative(virSecurityManagerPtr mgr,
-     virStorageSourcePtr n;
- 
-     for (n = src; virStorageSourceIsBacking(n); n = n->backingStore) {
--        if (virSecuritySELinuxSetImageLabelInternal(mgr, def, n, parent) < 0)
-+        const bool isChainTop = flags & VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP;
-+
-+        if (virSecuritySELinuxSetImageLabelInternal(mgr, def, n, parent, isChainTop) < 0)
-             return -1;
- 
-         if (n->externalDataStore &&
-@@ -1943,6 +1945,8 @@ virSecuritySELinuxSetImageLabelRelative(virSecurityManagerPtr mgr,
- 
-         if (!(flags & VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN))
-             break;
-+
-+        flags &= ~VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP;
-     }
- 
-     return 0;
-@@ -3142,7 +3146,8 @@ virSecuritySELinuxSetAllLabel(virSecurityManagerPtr mgr,
-             continue;
-         }
-         if (virSecuritySELinuxSetImageLabel(mgr, def, def->disks[i]->src,
--                                            VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN) < 0)
-+                                            VIR_SECURITY_DOMAIN_IMAGE_LABEL_BACKING_CHAIN |
-+                                            VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP) < 0)
-             return -1;
-     }
-     /* XXX fixme process  def->fss if relabel == true */
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-security-fix-SELinux-label-generation-logic.patch b/SOURCES/libvirt-security-fix-SELinux-label-generation-logic.patch
deleted file mode 100644
index d32275b..0000000
--- a/SOURCES/libvirt-security-fix-SELinux-label-generation-logic.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 0f7c8a271f07b3f9aff07dd814d7bec80ddac362 Mon Sep 17 00:00:00 2001
-Message-Id: <0f7c8a271f07b3f9aff07dd814d7bec80ddac362@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Wed, 28 Jul 2021 14:59:00 +0200
-Subject: [PATCH] security: fix SELinux label generation logic
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-A process can access a file if the set of MCS categories
-for the file is equal-to *or* a subset-of, the set of
-MCS categories for the process.
-
-If there are two VMs:
-
-  a) svirt_t:s0:c117
-  b) svirt_t:s0:c117,c720
-
-Then VM (b) is able to access files labelled for VM (a).
-
-IOW, we must discard case where the categories are equal
-because that is a subset of many other valid category pairs.
-
-Fixes: https://gitlab.com/libvirt/libvirt/-/issues/153
-CVE-2021-3631
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 15073504dbb624d3f6c911e85557019d3620fdb2)
-Message-Id: <38c6a7b570b8eb2114d9f1ff0c84a8346e01472f.1627476632.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/security/security_selinux.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
-index 985c7eda1a..93fae831ca 100644
---- a/src/security/security_selinux.c
-+++ b/src/security/security_selinux.c
-@@ -391,7 +391,15 @@ virSecuritySELinuxMCSFind(virSecurityManagerPtr mgr,
-         VIR_DEBUG("Try cat %s:c%d,c%d", sens, c1 + catMin, c2 + catMin);
- 
-         if (c1 == c2) {
--            mcs = g_strdup_printf("%s:c%d", sens, catMin + c1);
-+            /*
-+             * A process can access a file if the set of MCS categories
-+             * for the file is equal-to *or* a subset-of, the set of
-+             * MCS categories for the process.
-+             *
-+             * IOW, we must discard case where the categories are equal
-+             * because that is a subset of other category pairs.
-+             */
-+            continue;
-         } else {
-             if (c1 > c2) {
-                 int t = c1;
--- 
-2.32.0
-
diff --git a/SOURCES/libvirt-src-assume-sys-sysmacros.h-always-exists-on-Linux.patch b/SOURCES/libvirt-src-assume-sys-sysmacros.h-always-exists-on-Linux.patch
deleted file mode 100644
index dc51d5e..0000000
--- a/SOURCES/libvirt-src-assume-sys-sysmacros.h-always-exists-on-Linux.patch
+++ /dev/null
@@ -1,168 +0,0 @@
-From 06e0a9d40c52736919f32578f926bf4d829e77ec Mon Sep 17 00:00:00 2001
-Message-Id: <06e0a9d40c52736919f32578f926bf4d829e77ec@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Mon, 27 Jul 2020 12:36:49 +0200
-Subject: [PATCH] src: assume sys/sysmacros.h always exists on Linux
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-All our supported Linux distros now have this header.
-It has never existed on FreeBSD / macOS / Mingw.
-
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 03c532cf9711dd6ad35380455a77141ef7d492ab)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Conflicts:
-- src/util/virutil.c - context, because
-  db72866310d1e520efa8ed2d4589bdb5e76a1c95 (util: add API for
-  reading password from the console) isn't backported.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <ec98419d1aaa478bd3ac7a41aa9cb8b316695ef9.1595846084.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/conf/domain_audit.c  | 4 +---
- src/lxc/lxc_controller.c | 4 +---
- src/lxc/lxc_driver.c     | 4 +---
- src/qemu/qemu_domain.c   | 4 +---
- src/util/vircgroup.c     | 8 +-------
- src/util/virdevmapper.c  | 4 +---
- src/util/virutil.c       | 4 +---
- tests/vircgroupmock.c    | 8 +-------
- 8 files changed, 8 insertions(+), 32 deletions(-)
-
-diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
-index fdccc585fb..6d3579e0f6 100644
---- a/src/conf/domain_audit.c
-+++ b/src/conf/domain_audit.c
-@@ -23,9 +23,7 @@
- 
- #include <sys/stat.h>
- 
--#ifdef MAJOR_IN_MKDEV
--# include <sys/mkdev.h>
--#elif MAJOR_IN_SYSMACROS
-+#ifdef __linux__
- # include <sys/sysmacros.h>
- #endif
- 
-diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
-index 42c631ed0b..0da89dba89 100644
---- a/src/lxc/lxc_controller.c
-+++ b/src/lxc/lxc_controller.c
-@@ -25,9 +25,7 @@
- #include <sys/wait.h>
- #include <sys/socket.h>
- 
--#ifdef MAJOR_IN_MKDEV
--# include <sys/mkdev.h>
--#elif MAJOR_IN_SYSMACROS
-+#ifdef __linux__
- # include <sys/sysmacros.h>
- #endif
- 
-diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
-index 780c6ed4a2..a8c93dd228 100644
---- a/src/lxc/lxc_driver.c
-+++ b/src/lxc/lxc_driver.c
-@@ -25,9 +25,7 @@
- #include <sched.h>
- #include <sys/utsname.h>
- 
--#ifdef MAJOR_IN_MKDEV
--# include <sys/mkdev.h>
--#elif MAJOR_IN_SYSMACROS
-+#ifdef __linux__
- # include <sys/sysmacros.h>
- #endif
- 
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 1e968368ae..ffe88ff027 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -64,9 +64,7 @@
- #include "backup_conf.h"
- #include "virdevmapper.h"
- 
--#ifdef MAJOR_IN_MKDEV
--# include <sys/mkdev.h>
--#elif MAJOR_IN_SYSMACROS
-+#ifdef __linux__
- # include <sys/sysmacros.h>
- #endif
- #include <sys/time.h>
-diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
-index dff2f6fd3a..a45c2e7f2f 100644
---- a/src/util/vircgroup.c
-+++ b/src/util/vircgroup.c
-@@ -25,13 +25,7 @@
- # include <sys/mount.h>
- # include <fcntl.h>
- # include <sys/stat.h>
--
--# ifdef MAJOR_IN_MKDEV
--#  include <sys/mkdev.h>
--# elif MAJOR_IN_SYSMACROS
--#  include <sys/sysmacros.h>
--# endif
--
-+# include <sys/sysmacros.h>
- # include <sys/types.h>
- # include <signal.h>
- # include <dirent.h>
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index c346432d86..40a82285f9 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -20,9 +20,7 @@
- 
- #include <config.h>
- 
--#ifdef MAJOR_IN_MKDEV
--# include <sys/mkdev.h>
--#elif MAJOR_IN_SYSMACROS
-+#ifdef __linux__
- # include <sys/sysmacros.h>
- #endif
- 
-diff --git a/src/util/virutil.c b/src/util/virutil.c
-index 17fd06dbb2..5e6bbb37c0 100644
---- a/src/util/virutil.c
-+++ b/src/util/virutil.c
-@@ -28,9 +28,7 @@
- #include <poll.h>
- #include <sys/stat.h>
- 
--#ifdef MAJOR_IN_MKDEV
--# include <sys/mkdev.h>
--#elif MAJOR_IN_SYSMACROS
-+#ifdef __linux__
- # include <sys/sysmacros.h>
- #endif
- 
-diff --git a/tests/vircgroupmock.c b/tests/vircgroupmock.c
-index 9ec3b576d2..66b8c01852 100644
---- a/tests/vircgroupmock.c
-+++ b/tests/vircgroupmock.c
-@@ -23,13 +23,7 @@
- # include <unistd.h>
- # include <fcntl.h>
- # include <sys/stat.h>
--
--# ifdef MAJOR_IN_MKDEV
--#  include <sys/mkdev.h>
--# elif MAJOR_IN_SYSMACROS
--#  include <sys/sysmacros.h>
--# endif
--
-+# include <sys/sysmacros.h>
- # include <stdarg.h>
- # include "testutilslxc.h"
- # include "virstring.h"
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-storage-Implement-backing-store-support-for-fat-prefix.patch b/SOURCES/libvirt-storage-Implement-backing-store-support-for-fat-prefix.patch
deleted file mode 100644
index 7bce538..0000000
--- a/SOURCES/libvirt-storage-Implement-backing-store-support-for-fat-prefix.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 32163ac7b599b20c09458170e626784c0c9b4d9c Mon Sep 17 00:00:00 2001
-Message-Id: <32163ac7b599b20c09458170e626784c0c9b4d9c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:04 +0100
-Subject: [PATCH] storage: Implement backing store support for "fat:" prefix
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-qemublocktest showed that we don't add the "fat:" prefix for directory
-storage when formatting the backing store string. While it's unlikely to
-be used it's simple enough to actually implement the support rather than
-trying to forbid it.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 5a70f1048fb60b72d5a715d93e963ba07e041e23)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <52a96160554678625eea409b7c816de12eeace1a.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_block.c                                    | 7 ++++++-
- src/util/virstoragefile.c                                | 9 +++++++++
- .../xml2json/dir-fat-cache-srconly.json                  | 2 +-
- .../xml2json/dir-fat-floppy-srconly.json                 | 2 +-
- .../xml2json/dir-fat-readonly-srconly.json               | 2 +-
- tests/virstoragetest.c                                   | 1 +
- 6 files changed, 19 insertions(+), 4 deletions(-)
-
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 20579ec7b3..5a7364576a 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -2032,8 +2032,13 @@ qemuBlockGetBackingStoreString(virStorageSourcePtr src,
-     g_autofree char *backingJSON = NULL;
- 
-     if (!src->sliceStorage) {
--        if (virStorageSourceIsLocalStorage(src))
-+        if (virStorageSourceIsLocalStorage(src)) {
-+            if (src->type == VIR_STORAGE_TYPE_DIR &&
-+                src->format == VIR_STORAGE_FILE_FAT)
-+                return g_strdup_printf("fat:%s", src->path);
-+
-             return g_strdup(src->path);
-+        }
- 
-         /* generate simplified URIs for the easy cases */
-         if (actualType == VIR_STORAGE_TYPE_NETWORK &&
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 2e54620139..5423f0b955 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3922,6 +3922,7 @@ virStorageSourceNewFromBackingAbsolute(const char *path,
-                                        virStorageSourcePtr *src)
- {
-     const char *json;
-+    const char *dirpath;
-     int rc = 0;
-     g_autoptr(virStorageSource) def = NULL;
- 
-@@ -3935,6 +3936,14 @@ virStorageSourceNewFromBackingAbsolute(const char *path,
- 
-         def->path = g_strdup(path);
-     } else {
-+        if ((dirpath = STRSKIP(path, "fat:"))) {
-+            def->type = VIR_STORAGE_TYPE_DIR;
-+            def->format = VIR_STORAGE_FILE_FAT;
-+            def->path = g_strdup(dirpath);
-+            *src = g_steal_pointer(&def);
-+            return 0;
-+        }
-+
-         def->type = VIR_STORAGE_TYPE_NETWORK;
- 
-         VIR_DEBUG("parsing backing store string: '%s'", path);
-diff --git a/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json b/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json
-index 8bc58fa033..80f866f08b 100644
---- a/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/dir-fat-cache-srconly.json
-@@ -6,5 +6,5 @@
-     "floppy": false
-   }
-   backing store string:
--  /var/somefiles
-+  fat:/var/somefiles
- )
-diff --git a/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json b/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json
-index 043b796435..6c86f1da06 100644
---- a/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/dir-fat-floppy-srconly.json
-@@ -6,5 +6,5 @@
-     "floppy": true
-   }
-   backing store string:
--  /var/somefiles
-+  fat:/var/somefiles
- )
-diff --git a/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json b/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json
-index 8bc58fa033..80f866f08b 100644
---- a/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json
-+++ b/tests/qemublocktestdata/xml2json/dir-fat-readonly-srconly.json
-@@ -6,5 +6,5 @@
-     "floppy": false
-   }
-   backing store string:
--  /var/somefiles
-+  fat:/var/somefiles
- )
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index ca428f5ca7..a61522965b 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1225,6 +1225,7 @@ mymain(void)
-     TEST_BACKING_PARSE_FULL(bck, xml, 0)
- 
-     TEST_BACKING_PARSE("path", "<source file='path'/>\n");
-+    TEST_BACKING_PARSE("fat:/somedir", "<source dir='/somedir'/>\n");
-     TEST_BACKING_PARSE("://", NULL);
-     TEST_BACKING_PARSE("http://example.com",
-                        "<source protocol='http' name=''>\n"
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-storage-Parse-nvme-disk-source-properties-from-json-pseudo-uri.patch b/SOURCES/libvirt-storage-Parse-nvme-disk-source-properties-from-json-pseudo-uri.patch
deleted file mode 100644
index 92fd51d..0000000
--- a/SOURCES/libvirt-storage-Parse-nvme-disk-source-properties-from-json-pseudo-uri.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 52f32252c985693be402c5a1fba79d21807a53cb Mon Sep 17 00:00:00 2001
-Message-Id: <52f32252c985693be402c5a1fba79d21807a53cb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:08 +0100
-Subject: [PATCH] storage: Parse 'nvme' disk source properties from json:{}
- pseudo-uri
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Our code allows snapshots of NVMe based disks which means we create
-overlay file with a 'json:{}' pseudo-uri refering to the NVME device.
-Our parser code doesn't handle them though. Add the parser and test it
-via the XML->json->XML round-trip and reference data.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 1b84dd190c16695710a714305517ed24afdd4573)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <8460aa915dbc8b4030aacf31cc39fbb7aee07d87.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 30 ++++++++++++++++++++++++++++++
- tests/qemublocktest.c     |  5 +++++
- tests/virstoragetest.c    |  9 +++++++++
- 3 files changed, 44 insertions(+)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 5423f0b955..3eb32edc2a 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3806,6 +3806,35 @@ virStorageSourceParseBackingJSONVxHS(virStorageSourcePtr src,
- }
- 
- 
-+static int
-+virStorageSourceParseBackingJSONNVMe(virStorageSourcePtr src,
-+                                     virJSONValuePtr json,
-+                                     const char *jsonstr G_GNUC_UNUSED,
-+                                     int opaque G_GNUC_UNUSED)
-+{
-+    g_autoptr(virStorageSourceNVMeDef) nvme = g_new0(virStorageSourceNVMeDef, 1);
-+    const char *device = virJSONValueObjectGetString(json, "device");
-+
-+    if (!device || virPCIDeviceAddressParse((char *) device, &nvme->pciAddr) < 0) {
-+        virReportError(VIR_ERR_INVALID_ARG, "%s",
-+                       _("missing or malformed 'device' field of 'nvme' storage"));
-+        return -1;
-+    }
-+
-+    if (virJSONValueObjectGetNumberUlong(json, "namespace", &nvme->namespc) < 0 ||
-+        nvme->namespc == 0) {
-+        virReportError(VIR_ERR_INVALID_ARG, "%s",
-+                       _("missing or malformed 'namespace' field of 'nvme' storage"));
-+        return -1;
-+    }
-+
-+    src->type = VIR_STORAGE_TYPE_NVME;
-+    src->nvme = g_steal_pointer(&nvme);
-+
-+    return 0;
-+}
-+
-+
- struct virStorageSourceJSONDriverParser {
-     const char *drvname;
-     bool formatdriver;
-@@ -3837,6 +3866,7 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
-     {"rbd", false, virStorageSourceParseBackingJSONRBD, 0},
-     {"raw", true, virStorageSourceParseBackingJSONRaw, 0},
-     {"vxhs", false, virStorageSourceParseBackingJSONVxHS, 0},
-+    {"nvme", false, virStorageSourceParseBackingJSONNVMe, 0},
- };
- 
- 
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 8b7a50712d..e461b3a23d 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1096,6 +1096,11 @@ mymain(void)
-     /* type VIR_STORAGE_TYPE_BLOCK is not tested since it parses back to 'file' */
-     /* type VIR_STORAGE_TYPE_DIR it is a 'format' driver in qemu */
- 
-+    TEST_JSON_FORMAT(VIR_STORAGE_TYPE_NVME,
-+                     "<source type='pci' namespace='1'>\n"
-+                     "  <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>\n"
-+                     "</source>\n");
-+
-     TEST_JSON_FORMAT_NET("<source protocol='http' name=''>\n"
-                          "  <host name='example.com' port='80'/>\n"
-                          "</source>\n");
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index a61522965b..d9244fdfe8 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1637,6 +1637,15 @@ mymain(void)
-                            "  <timeout seconds='2000'/>\n"
-                            "</source>\n", 0);
- 
-+    TEST_BACKING_PARSE("json:{\"file\":{\"driver\": \"nvme\","
-+                                       "\"device\": \"0000:01:00.0\","
-+                                       "\"namespace\": 1"
-+                                      "}"
-+                            "}",
-+                        "<source type='pci' namespace='1'>\n"
-+                        "  <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>\n"
-+                        "</source>\n");
-+
- #endif /* WITH_YAJL */
- 
-  cleanup:
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-storage_driver-Unlock-object-on-ACL-fail-in-storagePoolLookupByTargetPath.patch b/SOURCES/libvirt-storage_driver-Unlock-object-on-ACL-fail-in-storagePoolLookupByTargetPath.patch
deleted file mode 100644
index 370de09..0000000
--- a/SOURCES/libvirt-storage_driver-Unlock-object-on-ACL-fail-in-storagePoolLookupByTargetPath.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From b794a0e4e657defe9a491eb20adf61eafa443ca3 Mon Sep 17 00:00:00 2001
-Message-Id: <b794a0e4e657defe9a491eb20adf61eafa443ca3@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 28 Jul 2021 14:59:01 +0200
-Subject: [PATCH] storage_driver: Unlock object on ACL fail in
- storagePoolLookupByTargetPath
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-'virStoragePoolObjListSearch' returns a locked and refed object, thus we
-must release it on ACL permission failure.
-
-Fixes: 7aa0e8c0cb8
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1984318
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 447f69dec47e1b0bd15ecd7cd49a9fd3b050fb87)
-CVE-2021-3667
-Message-Id: <a398ad51fa2db3697d91711134d28d3e07536bfc.1627476632.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/storage/storage_driver.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
-index 0bb116cf08..4f0b8c1218 100644
---- a/src/storage/storage_driver.c
-+++ b/src/storage/storage_driver.c
-@@ -1733,8 +1733,10 @@ storagePoolLookupByTargetPath(virConnectPtr conn,
-                                            storagePoolLookupByTargetPathCallback,
-                                            cleanpath))) {
-         def = virStoragePoolObjGetDef(obj);
--        if (virStoragePoolLookupByTargetPathEnsureACL(conn, def) < 0)
-+        if (virStoragePoolLookupByTargetPathEnsureACL(conn, def) < 0) {
-+            virStoragePoolObjEndAPI(&obj);
-             return NULL;
-+        }
- 
-         pool = virGetStoragePool(conn, def->name, def->uuid, NULL, NULL);
-         virStoragePoolObjEndAPI(&obj);
--- 
-2.32.0
-
diff --git a/SOURCES/libvirt-storage_file-create-Create-new-images-with-write-permission-bit.patch b/SOURCES/libvirt-storage_file-create-Create-new-images-with-write-permission-bit.patch
deleted file mode 100644
index bb28a75..0000000
--- a/SOURCES/libvirt-storage_file-create-Create-new-images-with-write-permission-bit.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 1624090a014019ac1b61dc62557b829426068835 Mon Sep 17 00:00:00 2001
-Message-Id: <1624090a014019ac1b61dc62557b829426068835@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 12 May 2020 17:24:08 +0200
-Subject: [PATCH] storage_file: create: Create new images with write permission
- bit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The 'Create' API of the two storage file backends is used only on
-code-paths where we need to format the image after creating an empty
-file. Since the DAC security driver only modifies the owner of the file
-and not the mode we need to create all files which are going to be
-formatted with the write bit set for the user.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 20939b037c37789ddca54c18862fb45b4b41740f)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1832204
-Message-Id: <647821632e4b2822eceb81590459aafa2f88b6fb.1589296861.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/storage/storage_file_fs.c      | 6 +-----
- src/storage/storage_file_gluster.c | 6 +-----
- 2 files changed, 2 insertions(+), 10 deletions(-)
-
-diff --git a/src/storage/storage_file_fs.c b/src/storage/storage_file_fs.c
-index 8817970f44..1629c3d877 100644
---- a/src/storage/storage_file_fs.c
-+++ b/src/storage/storage_file_fs.c
-@@ -83,13 +83,9 @@ virStorageFileBackendFileInit(virStorageSourcePtr src)
- static int
- virStorageFileBackendFileCreate(virStorageSourcePtr src)
- {
--    mode_t mode = S_IRUSR;
-     VIR_AUTOCLOSE fd = -1;
- 
--    if (!src->readonly)
--        mode |= S_IWUSR;
--
--    if ((fd = virFileOpenAs(src->path, O_WRONLY | O_TRUNC | O_CREAT, mode,
-+    if ((fd = virFileOpenAs(src->path, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR,
-                             src->drv->uid, src->drv->gid, 0)) < 0) {
-         errno = -fd;
-         return -1;
-diff --git a/src/storage/storage_file_gluster.c b/src/storage/storage_file_gluster.c
-index f389a94437..608f93d2f6 100644
---- a/src/storage/storage_file_gluster.c
-+++ b/src/storage/storage_file_gluster.c
-@@ -152,13 +152,9 @@ virStorageFileBackendGlusterCreate(virStorageSourcePtr src)
- {
-     virStorageFileBackendGlusterPrivPtr priv = src->drv->priv;
-     glfs_fd_t *fd = NULL;
--    mode_t mode = S_IRUSR;
--
--    if (!src->readonly)
--        mode |= S_IWUSR;
- 
-     if (!(fd = glfs_creat(priv->vol, src->path,
--                          O_CREAT | O_TRUNC | O_WRONLY, mode)))
-+                          O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR)))
-         return -1;
- 
-     ignore_value(glfs_close(fd));
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-testQemuDiskXMLToProps-Store-all-per-image-data-in-one-structure.patch b/SOURCES/libvirt-testQemuDiskXMLToProps-Store-all-per-image-data-in-one-structure.patch
deleted file mode 100644
index a96e307..0000000
--- a/SOURCES/libvirt-testQemuDiskXMLToProps-Store-all-per-image-data-in-one-structure.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-From bafa6f68029a497c78b3823694b6a2149622bc9e Mon Sep 17 00:00:00 2001
-Message-Id: <bafa6f68029a497c78b3823694b6a2149622bc9e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:26:01 +0100
-Subject: [PATCH] testQemuDiskXMLToProps: Store all per-image data in one
- structure
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We had two non-syncrhonized arrays holding the individual data. This was
-a lazy way to do it when I was adding new tests recently. Since it's
-hard to extend with new data to test refactor the storage of test data
-to use a new struct where all per-image data are kept and can be
-extended easily.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 93171b63c3a28dad06c3af6d2483d953a6f79ad2)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <b8cad280efeab0fe40e4d426167d3095b8419d3a.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 90 ++++++++++++++++++++++++++-----------------
- 1 file changed, 54 insertions(+), 36 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 14c80960b1..c009db7996 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -180,6 +180,13 @@ testJSONtoJSON(const void *args)
- }
- 
- 
-+struct testQemuDiskXMLToJSONImageData {
-+    virJSONValuePtr formatprops;
-+    virJSONValuePtr storageprops;
-+    virJSONValuePtr storagepropssrc;
-+};
-+
-+
- struct testQemuDiskXMLToJSONData {
-     virQEMUDriverPtr driver;
-     virHashTablePtr schema;
-@@ -187,11 +194,8 @@ struct testQemuDiskXMLToJSONData {
-     const char *name;
-     bool fail;
- 
--    virJSONValuePtr *props;
--    size_t nprops;
--
--    virJSONValuePtr *propssrc;
--    size_t npropssrc;
-+    struct testQemuDiskXMLToJSONImageData *images;
-+    size_t nimages;
- 
-     virQEMUCapsPtr qemuCaps;
- };
-@@ -202,16 +206,13 @@ testQemuDiskXMLToPropsClear(struct testQemuDiskXMLToJSONData *data)
- {
-     size_t i;
- 
--    for (i = 0; i < data->nprops; i++)
--        virJSONValueFree(data->props[i]);
--
--    for (i = 0; i < data->npropssrc; i++)
--        virJSONValueFree(data->propssrc[i]);
--
--    data->nprops = 0;
--    VIR_FREE(data->props);
--    data->npropssrc = 0;
--    VIR_FREE(data->propssrc);
-+    for (i = 0; i < data->nimages; i++) {
-+        virJSONValueFree(data->images[i].formatprops);
-+        virJSONValueFree(data->images[i].storageprops);
-+        virJSONValueFree(data->images[i].storagepropssrc);
-+    }
-+    data->nimages = 0;
-+    VIR_FREE(data->images);
- }
- 
- 
-@@ -286,6 +287,7 @@ testQemuDiskXMLToProps(const void *opaque)
-     }
- 
-     for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
-+
-         if (testQemuDiskXMLToJSONFakeSecrets(n) < 0)
-             return -1;
- 
-@@ -306,10 +308,14 @@ testQemuDiskXMLToProps(const void *opaque)
-             return -1;
-         }
- 
--        if (VIR_APPEND_ELEMENT(data->props, data->nprops, formatProps) < 0 ||
--            VIR_APPEND_ELEMENT(data->props, data->nprops, storageProps) < 0 ||
--            VIR_APPEND_ELEMENT(data->propssrc, data->npropssrc, storageSrcOnlyProps) < 0)
-+        if (VIR_REALLOC_N(data->images, data->nimages + 1) < 0)
-             return -1;
-+
-+        data->images[data->nimages].formatprops = g_steal_pointer(&formatProps);
-+        data->images[data->nimages].storageprops = g_steal_pointer(&storageProps);
-+        data->images[data->nimages].storagepropssrc = g_steal_pointer(&storageSrcOnlyProps);
-+
-+        data->nimages++;
-     }
- 
-     return 0;
-@@ -326,27 +332,37 @@ testQemuDiskXMLToPropsValidateSchema(const void *opaque)
-     if (data->fail)
-         return EXIT_AM_SKIP;
- 
--    for (i = 0; i < data->nprops; i++) {
-+    for (i = 0; i < data->nimages; i++) {
-         g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
- 
--        if (testQEMUSchemaValidate(data->props[i], data->schemaroot,
-+        if (testQEMUSchemaValidate(data->images[i].formatprops, data->schemaroot,
-                                    data->schema, &debug) < 0) {
-             g_autofree char *debugmsg = virBufferContentAndReset(&debug);
--            g_autofree char *propsstr = virJSONValueToString(data->props[i], true);
-+            g_autofree char *propsstr = virJSONValueToString(data->images[i].formatprops, true);
-             VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-             VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-                            propsstr, NULLSTR(debugmsg));
-             ret = -1;
-         }
--    }
- 
--    for (i = 0; i < data->npropssrc; i++) {
--        g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER;
-+        virBufferFreeAndReset(&debug);
- 
--        if (testQEMUSchemaValidate(data->propssrc[i], data->schemaroot,
-+        if (testQEMUSchemaValidate(data->images[i].storageprops, data->schemaroot,
-                                    data->schema, &debug) < 0) {
-             g_autofree char *debugmsg = virBufferContentAndReset(&debug);
--            g_autofree char *propsstr = virJSONValueToString(data->propssrc[i], true);
-+            g_autofree char *propsstr = virJSONValueToString(data->images[i].storageprops, true);
-+            VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-+            VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-+                           propsstr, NULLSTR(debugmsg));
-+            ret = -1;
-+        }
-+
-+        virBufferFreeAndReset(&debug);
-+
-+        if (testQEMUSchemaValidate(data->images[i].storagepropssrc, data->schemaroot,
-+                                   data->schema, &debug) < 0) {
-+            g_autofree char *debugmsg = virBufferContentAndReset(&debug);
-+            g_autofree char *propsstr = virJSONValueToString(data->images[i].storagepropssrc, true);
-             VIR_TEST_VERBOSE("json does not conform to QAPI schema");
-             VIR_TEST_DEBUG("json:\n%s\ndoes not match schema. Debug output:\n %s",
-                            propsstr, NULLSTR(debugmsg));
-@@ -372,13 +388,17 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque)
- 
-     jsonpath = g_strdup_printf("%s%s.json", testQemuDiskXMLToJSONPath, data->name);
- 
--    for (i = 0; i < data->nprops; i++) {
--        g_autofree char *jsonstr = NULL;
-+    for (i = 0; i < data->nimages; i++) {
-+        g_autofree char *formatprops = NULL;
-+        g_autofree char *storageprops = NULL;
- 
--        if (!(jsonstr = virJSONValueToString(data->props[i], true)))
-+        if (!(formatprops = virJSONValueToString(data->images[i].formatprops, true)))
-             return -1;
- 
--        virBufferAdd(&buf, jsonstr, -1);
-+        if (!(storageprops = virJSONValueToString(data->images[i].storageprops, true)))
-+            return -1;
-+
-+        virBufferStrcat(&buf, formatprops, storageprops, NULL);
-     }
- 
-     actual = virBufferContentAndReset(&buf);
-@@ -402,10 +422,10 @@ testQemuDiskXMLToPropsValidateFileSrcOnly(const void *opaque)
-     jsonpath = g_strdup_printf("%s%s-srconly.json", testQemuDiskXMLToJSONPath,
-                                data->name);
- 
--    for (i = 0; i < data->npropssrc; i++) {
-+    for (i = 0; i < data->nimages; i++) {
-         g_autofree char *jsonstr = NULL;
- 
--        if (!(jsonstr = virJSONValueToString(data->propssrc[i], true)))
-+        if (!(jsonstr = virJSONValueToString(data->images[i].storagepropssrc, true)))
-             return -1;
- 
-         virBufferAdd(&buf, jsonstr, -1);
-@@ -1117,10 +1137,8 @@ mymain(void)
- #define TEST_DISK_TO_JSON_FULL(nme, fl) \
-     do { \
-         diskxmljsondata.name = nme; \
--        diskxmljsondata.props = NULL; \
--        diskxmljsondata.nprops = 0; \
--        diskxmljsondata.propssrc = NULL; \
--        diskxmljsondata.npropssrc = 0; \
-+        diskxmljsondata.images = NULL; \
-+        diskxmljsondata.nimages = 0; \
-         diskxmljsondata.fail = fl; \
-         if (virTestRun("disk xml to props " nme, testQemuDiskXMLToProps, \
-                        &diskxmljsondata) < 0) \
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-testQemuDiskXMLToPropsValidateFileSrcOnly-Move-together-with-rest-of-xml-json-code.patch b/SOURCES/libvirt-testQemuDiskXMLToPropsValidateFileSrcOnly-Move-together-with-rest-of-xml-json-code.patch
deleted file mode 100644
index 29a34cd..0000000
--- a/SOURCES/libvirt-testQemuDiskXMLToPropsValidateFileSrcOnly-Move-together-with-rest-of-xml-json-code.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 067d165d1ffd968d07ff54c07ccd3bb529d0c130 Mon Sep 17 00:00:00 2001
-Message-Id: <067d165d1ffd968d07ff54c07ccd3bb529d0c130@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:25:59 +0100
-Subject: [PATCH] testQemuDiskXMLToPropsValidateFileSrcOnly: Move together with
- rest of xml->json code
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function was misplaced. Group it together with other helper
-functions for testing disk XML to qemu JSON props conversion.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit fed97cb435092d9de6f3c862ef297e722f0c0263)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <8e84dfd63f90b8b0bf10fe72bb3dcf07af9f6e96.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c | 61 ++++++++++++++++++++++---------------------
- 1 file changed, 31 insertions(+), 30 deletions(-)
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 40aa1e2825..14c80960b1 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -387,6 +387,37 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque)
- }
- 
- 
-+static int
-+testQemuDiskXMLToPropsValidateFileSrcOnly(const void *opaque)
-+{
-+    struct testQemuDiskXMLToJSONData *data = (void *) opaque;
-+    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
-+    g_autofree char *jsonpath = NULL;
-+    g_autofree char *actual = NULL;
-+    size_t i;
-+
-+    if (data->fail)
-+        return EXIT_AM_SKIP;
-+
-+    jsonpath = g_strdup_printf("%s%s-srconly.json", testQemuDiskXMLToJSONPath,
-+                               data->name);
-+
-+    for (i = 0; i < data->npropssrc; i++) {
-+        g_autofree char *jsonstr = NULL;
-+
-+        if (!(jsonstr = virJSONValueToString(data->propssrc[i], true)))
-+            return -1;
-+
-+        virBufferAdd(&buf, jsonstr, -1);
-+    }
-+
-+    actual = virBufferContentAndReset(&buf);
-+
-+    return virTestCompareToFile(actual, jsonpath);
-+}
-+
-+
-+
- struct testQemuImageCreateData {
-     const char *name;
-     const char *backingname;
-@@ -515,36 +546,6 @@ testQemuImageCreate(const void *opaque)
- }
- 
- 
--static int
--testQemuDiskXMLToPropsValidateFileSrcOnly(const void *opaque)
--{
--    struct testQemuDiskXMLToJSONData *data = (void *) opaque;
--    g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
--    g_autofree char *jsonpath = NULL;
--    g_autofree char *actual = NULL;
--    size_t i;
--
--    if (data->fail)
--        return EXIT_AM_SKIP;
--
--    jsonpath = g_strdup_printf("%s%s-srconly.json", testQemuDiskXMLToJSONPath,
--                               data->name);
--
--    for (i = 0; i < data->npropssrc; i++) {
--        g_autofree char *jsonstr = NULL;
--
--        if (!(jsonstr = virJSONValueToString(data->propssrc[i], true)))
--            return -1;
--
--        virBufferAdd(&buf, jsonstr, -1);
--    }
--
--    actual = virBufferContentAndReset(&buf);
--
--    return virTestCompareToFile(actual, jsonpath);
--}
--
--
- static const char *bitmapDetectPrefix = "qemublocktestdata/bitmap/";
- 
- static void
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-tests-Add-capabilities-for-QEMU-5.0.0-on-aarch64.patch b/SOURCES/libvirt-tests-Add-capabilities-for-QEMU-5.0.0-on-aarch64.patch
deleted file mode 100644
index b7037b5..0000000
--- a/SOURCES/libvirt-tests-Add-capabilities-for-QEMU-5.0.0-on-aarch64.patch
+++ /dev/null
@@ -1,23543 +0,0 @@
-From 3fddf6edcbf3b0448c96b82c358ae9a4d2272c39 Mon Sep 17 00:00:00 2001
-Message-Id: <3fddf6edcbf3b0448c96b82c358ae9a4d2272c39@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 13:12:32 +0100
-Subject: [PATCH] tests: Add capabilities for QEMU 5.0.0 on aarch64
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This will be the first QEMU version that will support the
-kvm-no-adjvtime CPU feature.
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 79ebc31a1b671577f413a4fed4addca8ae3423c9)
-
-Changes:
-
-  * tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
-    tests/domaincapsdata/qemu_5.0.0.aarch64.xml
-    tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-
-    + rng-builting support has not been backported
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214121237.623948-2-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../qemu_5.0.0-virt.aarch64.xml               |   155 +
- tests/domaincapsdata/qemu_5.0.0.aarch64.xml   |   149 +
- .../caps_5.0.0.aarch64.replies                | 22717 ++++++++++++++++
- .../caps_5.0.0.aarch64.xml                    |   455 +
- 4 files changed, 23476 insertions(+)
- create mode 100644 tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
- create mode 100644 tests/domaincapsdata/qemu_5.0.0.aarch64.xml
- create mode 100644 tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies
- create mode 100644 tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-
-diff --git a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
-new file mode 100644
-index 0000000000..6b6235fccc
---- /dev/null
-+++ b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
-@@ -0,0 +1,155 @@
-+<domainCapabilities>
-+  <path>/usr/bin/qemu-system-aarch64</path>
-+  <domain>kvm</domain>
-+  <machine>virt-5.0</machine>
-+  <arch>aarch64</arch>
-+  <vcpu max='512'/>
-+  <iothreads supported='yes'/>
-+  <os supported='yes'>
-+    <enum name='firmware'>
-+      <value>efi</value>
-+    </enum>
-+    <loader supported='yes'>
-+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
-+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
-+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
-+      <enum name='type'>
-+        <value>rom</value>
-+        <value>pflash</value>
-+      </enum>
-+      <enum name='readonly'>
-+        <value>yes</value>
-+        <value>no</value>
-+      </enum>
-+      <enum name='secure'>
-+        <value>no</value>
-+      </enum>
-+    </loader>
-+  </os>
-+  <cpu>
-+    <mode name='host-passthrough' supported='yes'/>
-+    <mode name='host-model' supported='no'/>
-+    <mode name='custom' supported='yes'>
-+      <model usable='unknown'>pxa262</model>
-+      <model usable='unknown'>pxa270-a0</model>
-+      <model usable='unknown'>arm1136</model>
-+      <model usable='unknown'>cortex-a15</model>
-+      <model usable='unknown'>pxa260</model>
-+      <model usable='unknown'>arm1136-r2</model>
-+      <model usable='unknown'>pxa261</model>
-+      <model usable='unknown'>pxa255</model>
-+      <model usable='unknown'>cortex-a72</model>
-+      <model usable='unknown'>cortex-m33</model>
-+      <model usable='unknown'>arm926</model>
-+      <model usable='unknown'>cortex-r5f</model>
-+      <model usable='unknown'>arm11mpcore</model>
-+      <model usable='unknown'>pxa250</model>
-+      <model usable='unknown'>ti925t</model>
-+      <model usable='unknown'>cortex-a57</model>
-+      <model usable='unknown'>sa1110</model>
-+      <model usable='unknown'>arm1176</model>
-+      <model usable='unknown'>cortex-a53</model>
-+      <model usable='unknown'>sa1100</model>
-+      <model usable='unknown'>pxa270-c5</model>
-+      <model usable='unknown'>cortex-a9</model>
-+      <model usable='unknown'>cortex-m7</model>
-+      <model usable='unknown'>cortex-a8</model>
-+      <model usable='unknown'>cortex-a7</model>
-+      <model usable='unknown'>pxa270-c0</model>
-+      <model usable='unknown'>arm1026</model>
-+      <model usable='unknown'>pxa270-b1</model>
-+      <model usable='unknown'>cortex-m3</model>
-+      <model usable='unknown'>max</model>
-+      <model usable='unknown'>cortex-m4</model>
-+      <model usable='unknown'>pxa270-b0</model>
-+      <model usable='unknown'>arm946</model>
-+      <model usable='unknown'>cortex-m0</model>
-+      <model usable='unknown'>cortex-r5</model>
-+      <model usable='unknown'>pxa270-a1</model>
-+      <model usable='unknown'>pxa270</model>
-+    </mode>
-+  </cpu>
-+  <devices>
-+    <disk supported='yes'>
-+      <enum name='diskDevice'>
-+        <value>disk</value>
-+        <value>cdrom</value>
-+        <value>floppy</value>
-+        <value>lun</value>
-+      </enum>
-+      <enum name='bus'>
-+        <value>fdc</value>
-+        <value>scsi</value>
-+        <value>virtio</value>
-+        <value>usb</value>
-+        <value>sata</value>
-+      </enum>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+    </disk>
-+    <graphics supported='yes'>
-+      <enum name='type'>
-+        <value>sdl</value>
-+        <value>vnc</value>
-+      </enum>
-+    </graphics>
-+    <video supported='yes'>
-+      <enum name='modelType'>
-+        <value>vga</value>
-+        <value>cirrus</value>
-+        <value>vmvga</value>
-+        <value>virtio</value>
-+        <value>none</value>
-+        <value>bochs</value>
-+        <value>ramfb</value>
-+      </enum>
-+    </video>
-+    <hostdev supported='yes'>
-+      <enum name='mode'>
-+        <value>subsystem</value>
-+      </enum>
-+      <enum name='startupPolicy'>
-+        <value>default</value>
-+        <value>mandatory</value>
-+        <value>requisite</value>
-+        <value>optional</value>
-+      </enum>
-+      <enum name='subsysType'>
-+        <value>usb</value>
-+        <value>pci</value>
-+        <value>scsi</value>
-+      </enum>
-+      <enum name='capsType'/>
-+      <enum name='pciBackend'>
-+        <value>default</value>
-+        <value>vfio</value>
-+      </enum>
-+    </hostdev>
-+    <rng supported='yes'>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+      <enum name='backendModel'>
-+        <value>random</value>
-+        <value>egd</value>
-+      </enum>
-+    </rng>
-+  </devices>
-+  <features>
-+    <gic supported='yes'>
-+      <enum name='version'>
-+        <value>3</value>
-+      </enum>
-+    </gic>
-+    <vmcoreinfo supported='yes'/>
-+    <genid supported='no'/>
-+    <backingStoreInput supported='yes'/>
-+    <backup supported='no'/>
-+    <sev supported='no'/>
-+  </features>
-+</domainCapabilities>
-diff --git a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml
-new file mode 100644
-index 0000000000..5cebdcf7db
---- /dev/null
-+++ b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml
-@@ -0,0 +1,149 @@
-+<domainCapabilities>
-+  <path>/usr/bin/qemu-system-aarch64</path>
-+  <domain>kvm</domain>
-+  <machine>integratorcp</machine>
-+  <arch>aarch64</arch>
-+  <vcpu max='1'/>
-+  <iothreads supported='yes'/>
-+  <os supported='yes'>
-+    <enum name='firmware'/>
-+    <loader supported='yes'>
-+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
-+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
-+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
-+      <enum name='type'>
-+        <value>rom</value>
-+        <value>pflash</value>
-+      </enum>
-+      <enum name='readonly'>
-+        <value>yes</value>
-+        <value>no</value>
-+      </enum>
-+      <enum name='secure'>
-+        <value>no</value>
-+      </enum>
-+    </loader>
-+  </os>
-+  <cpu>
-+    <mode name='host-passthrough' supported='yes'/>
-+    <mode name='host-model' supported='no'/>
-+    <mode name='custom' supported='yes'>
-+      <model usable='unknown'>pxa262</model>
-+      <model usable='unknown'>pxa270-a0</model>
-+      <model usable='unknown'>arm1136</model>
-+      <model usable='unknown'>cortex-a15</model>
-+      <model usable='unknown'>pxa260</model>
-+      <model usable='unknown'>arm1136-r2</model>
-+      <model usable='unknown'>pxa261</model>
-+      <model usable='unknown'>pxa255</model>
-+      <model usable='unknown'>cortex-a72</model>
-+      <model usable='unknown'>cortex-m33</model>
-+      <model usable='unknown'>arm926</model>
-+      <model usable='unknown'>cortex-r5f</model>
-+      <model usable='unknown'>arm11mpcore</model>
-+      <model usable='unknown'>pxa250</model>
-+      <model usable='unknown'>ti925t</model>
-+      <model usable='unknown'>cortex-a57</model>
-+      <model usable='unknown'>sa1110</model>
-+      <model usable='unknown'>arm1176</model>
-+      <model usable='unknown'>cortex-a53</model>
-+      <model usable='unknown'>sa1100</model>
-+      <model usable='unknown'>pxa270-c5</model>
-+      <model usable='unknown'>cortex-a9</model>
-+      <model usable='unknown'>cortex-m7</model>
-+      <model usable='unknown'>cortex-a8</model>
-+      <model usable='unknown'>cortex-a7</model>
-+      <model usable='unknown'>pxa270-c0</model>
-+      <model usable='unknown'>arm1026</model>
-+      <model usable='unknown'>pxa270-b1</model>
-+      <model usable='unknown'>cortex-m3</model>
-+      <model usable='unknown'>max</model>
-+      <model usable='unknown'>cortex-m4</model>
-+      <model usable='unknown'>pxa270-b0</model>
-+      <model usable='unknown'>arm946</model>
-+      <model usable='unknown'>cortex-m0</model>
-+      <model usable='unknown'>cortex-r5</model>
-+      <model usable='unknown'>pxa270-a1</model>
-+      <model usable='unknown'>pxa270</model>
-+    </mode>
-+  </cpu>
-+  <devices>
-+    <disk supported='yes'>
-+      <enum name='diskDevice'>
-+        <value>disk</value>
-+        <value>cdrom</value>
-+        <value>floppy</value>
-+        <value>lun</value>
-+      </enum>
-+      <enum name='bus'>
-+        <value>fdc</value>
-+        <value>scsi</value>
-+        <value>virtio</value>
-+        <value>usb</value>
-+        <value>sata</value>
-+      </enum>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+    </disk>
-+    <graphics supported='yes'>
-+      <enum name='type'>
-+        <value>sdl</value>
-+        <value>vnc</value>
-+      </enum>
-+    </graphics>
-+    <video supported='yes'>
-+      <enum name='modelType'>
-+        <value>vga</value>
-+        <value>cirrus</value>
-+        <value>vmvga</value>
-+        <value>virtio</value>
-+        <value>none</value>
-+        <value>bochs</value>
-+        <value>ramfb</value>
-+      </enum>
-+    </video>
-+    <hostdev supported='yes'>
-+      <enum name='mode'>
-+        <value>subsystem</value>
-+      </enum>
-+      <enum name='startupPolicy'>
-+        <value>default</value>
-+        <value>mandatory</value>
-+        <value>requisite</value>
-+        <value>optional</value>
-+      </enum>
-+      <enum name='subsysType'>
-+        <value>usb</value>
-+        <value>pci</value>
-+        <value>scsi</value>
-+      </enum>
-+      <enum name='capsType'/>
-+      <enum name='pciBackend'>
-+        <value>default</value>
-+        <value>vfio</value>
-+      </enum>
-+    </hostdev>
-+    <rng supported='yes'>
-+      <enum name='model'>
-+        <value>virtio</value>
-+        <value>virtio-transitional</value>
-+        <value>virtio-non-transitional</value>
-+      </enum>
-+      <enum name='backendModel'>
-+        <value>random</value>
-+        <value>egd</value>
-+      </enum>
-+    </rng>
-+  </devices>
-+  <features>
-+    <gic supported='no'/>
-+    <vmcoreinfo supported='yes'/>
-+    <genid supported='no'/>
-+    <backingStoreInput supported='yes'/>
-+    <backup supported='no'/>
-+    <sev supported='no'/>
-+  </features>
-+</domainCapabilities>
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies
-new file mode 100644
-index 0000000000..a3136a0966
---- /dev/null
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies
-@@ -0,0 +1,22717 @@
-+{
-+  "execute": "qmp_capabilities",
-+  "id": "libvirt-1"
-+}
-+
-+{
-+  "return": {
-+  },
-+  "id": "libvirt-1"
-+}
-+
-+{
-+  "execute": "query-version",
-+  "id": "libvirt-2"
-+}
-+
-+{
-+  "return": {
-+    "qemu": {
-+      "micro": 50,
-+      "minor": 2,
-+      "major": 4
-+    },
-+    "package": "v4.2.0-1157-gadcd6e93b9"
-+  },
-+  "id": "libvirt-2"
-+}
-+
-+{
-+  "execute": "query-target",
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "return": {
-+    "arch": "aarch64"
-+  },
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "execute": "query-commands",
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "netdev_add"
-+    },
-+    {
-+      "name": "device_add"
-+    },
-+    {
-+      "name": "query-qmp-schema"
-+    },
-+    {
-+      "name": "query-gic-capabilities"
-+    },
-+    {
-+      "name": "query-vm-generation-id"
-+    },
-+    {
-+      "name": "xen-load-devices-state"
-+    },
-+    {
-+      "name": "query-acpi-ospm-status"
-+    },
-+    {
-+      "name": "query-memory-devices"
-+    },
-+    {
-+      "name": "query-command-line-options"
-+    },
-+    {
-+      "name": "query-fdsets"
-+    },
-+    {
-+      "name": "remove-fd"
-+    },
-+    {
-+      "name": "add-fd"
-+    },
-+    {
-+      "name": "query-memory-size-summary"
-+    },
-+    {
-+      "name": "closefd"
-+    },
-+    {
-+      "name": "getfd"
-+    },
-+    {
-+      "name": "xen-set-global-dirty-log"
-+    },
-+    {
-+      "name": "change"
-+    },
-+    {
-+      "name": "human-monitor-command"
-+    },
-+    {
-+      "name": "balloon"
-+    },
-+    {
-+      "name": "inject-nmi"
-+    },
-+    {
-+      "name": "system_wakeup"
-+    },
-+    {
-+      "name": "x-exit-preconfig"
-+    },
-+    {
-+      "name": "cont"
-+    },
-+    {
-+      "name": "pmemsave"
-+    },
-+    {
-+      "name": "memsave"
-+    },
-+    {
-+      "name": "system_powerdown"
-+    },
-+    {
-+      "name": "system_reset"
-+    },
-+    {
-+      "name": "stop"
-+    },
-+    {
-+      "name": "quit"
-+    },
-+    {
-+      "name": "query-pci"
-+    },
-+    {
-+      "name": "query-balloon"
-+    },
-+    {
-+      "name": "query-iothreads"
-+    },
-+    {
-+      "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": "query-cpu-definitions"
-+    },
-+    {
-+      "name": "query-cpu-model-expansion"
-+    },
-+    {
-+      "name": "set-numa-node"
-+    },
-+    {
-+      "name": "query-hotpluggable-cpus"
-+    },
-+    {
-+      "name": "query-memdev"
-+    },
-+    {
-+      "name": "query-target"
-+    },
-+    {
-+      "name": "query-current-machine"
-+    },
-+    {
-+      "name": "query-machines"
-+    },
-+    {
-+      "name": "cpu-add"
-+    },
-+    {
-+      "name": "query-cpus-fast"
-+    },
-+    {
-+      "name": "query-cpus"
-+    },
-+    {
-+      "name": "device_del"
-+    },
-+    {
-+      "name": "device-list-properties"
-+    },
-+    {
-+      "name": "object-del"
-+    },
-+    {
-+      "name": "object-add"
-+    },
-+    {
-+      "name": "qom-list-properties"
-+    },
-+    {
-+      "name": "qom-list-types"
-+    },
-+    {
-+      "name": "qom-set"
-+    },
-+    {
-+      "name": "qom-get"
-+    },
-+    {
-+      "name": "qom-list"
-+    },
-+    {
-+      "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": "query-display-options"
-+    },
-+    {
-+      "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": "announce-self"
-+    },
-+    {
-+      "name": "query-rx-filter"
-+    },
-+    {
-+      "name": "netdev_del"
-+    },
-+    {
-+      "name": "set_link"
-+    },
-+    {
-+      "name": "query-dump-guest-memory-capability"
-+    },
-+    {
-+      "name": "query-dump"
-+    },
-+    {
-+      "name": "dump-guest-memory"
-+    },
-+    {
-+      "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": "query-jobs"
-+    },
-+    {
-+      "name": "job-finalize"
-+    },
-+    {
-+      "name": "job-dismiss"
-+    },
-+    {
-+      "name": "job-complete"
-+    },
-+    {
-+      "name": "job-cancel"
-+    },
-+    {
-+      "name": "job-resume"
-+    },
-+    {
-+      "name": "job-pause"
-+    },
-+    {
-+      "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": "x-blockdev-reopen"
-+    },
-+    {
-+      "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": "block-dirty-bitmap-merge"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-disable"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-enable"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-clear"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-remove"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-add"
-+    },
-+    {
-+      "name": "drive-mirror"
-+    },
-+    {
-+      "name": "x-debug-query-block-graph"
-+    },
-+    {
-+      "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": "block-latency-histogram-set"
-+    },
-+    {
-+      "name": "nbd-server-stop"
-+    },
-+    {
-+      "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": "watchdog-set-action"
-+    },
-+    {
-+      "name": "query-status"
-+    }
-+  ],
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "execute": "query-kvm",
-+  "id": "libvirt-5"
-+}
-+
-+{
-+  "return": {
-+    "enabled": true,
-+    "present": true
-+  },
-+  "id": "libvirt-5"
-+}
-+
-+{
-+  "execute": "qom-list-types",
-+  "id": "libvirt-6"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "scsi-hd",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "chardev-parallel",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "vhost-vsock-pci",
-+      "parent": "vhost-vsock-pci-base"
-+    },
-+    {
-+      "name": "pxa270-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "imx7.analog",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.gpio-ast2600",
-+      "parent": "aspeed.gpio"
-+    },
-+    {
-+      "name": "chardev-pty",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "pxa270-a1-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "digic",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "mv88w8618_flashcfg",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "at25df641",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "lm3s811evb-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "chardev-null",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "bcm2835-property",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxa2xx-pcmcia",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mx25l3205d",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "vhost-user-fs-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "canon-a1100-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "n25q512a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "lsi53c895a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pr-manager-helper",
-+      "parent": "pr-manager"
-+    },
-+    {
-+      "name": "cpu-cluster",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "virtio-keyboard-pci",
-+      "parent": "virtio-keyboard-pci-base-type"
-+    },
-+    {
-+      "name": "imx2.wdt",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virt-3.1-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "mx25l6405d",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virt-5.0-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "w25q256",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "ich9-usb-uhci4",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "s25fl064k",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "musicpal_gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-scsi-pci-non-transitional",
-+      "parent": "vhost-scsi-pci-base"
-+    },
-+    {
-+      "name": "ide-hd",
-+      "parent": "ide-device"
-+    },
-+    {
-+      "name": "virtio-net-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "virtio-9p-pci-non-transitional",
-+      "parent": "virtio-9p-pci-base"
-+    },
-+    {
-+      "name": "iotkit-secctl",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "usb-mtp",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "n25q00",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "tz-mpc-iommu-memory-region",
-+      "parent": "qemu:iommu-memory-region"
-+    },
-+    {
-+      "name": "cortex-r5-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "usb-mouse",
-+      "parent": "usb-hid"
-+    },
-+    {
-+      "name": "xlnx-zcu102-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "vexpress-a15-machine",
-+      "parent": "vexpress"
-+    },
-+    {
-+      "name": "imx7.gpt",
-+      "parent": "imx25.gpt"
-+    },
-+    {
-+      "name": "at45db081d",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "en25p32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "imx7.gpr",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxa2xx-i2c-slave",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "gpex-pcihost",
-+      "parent": "pcie-host-bridge"
-+    },
-+    {
-+      "name": "cortex-m0-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "aspeed.gpio-ast2500",
-+      "parent": "aspeed.gpio"
-+    },
-+    {
-+      "name": "ftgmac100",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "filter-rewriter",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "loader",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "s25fl256s1",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "arm946-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "iotkit",
-+      "parent": "arm-sse"
-+    },
-+    {
-+      "name": "m25pe80",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa270-b0-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "s25fl256s0",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-serial-pci",
-+      "parent": "virtio-serial-pci-base"
-+    },
-+    {
-+      "name": "usb-audio",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "platform-bus-device",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "qio-channel-file",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "usb-host",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "pcie-root-port",
-+      "parent": "pcie-root-port-base"
-+    },
-+    {
-+      "name": "iotkit-sysinfo",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mt25qu01g",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-crypto-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "platform-ehci-usb",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "ich9-usb-uhci1",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "ccid-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "xlnx,ps7-usb",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "imx31.gpt",
-+      "parent": "imx25.gpt"
-+    },
-+    {
-+      "name": "s25fl129p1",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "s25fl129p0",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "xlnx.xps-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ich9-usb-uhci6",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "ich9-usb-uhci5",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "xlnx.xps-intc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ich9-usb-uhci3",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "kvm-arm-gicv3",
-+      "parent": "arm-gicv3-common"
-+    },
-+    {
-+      "name": "virtio-input-host-pci",
-+      "parent": "virtio-input-host-pci-base-type"
-+    },
-+    {
-+      "name": "mcimx6ul-evk-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "SSI",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "e1000",
-+      "parent": "e1000-base"
-+    },
-+    {
-+      "name": "xlnx,zynq-xadc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xlnx.axi-dma",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "s25sl12801",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "s25sl12800",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa2xx_rtc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "exynos4210",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ich9-usb-uhci2",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "cortex-m4-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "sysbus-ahci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "kvm-arm-gic",
-+      "parent": "arm_gic_common"
-+    },
-+    {
-+      "name": "imx.fec",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.timer-ast2600",
-+      "parent": "aspeed.timer"
-+    },
-+    {
-+      "name": "tpci200",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "aspeed.gpio-ast2400",
-+      "parent": "aspeed.gpio"
-+    },
-+    {
-+      "name": "spitz-lcdtg",
-+      "parent": "ssi-slave"
-+    },
-+    {
-+      "name": "memory-backend-file",
-+      "parent": "memory-backend"
-+    },
-+    {
-+      "name": "stm32f2xx-usart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "max-arm-cpu",
-+      "parent": "aarch64-cpu"
-+    },
-+    {
-+      "name": "cortex-m3-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "s25sl064p",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "input-barrier",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "container",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "lan9118",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "stm32f2xx-syscfg",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mps2-an521-machine",
-+      "parent": "mps2tz"
-+    },
-+    {
-+      "name": "rtl8139",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "armsse-mhu",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "exynos4210.i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "s25sl064a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "vexpress-a9-machine",
-+      "parent": "vexpress"
-+    },
-+    {
-+      "name": "usb-chipidea",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "megasas",
-+      "parent": "megasas-base"
-+    },
-+    {
-+      "name": "corgi-ssp",
-+      "parent": "ssi-slave"
-+    },
-+    {
-+      "name": "pxa2xx-fir",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-balloon-pci-non-transitional",
-+      "parent": "virtio-balloon-pci-base"
-+    },
-+    {
-+      "name": "designware-pcie-host",
-+      "parent": "pci-host-bridge"
-+    },
-+    {
-+      "name": "scsi-block",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "mx66u1g45g",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "omap-intc",
-+      "parent": "common-omap-intc"
-+    },
-+    {
-+      "name": "unimplemented-device",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-user-input",
-+      "parent": "virtio-input-device"
-+    },
-+    {
-+      "name": "strongarm_pic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "max7310",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "sst25wf512",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "scsi-cd",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "chardev-udp",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "aspeed.fmc-ast2600",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "accel",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "microbit.i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxa270-b1-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "luminary-watchdog",
-+      "parent": "cmsdk-apb-watchdog"
-+    },
-+    {
-+      "name": "m45pe80",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa2xx-dma",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xlnx.axi-ethernet",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vmware-svga",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "ast2600-evb-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "imx.gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "tegra2-ehci-usb",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "virtio-serial-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "digic-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "integrator_debug",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.scu-ast2600",
-+      "parent": "aspeed.scu"
-+    },
-+    {
-+      "name": "chardev-gdb",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "vhost-scsi-pci",
-+      "parent": "vhost-scsi-pci-base"
-+    },
-+    {
-+      "name": "xlnx.usmp-gqspi",
-+      "parent": "xlnx.ps7-qspi"
-+    },
-+    {
-+      "name": "imx25.ccm",
-+      "parent": "imx.ccm"
-+    },
-+    {
-+      "name": "a15mpcore_priv",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "dc390",
-+      "parent": "am53c974"
-+    },
-+    {
-+      "name": "fw_cfg_mem",
-+      "parent": "fw_cfg"
-+    },
-+    {
-+      "name": "virtio-scsi-pci-transitional",
-+      "parent": "virtio-scsi-pci-base"
-+    },
-+    {
-+      "name": "chardev-socket",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "usb-ccid",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "virtio-rng-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "usb-uas",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "chardev-mux",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "ide-cd",
-+      "parent": "ide-device"
-+    },
-+    {
-+      "name": "mss-spi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cadence_uart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mps2-an385-machine",
-+      "parent": "mps2"
-+    },
-+    {
-+      "name": "virtio-balloon-pci",
-+      "parent": "virtio-balloon-pci-base"
-+    },
-+    {
-+      "name": "gpio_i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "imx.rngc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "iothread",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "spitz-keyboard",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "lm8323",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "qio-channel-rdma",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "n25q256a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "bochs-display",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "bcm2835-ic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xilinx-zynq-a9-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "aspeed.timer-ast2400",
-+      "parent": "aspeed.timer"
-+    },
-+    {
-+      "name": "arm1026-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "twl92230",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "vhost-vsock-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "qio-channel-websock",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "authz-list-file",
-+      "parent": "authz"
-+    },
-+    {
-+      "name": "sdhci-pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-input-host-device",
-+      "parent": "virtio-input-device"
-+    },
-+    {
-+      "name": "nrf51_soc.timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.timer-ast2500",
-+      "parent": "aspeed.timer"
-+    },
-+    {
-+      "name": "xlnx.v-dp",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "stm32f2xx-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pci-bridge",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "i82559er",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "aspeed.fmc-ast2500",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "ivshmem-doorbell",
-+      "parent": "ivshmem-common"
-+    },
-+    {
-+      "name": "arm-gicv2m",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mx66l1g45g",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "am53c974",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "versatile_pci_host",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "w25x80",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "mv88w8618_wlan",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pci-bridge-seat",
-+      "parent": "pci-bridge"
-+    },
-+    {
-+      "name": "en25q32b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa27x-timer",
-+      "parent": "pxa2xx-timer"
-+    },
-+    {
-+      "name": "pxa270-c0-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "witherspoon-bmc-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "mx25l1606e",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "microbit-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "nand",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "aspeed.scu-ast2500",
-+      "parent": "aspeed.scu"
-+    },
-+    {
-+      "name": "designware-pcie-root",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "gpio-key",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "serial-mm",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "hda-micro",
-+      "parent": "hda-audio"
-+    },
-+    {
-+      "name": "fw_cfg_io",
-+      "parent": "fw_cfg"
-+    },
-+    {
-+      "name": "pl190",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.sdmc-ast2600",
-+      "parent": "aspeed.sdmc"
-+    },
-+    {
-+      "name": "s3c-sdhci",
-+      "parent": "generic-sdhci"
-+    },
-+    {
-+      "name": "IDE",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "qemu,register",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "cortex-a7-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "at25256a-nonjedec",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "m25pe20",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "integrator_core",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virt-2.12-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "ads7846",
-+      "parent": "ssi-slave"
-+    },
-+    {
-+      "name": "sst25wf080",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "memory-backend-ram",
-+      "parent": "memory-backend"
-+    },
-+    {
-+      "name": "arm_gic",
-+      "parent": "arm_gic_common"
-+    },
-+    {
-+      "name": "aspeed.fmc-ast2400",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "exynos4210.mct",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "stellaris-adc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "connex-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "virtio-blk-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "imx6.ccm",
-+      "parent": "imx.ccm"
-+    },
-+    {
-+      "name": "virt-2.11-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "at25128a-nonjedec",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "n25q512a13",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "cortex-a8-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "n25q512a11",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "sl-nand",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "armv7m",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "icp-ctrl-regs",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "bcm2835-sdhost",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "stellaris-gptm",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "chardev-pipe",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "chardev-msmouse",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "virt-2.10-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "pl181",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cortex-m7-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "cryptodev-backend-builtin",
-+      "parent": "cryptodev-backend"
-+    },
-+    {
-+      "name": "m25pe16",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "hda-output",
-+      "parent": "hda-audio"
-+    },
-+    {
-+      "name": "w25x64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "VGA",
-+      "parent": "pci-vga"
-+    },
-+    {
-+      "name": "qio-net-listener",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "iotkit-sysctl",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "s25fl016k",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "n800-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "vfio-pci-nohotplug",
-+      "parent": "vfio-pci"
-+    },
-+    {
-+      "name": "m25p80",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "at25df321a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa2xx-mmci-bus",
-+      "parent": "sd-bus"
-+    },
-+    {
-+      "name": "edu",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "mptsas1068",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "bcm2835-fb",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "lm3s6965evb-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "aspeed.scu-ast2400",
-+      "parent": "aspeed.scu"
-+    },
-+    {
-+      "name": "versatileab-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "virtio-mouse-pci",
-+      "parent": "virtio-mouse-pci-base-type"
-+    },
-+    {
-+      "name": "strongarm-uart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pl330",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "gpex-root",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "cmsdk-apb-watchdog",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vfio-pci-igd-lpc-bridge",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "mv88w8618_pit",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "qio-channel-command",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "HDA",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "chardev-ringbuf",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "stm32f2xx-adc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cmsdk-apb-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mx66u51235f",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "aspeed.sdmc-ast2500",
-+      "parent": "aspeed.sdmc"
-+    },
-+    {
-+      "name": "aspeed.xdma",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pcm3680_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "usb-serial",
-+      "parent": "usb-serial-dev"
-+    },
-+    {
-+      "name": "qemu:memory-region",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "mioe3680_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "mv88w8618_pic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ssd0323",
-+      "parent": "ssi-slave"
-+    },
-+    {
-+      "name": "i2c-ddc",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "omap2-intc",
-+      "parent": "common-omap-intc"
-+    },
-+    {
-+      "name": "sysbus-ohci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xlnx.ps7-dev-cfg",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pl080",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "borzoi-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "stellaris-i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pl081",
-+      "parent": "pl080"
-+    },
-+    {
-+      "name": "xlnx.dpdma",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.smc-ast2400",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "can-bus",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "qtest-accel",
-+      "parent": "accel"
-+    },
-+    {
-+      "name": "m25p64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "w25x40",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "tosa-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "cirrus-vga",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "xio3130-downstream",
-+      "parent": "pcie-slot"
-+    },
-+    {
-+      "name": "acpi-ged",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-user-gpu",
-+      "parent": "virtio-gpu-base"
-+    },
-+    {
-+      "name": "n25q128a13",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-blk-pci",
-+      "parent": "virtio-blk-pci-base"
-+    },
-+    {
-+      "name": "cortex-a9-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "virtio-gpu-device",
-+      "parent": "virtio-gpu-base"
-+    },
-+    {
-+      "name": "xlnx-versal",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cryptodev-vhost-user",
-+      "parent": "cryptodev-backend"
-+    },
-+    {
-+      "name": "ast2500-a1",
-+      "parent": "aspeed-soc"
-+    },
-+    {
-+      "name": "n25q128a11",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "vt82c686b-usb-uhci",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "imx-gpcv2",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "lsi53c810",
-+      "parent": "lsi53c895a"
-+    },
-+    {
-+      "name": "chardev-file",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "System",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "strongarm-gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cheetah-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "m45pe16",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "usb-hub",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "pxa270-c5-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "sst25wf040",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "m45pe10",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "chardev-braille",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "exynos4210.rtc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "romulus-bmc-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "w25x32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "s25sl032p",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "vhost-user-scsi-pci-non-transitional",
-+      "parent": "vhost-user-scsi-pci-base"
-+    },
-+    {
-+      "name": "aspeed.gpio-ast2600-1_8v",
-+      "parent": "aspeed.gpio"
-+    },
-+    {
-+      "name": "aspeed.sdmc-ast2400",
-+      "parent": "aspeed.sdmc"
-+    },
-+    {
-+      "name": "filter-dump",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "imx25.gpt",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "PCIE",
-+      "parent": "PCI"
-+    },
-+    {
-+      "name": "pl061",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pcie-pci-bridge",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "sa1100-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "ssd0303",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "s25sl032a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "s25sl016a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-net-pci-transitional",
-+      "parent": "virtio-net-pci-base"
-+    },
-+    {
-+      "name": "mv88w8618_audio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-user-blk-pci",
-+      "parent": "vhost-user-blk-pci-base"
-+    },
-+    {
-+      "name": "s25sl008a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-serial-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "ssi-sd",
-+      "parent": "ssi-slave"
-+    },
-+    {
-+      "name": "secondary-vga",
-+      "parent": "pci-vga"
-+    },
-+    {
-+      "name": "vhost-scsi",
-+      "parent": "vhost-scsi-common"
-+    },
-+    {
-+      "name": "serial-io",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "exynos4210-ehci-usb",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "exynos4210.pwm",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cfi.pflash02",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pci-ohci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "s70fl01gs",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "cfi.pflash01",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "w25x20",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "tmp421",
-+      "parent": "tmp421-generic"
-+    },
-+    {
-+      "name": "s25fl512s",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "m25p40",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "mx25l12855e",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "tmp423",
-+      "parent": "tmp421-generic"
-+    },
-+    {
-+      "name": "input-linux",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "midway-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "tmp422",
-+      "parent": "tmp421-generic"
-+    },
-+    {
-+      "name": "netduinoplus2-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "bcm2835-aux",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "sabrelite-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "aspeed.spi2-ast2600",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "arm_mptimer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "musicpal-misc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "bcm2835-sys-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.spi1-ast2600",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "stm32f4xx-syscfg",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "SCSI",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "virtio-rng-pci-transitional",
-+      "parent": "virtio-rng-pci-base"
-+    },
-+    {
-+      "name": "virtio-serial-pci-transitional",
-+      "parent": "virtio-serial-pci-base"
-+    },
-+    {
-+      "name": "w25x16",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "ati-vga",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "sst25wf020",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "m25p32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "vfio-amd-xgbe",
-+      "parent": "vfio-platform"
-+    },
-+    {
-+      "name": "w25x10",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa2xx-gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "tacoma-bmc-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "palmetto-bmc-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "xlnx.xps-uartlite",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mainstone-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "n810-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "pci-serial",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "at26df161a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "rocker",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "terrier-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "max1111",
-+      "parent": "max111x"
-+    },
-+    {
-+      "name": "netduino2-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "max1110",
-+      "parent": "max111x"
-+    },
-+    {
-+      "name": "i82559c",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "i82559b",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "i82559a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vhost-user-scsi-pci",
-+      "parent": "vhost-user-scsi-pci-base"
-+    },
-+    {
-+      "name": "xlnx,zynqmp",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "virtio-blk-pci-non-transitional",
-+      "parent": "virtio-blk-pci-base"
-+    },
-+    {
-+      "name": "realview_pci",
-+      "parent": "versatile_pci"
-+    },
-+    {
-+      "name": "pcnet",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pl041",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "nrf51_soc.uart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "n25q032a13",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "n25q032a11",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "gd25q64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "sst25wf010",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "rng-egd",
-+      "parent": "rng-backend"
-+    },
-+    {
-+      "name": "m25p20",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "xlnx.zdma",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "exynos4210.gic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "raspi3-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "migration",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "l2x0",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "chardev-testdev",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "n25q064",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "allwinner-A10-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.spi1-ast2500",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "n25q064a13",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "i82558b",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "n25q064a11",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pl031",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "raspi2-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "filter-mirror",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "strongarm-ssp",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "i82558a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "smbus-eeprom",
-+      "parent": "smbus-device"
-+    },
-+    {
-+      "name": "scoop",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "msf2-soc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pl111",
-+      "parent": "pl110"
-+    },
-+    {
-+      "name": "pl110",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "tosa_dac",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "onenand",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virt-4.1-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "bcm2835-dma",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "m25p16",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "i82801",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-keyboard-device",
-+      "parent": "virtio-input-hid-device"
-+    },
-+    {
-+      "name": "i82562",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "virtio-net-pci",
-+      "parent": "virtio-net-pci-base"
-+    },
-+    {
-+      "name": "exynos4210.fimd",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "m25p10",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "usb-net",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "highbank-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "virt-4.0-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "i82557c",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "at26df081a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "aspeed.spi2-ast2500",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "chardev-memory",
-+      "parent": "chardev-ringbuf"
-+    },
-+    {
-+      "name": "xilinx-axi-dma-control-stream",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "i82557b",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "aspeed.wdt-ast2600",
-+      "parent": "aspeed.wdt"
-+    },
-+    {
-+      "name": "digic-uart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cortex-a53-arm-cpu",
-+      "parent": "aarch64-cpu"
-+    },
-+    {
-+      "name": "sse-200",
-+      "parent": "arm-sse"
-+    },
-+    {
-+      "name": "arm1176-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "i82557a",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "s25sl004a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pl022",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "sdhci-bus",
-+      "parent": "sd-bus"
-+    },
-+    {
-+      "name": "split-irq",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "bcm2835-rng",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-gpu-pci",
-+      "parent": "virtio-gpu-pci-base-type"
-+    },
-+    {
-+      "name": "pl061_luminary",
-+      "parent": "pl061"
-+    },
-+    {
-+      "name": "nrf51_soc.gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xilinx-axienet-control-stream",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "m25p05",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "bcm2835-sdhost-bus",
-+      "parent": "sd-bus"
-+    },
-+    {
-+      "name": "strongarm-rtc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "n25q128",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "imx.epit",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "i82551",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "i82550",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "armv7m_nvic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cubieboard-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "fsl,imx31",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "host-arm-cpu",
-+      "parent": "aarch64-cpu"
-+    },
-+    {
-+      "name": "qio-channel-socket",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "cadence_ttc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "throttle-group",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "imx.i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "highbank-regs",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.wdt-ast2500",
-+      "parent": "aspeed.wdt"
-+    },
-+    {
-+      "name": "virt-2.6-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "sa1110-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "arm.cortex-a9-global-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "exynos4210.rng",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ich9-usb-ehci2",
-+      "parent": "pci-ehci-usb"
-+    },
-+    {
-+      "name": "virtio-crypto-pci",
-+      "parent": "virtio-crypto-pci-base-type"
-+    },
-+    {
-+      "name": "dpcd",
-+      "parent": "aux-slave"
-+    },
-+    {
-+      "name": "pl011",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ich9-usb-ehci1",
-+      "parent": "pci-ehci-usb"
-+    },
-+    {
-+      "name": "vfio-pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "nec-usb-xhci",
-+      "parent": "base-xhci"
-+    },
-+    {
-+      "name": "imx6.gpt",
-+      "parent": "imx25.gpt"
-+    },
-+    {
-+      "name": "irq",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "tusb6010",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "realview_mpcore",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "can-host-socketcan",
-+      "parent": "can-host"
-+    },
-+    {
-+      "name": "fsl,imx25",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "sx1-v1-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "w25q32dw",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "gd25q32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "dbus-vmstate",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "cortex-a57-arm-cpu",
-+      "parent": "aarch64-cpu"
-+    },
-+    {
-+      "name": "memory-backend-memfd",
-+      "parent": "memory-backend"
-+    },
-+    {
-+      "name": "n25q032",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "aspeed.spi1-ast2400",
-+      "parent": "aspeed.smc"
-+    },
-+    {
-+      "name": "aspeed-mmi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxa2xx_pic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "w25q512jv",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "piix3-usb-uhci",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "virtserialport",
-+      "parent": "virtio-serial-port"
-+    },
-+    {
-+      "name": "pvscsi",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "ti925t-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "virtio-rng-pci-non-transitional",
-+      "parent": "virtio-rng-pci-base"
-+    },
-+    {
-+      "name": "virt-4.2-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "virtio-serial-pci-non-transitional",
-+      "parent": "virtio-serial-pci-base"
-+    },
-+    {
-+      "name": "imx7.snvs",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "sd-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "sx1-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "320s33b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "ich9-ahci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "serial",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "dscm1xxxx",
-+      "parent": "microdrive"
-+    },
-+    {
-+      "name": "chardev-stdio",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "armv7m_systick",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "imx6ul.ccm",
-+      "parent": "imx.ccm"
-+    },
-+    {
-+      "name": "aux-to-i2c-bridge",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "pc-dimm",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "cmsdk-apb-dualtimer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-vsock-pci-non-transitional",
-+      "parent": "vhost-vsock-pci-base"
-+    },
-+    {
-+      "name": "mcimx7d-sabre-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "tls-creds-anon",
-+      "parent": "tls-creds"
-+    },
-+    {
-+      "name": "arm-smmuv3",
-+      "parent": "arm-smmu"
-+    },
-+    {
-+      "name": "musca-a-machine",
-+      "parent": "musca"
-+    },
-+    {
-+      "name": "xlnx-zynmp.rtc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "n25q00a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "IndustryPack",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "cryptodev-backend",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "realview-eb-mpcore-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "chardev-vc",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "virt-2.8-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "sii9022",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "swift-bmc-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "exynos4210.clk",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "or-irq",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "mx25l8005",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pl050_keyboard",
-+      "parent": "pl050"
-+    },
-+    {
-+      "name": "kzm-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "qio-channel-buffer",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "pxa250-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "usb-ehci",
-+      "parent": "pci-ehci-usb"
-+    },
-+    {
-+      "name": "filter-redirector",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "virt-2.7-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "xgmac",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "versatile_pci",
-+      "parent": "pci-host-bridge"
-+    },
-+    {
-+      "name": "realview_sysctl",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "smc91c111",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "arm11mpcore-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "virtio-rng-pci",
-+      "parent": "virtio-rng-pci-base"
-+    },
-+    {
-+      "name": "pxa2xx-mmci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "filter-replay",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "nrf51_soc.rng",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "sst25vf080b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "nrf51_soc.nvm",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "akita-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "aspeed.wdt-ast2400",
-+      "parent": "aspeed.wdt"
-+    },
-+    {
-+      "name": "qemu-console",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "cortex-r5f-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "ppc4xx-ehci-usb",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "e1000-82545em",
-+      "parent": "e1000-base"
-+    },
-+    {
-+      "name": "virtio-mmio-bus",
-+      "parent": "virtio-bus"
-+    },
-+    {
-+      "name": "vhost-user-blk-pci-transitional",
-+      "parent": "vhost-user-blk-pci-base"
-+    },
-+    {
-+      "name": "allwinner-a10",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "armsse-cpuid",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "chardev-wctablet",
-+      "parent": "chardev"
-+    },
-+    {
-+      "name": "filter-buffer",
-+      "parent": "netfilter"
-+    },
-+    {
-+      "name": "sp804",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-user-gpu-pci",
-+      "parent": "vhost-user-gpu-pci-base-type"
-+    },
-+    {
-+      "name": "tmp105",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "w25q80",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "piix4-usb-uhci",
-+      "parent": "pci-uhci-usb"
-+    },
-+    {
-+      "name": "integrator_pit",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "generic-sdhci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "usb-storage",
-+      "parent": "usb-storage-dev"
-+    },
-+    {
-+      "name": "e1000-82544gc",
-+      "parent": "e1000-base"
-+    },
-+    {
-+      "name": "xilinx,zynq_slcr",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "ioh3420",
-+      "parent": "pcie-root-port-base"
-+    },
-+    {
-+      "name": "pci-serial-4x",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "vmcoreinfo",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "mv88w8618_eth",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "versatilepb_sic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "aspeed.sdhci",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-9p-pci",
-+      "parent": "virtio-9p-pci-base"
-+    },
-+    {
-+      "name": "integrator_pic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "versatile_i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "m25p128",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "en25f32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "z2-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "s70fs01gs",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "at26f004",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-9p-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "ich9-intel-hda",
-+      "parent": "intel-hda-generic"
-+    },
-+    {
-+      "name": "s25fs512s",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "sbsa-ref-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "n25q256a13",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "160s33b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "n25q256a11",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "imx-usdhc",
-+      "parent": "generic-sdhci"
-+    },
-+    {
-+      "name": "secret",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "exynos4210.irq_gate",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "musicpal-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "stm32f2xx-spi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "imx6.src",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "exynos4210.combiner",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxa25x-timer",
-+      "parent": "pxa2xx-timer"
-+    },
-+    {
-+      "name": "arm926-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "chardev-serial",
-+      "parent": "chardev-fd"
-+    },
-+    {
-+      "name": "virt-2.9-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "vhost-user-blk-pci-non-transitional",
-+      "parent": "vhost-user-blk-pci-base"
-+    },
-+    {
-+      "name": "exynos4210.pmu",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vhost-user-backend",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "imx7.ccm",
-+      "parent": "imx.ccm"
-+    },
-+    {
-+      "name": "ipoctal232",
-+      "parent": "ipack-device"
-+    },
-+    {
-+      "name": "vhost-user-fs-pci",
-+      "parent": "vhost-user-fs-pci-base"
-+    },
-+    {
-+      "name": "virtio-pci-bus",
-+      "parent": "virtio-bus"
-+    },
-+    {
-+      "name": "omap_i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "omap-gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "cmsdk-apb-uart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-tablet-device",
-+      "parent": "virtio-input-hid-device"
-+    },
-+    {
-+      "name": "w25q64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "virtio-scsi-pci",
-+      "parent": "virtio-scsi-pci-base"
-+    },
-+    {
-+      "name": "at25df041a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "mx25l12805d",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "x3130-upstream",
-+      "parent": "pcie-port"
-+    },
-+    {
-+      "name": "ES1370",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "tz-ppc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pci-testdev",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "at25fs040",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "emcraft-sf2-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "aspeed.rtc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "authz-list",
-+      "parent": "authz"
-+    },
-+    {
-+      "name": "xlnx.ps7-spi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "e1000e",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "cortex-m33-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "virtio-balloon-pci-transitional",
-+      "parent": "virtio-balloon-pci-base"
-+    },
-+    {
-+      "name": "cortex-a72-arm-cpu",
-+      "parent": "aarch64-cpu"
-+    },
-+    {
-+      "name": "ARM,bitband-memory",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "tcg-accel",
-+      "parent": "accel"
-+    },
-+    {
-+      "name": "nrf51-soc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtconsole",
-+      "parent": "virtserialport"
-+    },
-+    {
-+      "name": "mx25l25655e",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "mss-timer",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "msf2-sysreg",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pci-serial-2x",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "mps2-scc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "colo-compare",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "vhost-user-scsi-pci-transitional",
-+      "parent": "vhost-user-scsi-pci-base"
-+    },
-+    {
-+      "name": "mps2-fpgaio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-tablet-pci",
-+      "parent": "virtio-tablet-pci-base-type"
-+    },
-+    {
-+      "name": "allwinner-emac",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "i82801b11-bridge",
-+      "parent": "base-pci-bridge"
-+    },
-+    {
-+      "name": "bcm2836-control",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "bcm2835-peripherals",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "arm-its-kvm",
-+      "parent": "arm-gicv3-its-common"
-+    },
-+    {
-+      "name": "realview-pb-a8-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "fsl,imx7",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "fsl,imx6",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "usb-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "versatilepb-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "w25q80bl",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa255-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "at26df321",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "musicpal_key",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "PCI",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "pxa261-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "tosa-ssp",
-+      "parent": "ssi-slave"
-+    },
-+    {
-+      "name": "pl050_mouse",
-+      "parent": "pl050"
-+    },
-+    {
-+      "name": "tulip",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "tz-msc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "strongarm-ppc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "fusbh200-ehci-usb",
-+      "parent": "sysbus-ehci-usb"
-+    },
-+    {
-+      "name": "aspeed.i2c-ast2600",
-+      "parent": "aspeed.i2c"
-+    },
-+    {
-+      "name": "vhost-user-scsi",
-+      "parent": "vhost-scsi-common"
-+    },
-+    {
-+      "name": "arm1136-r2-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "imx.enet",
-+      "parent": "imx.fec"
-+    },
-+    {
-+      "name": "esp",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "usb-braille",
-+      "parent": "usb-serial-dev"
-+    },
-+    {
-+      "name": "pxa260-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "ast2400-a1",
-+      "parent": "aspeed-soc"
-+    },
-+    {
-+      "name": "arm-gicv3",
-+      "parent": "arm-gicv3-common"
-+    },
-+    {
-+      "name": "stellaris_enet",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "musicpal_lcd",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "fsl,imx6ul",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "realview-eb-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "ne2k_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "realview-pbx-a9-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "ivshmem-plain",
-+      "parent": "ivshmem-common"
-+    },
-+    {
-+      "name": "vhost-user-blk",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "usb-kbd",
-+      "parent": "usb-hid"
-+    },
-+    {
-+      "name": "musca-b1-machine",
-+      "parent": "musca"
-+    },
-+    {
-+      "name": "authz-simple",
-+      "parent": "authz"
-+    },
-+    {
-+      "name": "pxa2xx_i2c",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "a9-scu",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "imx31.ccm",
-+      "parent": "imx.ccm"
-+    },
-+    {
-+      "name": "cortex-a15-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "spitz-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "hda-duplex",
-+      "parent": "hda-audio"
-+    },
-+    {
-+      "name": "megasas-gen2",
-+      "parent": "megasas-base"
-+    },
-+    {
-+      "name": "none-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "virtio-9p-pci-transitional",
-+      "parent": "virtio-9p-pci-base"
-+    },
-+    {
-+      "name": "mt25ql01g",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "w25q32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "stm32f205-soc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "wm8750",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "virtio-balloon-device",
-+      "parent": "virtio-device"
-+    },
-+    {
-+      "name": "kvaser_pci",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "allwinner-ahci",
-+      "parent": "sysbus-ahci"
-+    },
-+    {
-+      "name": "m25px64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pl011_luminary",
-+      "parent": "pl011"
-+    },
-+    {
-+      "name": "at25fs010",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "allwinner-a10-pic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "usb-wacom-tablet",
-+      "parent": "usb-device"
-+    },
-+    {
-+      "name": "nvme",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "imx25-pdk-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "scsi-disk",
-+      "parent": "scsi-disk-base"
-+    },
-+    {
-+      "name": "vhost-scsi-pci-transitional",
-+      "parent": "vhost-scsi-pci-base"
-+    },
-+    {
-+      "name": "ramfb",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "arm1136-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "mx25l4005a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "usb-tablet",
-+      "parent": "usb-hid"
-+    },
-+    {
-+      "name": "xlnx.ps7-qspi",
-+      "parent": "xlnx.ps7-spi"
-+    },
-+    {
-+      "name": "vhost-user-input-pci",
-+      "parent": "vhost-user-input-pci-base-type"
-+    },
-+    {
-+      "name": "bcm2835-thermal",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xlnx-versal-virt-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "intel-hda",
-+      "parent": "intel-hda-generic"
-+    },
-+    {
-+      "name": "aspeed.i2c-ast2500",
-+      "parent": "aspeed.i2c"
-+    },
-+    {
-+      "name": "en25q64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "kvm-accel",
-+      "parent": "accel"
-+    },
-+    {
-+      "name": "collie-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "arm11mpcore_priv",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "imx.spi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xlnx.xps-spi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "realview_gic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-scsi-device",
-+      "parent": "virtio-scsi-common"
-+    },
-+    {
-+      "name": "bcm2835-mbox",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "smdkc210-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "AC97",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "ds1338",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "arm11-scu",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pxa270-a0-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "virtio-blk-pci-transitional",
-+      "parent": "virtio-blk-pci-base"
-+    },
-+    {
-+      "name": "xilinx-axi-dma-data-stream",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "pxa262-arm-cpu",
-+      "parent": "arm-cpu"
-+    },
-+    {
-+      "name": "tls-creds-x509",
-+      "parent": "tls-creds"
-+    },
-+    {
-+      "name": "sd-card",
-+      "parent": "device"
-+    },
-+    {
-+      "name": "bcm2835_gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "i2c-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "virtio-mouse-device",
-+      "parent": "virtio-input-hid-device"
-+    },
-+    {
-+      "name": "exynos4210.uart",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mx25l25635e",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "640s33b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pl110_versatile",
-+      "parent": "pl110"
-+    },
-+    {
-+      "name": "ast2500-evb-machine",
-+      "parent": "aspeed-machine"
-+    },
-+    {
-+      "name": "ast2600-a0",
-+      "parent": "aspeed-soc"
-+    },
-+    {
-+      "name": "i6300esb",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "mainstone-fpga",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "qio-dns-resolver",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "aux-bus",
-+      "parent": "bus"
-+    },
-+    {
-+      "name": "virt-3.0-machine",
-+      "parent": "virt-machine"
-+    },
-+    {
-+      "name": "stm32f405-soc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "mx25l2005a",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "a9mpcore_priv",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xilinx-axienet-data-stream",
-+      "parent": "object"
-+    },
-+    {
-+      "name": "aspeed.vic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "stm32f4xx-exti",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "pvrdma",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "cadence_gem",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "sst25vf040b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "ide-drive",
-+      "parent": "ide-device"
-+    },
-+    {
-+      "name": "sst25vf032b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "bcm2837",
-+      "parent": "bcm283x"
-+    },
-+    {
-+      "name": "bcm2836",
-+      "parent": "bcm283x"
-+    },
-+    {
-+      "name": "sst25vf016b",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "vfio-platform",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-net-pci-non-transitional",
-+      "parent": "virtio-net-pci-base"
-+    },
-+    {
-+      "name": "omap2-gpio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "imx.serial",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "vmxnet3",
-+      "parent": "pci-device"
-+    },
-+    {
-+      "name": "pca9552",
-+      "parent": "i2c-slave"
-+    },
-+    {
-+      "name": "aspeed.i2c-ast2400",
-+      "parent": "aspeed.i2c"
-+    },
-+    {
-+      "name": "en25p64",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "pxa2xx-ssp",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "xlnx.zynqmp_ipi",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "tz-mpc",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "virtio-scsi-pci-non-transitional",
-+      "parent": "virtio-scsi-pci-base"
-+    },
-+    {
-+      "name": "verdex-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "mps2-an505-machine",
-+      "parent": "mps2tz"
-+    },
-+    {
-+      "name": "m25px32",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "smmuv3-iommu-memory-region",
-+      "parent": "qemu:iommu-memory-region"
-+    },
-+    {
-+      "name": "m25px32-s1",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "m25px32-s0",
-+      "parent": "m25p80-generic"
-+    },
-+    {
-+      "name": "mps2-an511-machine",
-+      "parent": "mps2"
-+    },
-+    {
-+      "name": "vfio-calxeda-xgmac",
-+      "parent": "vfio-platform"
-+    },
-+    {
-+      "name": "imx.avic",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "nuri-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "tls-creds-psk",
-+      "parent": "tls-creds"
-+    },
-+    {
-+      "name": "vhost-vsock-pci-transitional",
-+      "parent": "vhost-vsock-pci-base"
-+    },
-+    {
-+      "name": "integratorcp-machine",
-+      "parent": "machine"
-+    },
-+    {
-+      "name": "qio-channel-tls",
-+      "parent": "qio-channel"
-+    },
-+    {
-+      "name": "virtio-mmio",
-+      "parent": "sys-bus-device"
-+    },
-+    {
-+      "name": "scsi-generic",
-+      "parent": "scsi-device"
-+    },
-+    {
-+      "name": "rng-random",
-+      "parent": "rng-backend"
-+    },
-+    {
-+      "name": "rng-builtin",
-+      "parent": "rng-backend"
-+    },
-+    {
-+      "name": "usb-bot",
-+      "parent": "usb-storage-dev"
-+    },
-+    {
-+      "name": "qemu-xhci",
-+      "parent": "base-xhci"
-+    }
-+  ],
-+  "id": "libvirt-6"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-blk-pci"
-+  },
-+  "id": "libvirt-7"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "class",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "request-merging",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "secs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lsecs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "heads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "write-zeroes",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "scsi",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lcyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4194303,
-+      "name": "max-write-zeroes-sectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-enable-wce-if-config-wce",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lheads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-blk-device>"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "seg-max-adjust",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "config-wce",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "discard",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 128,
-+      "name": "queue-size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "num-queues",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": 4194303,
-+      "name": "max-discard-sectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-7"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-net-pci"
-+  },
-+  "id": "libvirt-8"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 3,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_ufo",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_ecn",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 150000,
-+      "name": "x-txtimer",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "mq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "status",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "tx_queue_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "tx",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_rx_extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 300000,
-+      "name": "rsc_interval",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mac",
-+      "description": "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "rx_queue_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_ecn",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_tso6",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "speed",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_tso4",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_csum",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "guest_announce",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "gso",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_rx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "duplex",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_vlan",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 256,
-+      "name": "x-txburst",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "csum",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "mrg_rxbuf",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_guest_offloads",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "failover",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ctrl_mac_addr",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_tso6",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-mtu-bypass-backend",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_tso4",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "host_ufo",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-net-device>"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "netdev",
-+      "description": "ID of a netdev to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "guest_rsc_ext",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "host_mtu",
-+      "type": "uint16"
-+    }
-+  ],
-+  "id": "libvirt-8"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-scsi-pci"
-+  },
-+  "id": "libvirt-9"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 65535,
-+      "name": "max_sectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 128,
-+      "name": "cmd_per_lun",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": 128,
-+      "name": "virtqueue_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "hotplug",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-scsi-device>"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "num_queues",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "param_change",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "seg_max_adjust",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-9"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-net-ccw"
-+  },
-+  "id": "libvirt-10"
-+}
-+
-+{
-+  "id": "libvirt-10",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-net-ccw' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-scsi-ccw"
-+  },
-+  "id": "libvirt-11"
-+}
-+
-+{
-+  "id": "libvirt-11",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-scsi-ccw' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-net-s390"
-+  },
-+  "id": "libvirt-12"
-+}
-+
-+{
-+  "id": "libvirt-12",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-net-s390' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "vfio-pci"
-+  },
-+  "id": "libvirt-13"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-sub-device-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-msi",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-igd-opregion",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "off",
-+      "name": "display",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-vga",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-vendor-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-balloon-allowed",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-req",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-vfio-ioeventfd",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-geforce-quirks",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-ioeventfd",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "x-pci-device-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-intx",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host",
-+      "description": "Address (bus/device/function) of the host device, example: 04:10.0",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-kvm-msix",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1100,
-+      "name": "x-intx-mmap-timeout-ms",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "x-igd-gms",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "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"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "off",
-+      "name": "x-msix-relocation",
-+      "description": "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
-+      "type": "OffAutoPCIBAR"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-no-mmap",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-13"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "scsi-hd"
-+  },
-+  "id": "libvirt-14"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 4294967295,
-+      "name": "scsi-id",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "lun",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "channel",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "heads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "port_index",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "dpofua",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 1073741824,
-+      "name": "max_unmap_size",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "rotation_rate",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "device_id",
-+      "type": "str"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "port_wwn",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 5,
-+      "name": "scsi_version",
-+      "type": "int32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "product",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lsecs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lheads",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "vendor",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lcyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "secs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "wwn",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "removable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "ver",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 2147483647,
-+      "name": "max_io_size",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-14"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "ide-hd"
-+  },
-+  "id": "libvirt-15"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 4294967295,
-+      "name": "unit",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lsecs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "secs",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lcyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "rotation_rate",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "heads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "bios-chs-trans",
-+      "description": "Logical CHS translation algorithm, auto/none/lba/large/rechs",
-+      "type": "BiosAtaTranslation"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "lheads",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "wwn",
-+      "type": "uint64"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "name": "model",
-+      "type": "str"
-+    },
-+    {
-+      "name": "ver",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "cyls",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    }
-+  ],
-+  "id": "libvirt-15"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "PIIX4_PM"
-+  },
-+  "id": "libvirt-16"
-+}
-+
-+{
-+  "id": "libvirt-16",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'PIIX4_PM' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "i440FX-pcihost"
-+  },
-+  "id": "libvirt-17"
-+}
-+
-+{
-+  "id": "libvirt-17",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'i440FX-pcihost' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "q35-pcihost"
-+  },
-+  "id": "libvirt-18"
-+}
-+
-+{
-+  "id": "libvirt-18",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'q35-pcihost' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "usb-storage"
-+  },
-+  "id": "libvirt-19"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": true,
-+      "name": "msos-desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "port",
-+      "type": "str"
-+    },
-+    {
-+      "name": "serial",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "full-path",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "logical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": 4294967295,
-+      "name": "discard_granularity",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "drive",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "opt_io_size",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "min_io_size",
-+      "type": "uint16"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "write-cache",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "share-rw",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "werror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "removable",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "rerror",
-+      "description": "Error handling policy, report/ignore/enospc/stop/auto",
-+      "type": "BlockdevOnError"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "physical_block_size",
-+      "description": "A power of two between 512 and 32768",
-+      "type": "uint16"
-+    },
-+    {
-+      "name": "bootindex",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "attached",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-19"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "kvm-pit"
-+  },
-+  "id": "libvirt-20"
-+}
-+
-+{
-+  "id": "libvirt-20",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'kvm-pit' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "VGA"
-+  },
-+  "id": "libvirt-21"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "mmio",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "qemu-extended-regs",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "ymax",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "vgamem_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xmax",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "edid",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "global-vmstate",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "big-endian-framebuffer",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-21"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "vmware-svga"
-+  },
-+  "id": "libvirt-22"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "vgamem_mb",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "global-vmstate",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-22"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-gpu-pci"
-+  },
-+  "id": "libvirt-23"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 3,
-+      "name": "vectors",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ioeventfd",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-gpu-device>"
-+    },
-+    {
-+      "default-value": 768,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "edid",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "max_outputs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 268435456,
-+      "name": "max_hostmem",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 1024,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-23"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-gpu-device"
-+  },
-+  "id": "libvirt-24"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "edid",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 268435456,
-+      "name": "max_hostmem",
-+      "type": "size"
-+    },
-+    {
-+      "default-value": 1024,
-+      "name": "xres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 768,
-+      "name": "yres",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": 1,
-+      "name": "max_outputs",
-+      "type": "uint32"
-+    }
-+  ],
-+  "id": "libvirt-24"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "ICH9-LPC"
-+  },
-+  "id": "libvirt-25"
-+}
-+
-+{
-+  "id": "libvirt-25",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'ICH9-LPC' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-balloon-pci"
-+  },
-+  "id": "libvirt-26"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "virtio-pci-bus-master-bug-migration",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnkctl-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-flr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-ignore-backend-features",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "page-per-vq",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "migrate-extra",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-pm-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "modern-pio-notify",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-deverr-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "ats",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "x-disable-pcie",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 0,
-+      "name": "class",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "disable-modern",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "disable-legacy",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "guest-stats",
-+      "type": "guest statistics"
-+    },
-+    {
-+      "name": "guest-stats-polling-interval",
-+      "type": "int"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "free-page-hint",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtio-backend",
-+      "type": "child<virtio-balloon-device>"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "qemu-4-0-config-size",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "deflate-on-oom",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-26"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-balloon-ccw"
-+  },
-+  "id": "libvirt-27"
-+}
-+
-+{
-+  "id": "libvirt-27",
-+  "error": {
-+    "class": "DeviceNotFound",
-+    "desc": "Device 'virtio-balloon-ccw' not found"
-+  }
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "virtio-balloon-device"
-+  },
-+  "id": "libvirt-28"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": true,
-+      "name": "notify_on_empty",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "any_layout",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "indirect_desc",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-started",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "event_idx",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "iommu_platform",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "use-disabled-flag",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "packed",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "free-page-hint",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "deflate-on-oom",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "iothread",
-+      "type": "link<iothread>"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "qemu-4-0-config-size",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "guest-stats",
-+      "type": "guest statistics"
-+    },
-+    {
-+      "name": "guest-stats-polling-interval",
-+      "type": "int"
-+    }
-+  ],
-+  "id": "libvirt-28"
-+}
-+
-+{
-+  "execute": "device-list-properties",
-+  "arguments": {
-+    "typename": "nec-usb-xhci"
-+  },
-+  "id": "libvirt-29"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "default-value": 1,
-+      "name": "rombar",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-lnksta-dllla",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "multifunction",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "romfile",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "x-pcie-extcap-init",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": -1,
-+      "name": "addr",
-+      "description": "Slot and optional function number, example: 06.0 or 06",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "failover_pair_id",
-+      "type": "str"
-+    },
-+    {
-+      "default-value": 4,
-+      "name": "p3",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "streams",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 4,
-+      "name": "p2",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "msi",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": 16,
-+      "name": "intrs",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": false,
-+      "name": "force-pcie-endcap",
-+      "description": "on/off",
-+      "type": "bool"
-+    },
-+    {
-+      "default-value": 64,
-+      "name": "slots",
-+      "type": "uint32"
-+    },
-+    {
-+      "default-value": "auto",
-+      "name": "msix",
-+      "description": "on/off/auto",
-+      "type": "OnOffAuto"
-+    },
-+    {
-+      "default-value": true,
-+      "name": "superspeed-ports-first",
-+      "description": "on/off",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-29"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "memory-backend-file"
-+  },
-+  "id": "libvirt-30"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "type",
-+      "type": "string"
-+    },
-+    {
-+      "name": "policy",
-+      "description": "Set the NUMA policy",
-+      "type": "HostMemPolicy"
-+    },
-+    {
-+      "name": "dump",
-+      "description": "Set to 'off' to exclude from core dump",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "share",
-+      "description": "Mark the memory as private to QEMU or shared",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "prealloc",
-+      "description": "Preallocate memory",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "size",
-+      "description": "Size of the memory region (ex: 500M)",
-+      "type": "int"
-+    },
-+    {
-+      "name": "x-use-canonical-path-for-ramblock-id",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host-nodes",
-+      "description": "Binds memory to the list of NUMA host nodes",
-+      "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-30"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "memory-backend-memfd"
-+  },
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "type",
-+      "type": "string"
-+    },
-+    {
-+      "name": "policy",
-+      "description": "Set the NUMA policy",
-+      "type": "HostMemPolicy"
-+    },
-+    {
-+      "name": "dump",
-+      "description": "Set to 'off' to exclude from core dump",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "share",
-+      "description": "Mark the memory as private to QEMU or shared",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "prealloc",
-+      "description": "Preallocate memory",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "size",
-+      "description": "Size of the memory region (ex: 500M)",
-+      "type": "int"
-+    },
-+    {
-+      "name": "x-use-canonical-path-for-ramblock-id",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "host-nodes",
-+      "description": "Binds memory to the list of NUMA host nodes",
-+      "type": "int"
-+    },
-+    {
-+      "name": "merge",
-+      "description": "Mark memory as mergeable",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "seal",
-+      "description": "Seal growing & shrinking",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hugetlbsize",
-+      "description": "Huge pages size (ex: 2M, 1G)",
-+      "type": "int"
-+    },
-+    {
-+      "name": "hugetlb",
-+      "description": "Use huge pages",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-31"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "max-arm-cpu"
-+  },
-+  "id": "libvirt-32"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "type",
-+      "type": "string"
-+    },
-+    {
-+      "name": "parent_bus",
-+      "type": "link<bus>"
-+    },
-+    {
-+      "name": "hotplugged",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hotpluggable",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "realized",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "legacy-memory",
-+      "type": "str"
-+    },
-+    {
-+      "name": "memory",
-+      "type": "link<qemu:memory-region>"
-+    },
-+    {
-+      "name": "psci-conduit",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "core-count",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "start-powered-off",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "mp-affinity",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "node-id",
-+      "type": "int32"
-+    },
-+    {
-+      "name": "midr",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "sve640",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve1152",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve1408",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-in[3]",
-+      "type": "child<irq>"
-+    },
-+    {
-+      "name": "unnamed-gpio-in[1]",
-+      "type": "child<irq>"
-+    },
-+    {
-+      "name": "sve1664",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve128",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "aarch64",
-+      "description": "Set on/off to enable/disable aarch64 execution state ",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve2048",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "rvbar",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "cntfrq",
-+      "type": "uint64"
-+    },
-+    {
-+      "name": "sve384",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-out[2]",
-+      "type": "link<irq>"
-+    },
-+    {
-+      "name": "kvm-no-adjvtime",
-+      "description": "Set on to disable the adjustment of the virtual counter. VM stopped time will be counted.",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-out[0]",
-+      "type": "link<irq>"
-+    },
-+    {
-+      "name": "sve512",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve896",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "gicv3-maintenance-interrupt[0]",
-+      "type": "link<irq>"
-+    },
-+    {
-+      "name": "sve1024",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pmu-interrupt[0]",
-+      "type": "link<irq>"
-+    },
-+    {
-+      "name": "sve1280",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve1536",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-in[2]",
-+      "type": "child<irq>"
-+    },
-+    {
-+      "name": "sve-max-vq",
-+      "type": "uint32"
-+    },
-+    {
-+      "name": "sve",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-in[0]",
-+      "type": "child<irq>"
-+    },
-+    {
-+      "name": "sve256",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve1792",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-out[3]",
-+      "type": "link<irq>"
-+    },
-+    {
-+      "name": "cfgend",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pmu",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "unnamed-gpio-out[1]",
-+      "type": "link<irq>"
-+    },
-+    {
-+      "name": "sve1920",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "reset-hivecs",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "sve768",
-+      "type": "bool"
-+    }
-+  ],
-+  "id": "libvirt-32"
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-33"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "integratorcp",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "nuri",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an511",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an505",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "verdex",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-3.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "ast2500-evb",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "smdkc210",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "collie",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "sa1110-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "xlnx-versal-virt",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "imx25-pdk",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "none",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "spitz",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "musca-b1",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-pbx-a9",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-eb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "versatilepb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-pb-a8",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a8-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "emcraft-sf2",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.9",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "musicpal",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sbsa-ref",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a57-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "z2",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c5-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "akita",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "kzm",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "swift-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.8",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-eb-mpcore",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm11mpcore-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "musca-a",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mcimx7d-sabre",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sx1",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "ti925t-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-4.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sx1-v1",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "ti925t-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "cubieboard",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-4.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "highbank",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-4.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "raspi2",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "raspi3",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "netduino2",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "terrier",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c5-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "n810",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm1136-r2-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mainstone",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c5-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "palmetto-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "tacoma-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sabrelite",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "netduinoplus2",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "midway",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "romulus-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "cheetah",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "ti925t-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "tosa",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "borzoi",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "versatileab",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "lm3s6965evb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "n800",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm1136-r2-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.10",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.11",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "connex",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.12",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "microbit",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "witherspoon-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "xilinx-zynq-a9",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an385",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "ast2600-evb",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "vexpress-a9",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an521",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mcimx6ul-evk",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "vexpress-a15",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "xlnx-zcu102",
-+      "numa-mem-supported": false,
-+      "cpu-max": 6,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-5.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false,
-+      "alias": "virt"
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-3.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "canon-a1100",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "lm3s811evb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    }
-+  ],
-+  "id": "libvirt-33"
-+}
-+
-+{
-+  "execute": "qom-list-properties",
-+  "arguments": {
-+    "typename": "virt-5.0-machine"
-+  },
-+  "id": "libvirt-34"
-+}
-+
-+{
-+  "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": "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": "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": "iommu",
-+      "description": "Set the IOMMU type. Valid values are none and smmuv3",
-+      "type": "string"
-+    },
-+    {
-+      "name": "virt.flash0",
-+      "type": "child<cfi.pflash01>"
-+    },
-+    {
-+      "name": "highmem",
-+      "description": "Set on/off to enable/disable using physical address space above 32 bits",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "pflash1",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "name": "pflash0",
-+      "description": "Node name or ID of a block device to use as a backend",
-+      "type": "str"
-+    },
-+    {
-+      "name": "gic-version",
-+      "description": "Set GIC version. Valid values are 2, 3 and host",
-+      "type": "string"
-+    },
-+    {
-+      "name": "its",
-+      "description": "Set on/off to enable/disable ITS instantiation",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "secure",
-+      "description": "Set on/off to enable/disable the ARM Security Extensions (TrustZone)",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virtualization",
-+      "description": "Set on/off to enable/disable emulating a guest CPU which implements the ARM Virtualization Extensions",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "hmat",
-+      "description": "Set on/off to enable/disable ACPI Heterogeneous Memory Attribute Table (HMAT)",
-+      "type": "bool"
-+    },
-+    {
-+      "name": "virt.flash1",
-+      "type": "child<cfi.pflash01>"
-+    }
-+  ],
-+  "id": "libvirt-34"
-+}
-+
-+{
-+  "execute": "query-cpu-definitions",
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "pxa262",
-+      "typename": "pxa262-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-a0",
-+      "typename": "pxa270-a0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1136",
-+      "typename": "arm1136-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a15",
-+      "typename": "cortex-a15-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa260",
-+      "typename": "pxa260-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1136-r2",
-+      "typename": "arm1136-r2-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa261",
-+      "typename": "pxa261-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa255",
-+      "typename": "pxa255-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a72",
-+      "typename": "cortex-a72-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m33",
-+      "typename": "cortex-m33-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm926",
-+      "typename": "arm926-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-r5f",
-+      "typename": "cortex-r5f-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm11mpcore",
-+      "typename": "arm11mpcore-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa250",
-+      "typename": "pxa250-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "ti925t",
-+      "typename": "ti925t-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a57",
-+      "typename": "cortex-a57-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "sa1110",
-+      "typename": "sa1110-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "host",
-+      "typename": "host-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1176",
-+      "typename": "arm1176-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a53",
-+      "typename": "cortex-a53-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "sa1100",
-+      "typename": "sa1100-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-c5",
-+      "typename": "pxa270-c5-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a9",
-+      "typename": "cortex-a9-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m7",
-+      "typename": "cortex-m7-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a8",
-+      "typename": "cortex-a8-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a7",
-+      "typename": "cortex-a7-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-c0",
-+      "typename": "pxa270-c0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1026",
-+      "typename": "arm1026-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-b1",
-+      "typename": "pxa270-b1-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m3",
-+      "typename": "cortex-m3-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "max",
-+      "typename": "max-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m4",
-+      "typename": "cortex-m4-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-b0",
-+      "typename": "pxa270-b0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm946",
-+      "typename": "arm946-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m0",
-+      "typename": "cortex-m0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-r5",
-+      "typename": "cortex-r5-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-a1",
-+      "typename": "pxa270-a1-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270",
-+      "typename": "pxa270-arm-cpu",
-+      "static": false
-+    }
-+  ],
-+  "id": "libvirt-35"
-+}
-+
-+{
-+  "execute": "query-tpm-models",
-+  "id": "libvirt-36"
-+}
-+
-+{
-+  "return": [
-+  ],
-+  "id": "libvirt-36"
-+}
-+
-+{
-+  "execute": "query-tpm-types",
-+  "id": "libvirt-37"
-+}
-+
-+{
-+  "return": [
-+  ],
-+  "id": "libvirt-37"
-+}
-+
-+{
-+  "execute": "query-command-line-options",
-+  "id": "libvirt-38"
-+}
-+
-+{
-+  "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": "audiodev",
-+          "type": "string"
-+        },
-+        {
-+          "name": "non-adaptive",
-+          "type": "boolean"
-+        },
-+        {
-+          "name": "lossy",
-+          "type": "boolean"
-+        },
-+        {
-+          "name": "sasl-authz",
-+          "type": "string"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "type": "string"
-+        },
-+        {
-+          "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": [
-+      ],
-+      "option": "smbios"
-+    },
-+    {
-+      "parameters": [
-+        {
-+          "name": "dmode",
-+          "type": "number"
-+        },
-+        {
-+          "name": "fmode",
-+          "type": "number"
-+        },
-+        {
-+          "name": "sock_fd",
-+          "type": "number"
-+        },
-+        {
-+          "name": "socket",
-+          "type": "string"
-+        },
-+        {
-+          "name": "multidevs",
-+          "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": "multidevs",
-+          "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": "chardev",
-+          "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": "number"
-+        },
-+        {
-+          "name": "splash-time",
-+          "type": "number"
-+        },
-+        {
-+          "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": "dies",
-+          "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": [
-+      ],
-+      "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": "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-authz",
-+          "type": "string"
-+        },
-+        {
-+          "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, io_uring)",
-+          "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-38"
-+}
-+
-+{
-+  "execute": "query-migrate-capabilities",
-+  "id": "libvirt-39"
-+}
-+
-+{
-+  "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": "multifd"
-+    },
-+    {
-+      "state": false,
-+      "capability": "dirty-bitmaps"
-+    },
-+    {
-+      "state": false,
-+      "capability": "postcopy-blocktime"
-+    },
-+    {
-+      "state": false,
-+      "capability": "late-block-activate"
-+    },
-+    {
-+      "state": false,
-+      "capability": "x-ignore-shared"
-+    },
-+    {
-+      "state": false,
-+      "capability": "validate-uuid"
-+    }
-+  ],
-+  "id": "libvirt-39"
-+}
-+
-+{
-+  "execute": "query-qmp-schema",
-+  "id": "libvirt-40"
-+}
-+
-+{
-+  "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": "GUEST_CRASHLOADED",
-+      "meta-type": "event",
-+      "arg-type": "7"
-+    },
-+    {
-+      "name": "query-pr-managers",
-+      "ret-type": "[8]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "blockdev-snapshot-internal-sync",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "9"
-+    },
-+    {
-+      "name": "blockdev-snapshot-delete-internal-sync",
-+      "ret-type": "11",
-+      "meta-type": "command",
-+      "arg-type": "10"
-+    },
-+    {
-+      "name": "eject",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "12"
-+    },
-+    {
-+      "name": "nbd-server-start",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "13"
-+    },
-+    {
-+      "name": "nbd-server-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "14"
-+    },
-+    {
-+      "name": "nbd-server-remove",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "15"
-+    },
-+    {
-+      "name": "nbd-server-stop",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "DEVICE_TRAY_MOVED",
-+      "meta-type": "event",
-+      "arg-type": "16"
-+    },
-+    {
-+      "name": "PR_MANAGER_STATUS_CHANGED",
-+      "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": "block-latency-histogram-set",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "20"
-+    },
-+    {
-+      "name": "query-block",
-+      "ret-type": "[21]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-blockstats",
-+      "ret-type": "[23]",
-+      "meta-type": "command",
-+      "arg-type": "22"
-+    },
-+    {
-+      "name": "query-block-jobs",
-+      "ret-type": "[24]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "block_passwd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "25"
-+    },
-+    {
-+      "name": "block_resize",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "26"
-+    },
-+    {
-+      "name": "blockdev-snapshot-sync",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "27"
-+    },
-+    {
-+      "name": "blockdev-snapshot",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "28"
-+    },
-+    {
-+      "name": "change-backing-file",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "29"
-+    },
-+    {
-+      "name": "block-commit",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "30"
-+    },
-+    {
-+      "name": "drive-backup",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "31"
-+    },
-+    {
-+      "name": "blockdev-backup",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "32"
-+    },
-+    {
-+      "name": "query-named-block-nodes",
-+      "ret-type": "[33]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "x-debug-query-block-graph",
-+      "ret-type": "34",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "drive-mirror",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "35"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "36"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-remove",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "37"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-clear",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "37"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-enable",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "37"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-disable",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "37"
-+    },
-+    {
-+      "name": "block-dirty-bitmap-merge",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "38"
-+    },
-+    {
-+      "name": "x-debug-block-dirty-bitmap-sha256",
-+      "ret-type": "39",
-+      "meta-type": "command",
-+      "arg-type": "37"
-+    },
-+    {
-+      "name": "blockdev-mirror",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "40"
-+    },
-+    {
-+      "name": "block_set_io_throttle",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "41"
-+    },
-+    {
-+      "name": "block-stream",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "42"
-+    },
-+    {
-+      "name": "block-job-set-speed",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "43"
-+    },
-+    {
-+      "name": "block-job-cancel",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "44"
-+    },
-+    {
-+      "name": "block-job-pause",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "45"
-+    },
-+    {
-+      "name": "block-job-resume",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "46"
-+    },
-+    {
-+      "name": "block-job-complete",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "47"
-+    },
-+    {
-+      "name": "block-job-dismiss",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "48"
-+    },
-+    {
-+      "name": "block-job-finalize",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "49"
-+    },
-+    {
-+      "name": "blockdev-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "50"
-+    },
-+    {
-+      "name": "x-blockdev-reopen",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "50"
-+    },
-+    {
-+      "name": "blockdev-del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "51"
-+    },
-+    {
-+      "name": "blockdev-create",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "52"
-+    },
-+    {
-+      "name": "blockdev-open-tray",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "53"
-+    },
-+    {
-+      "name": "blockdev-close-tray",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "54"
-+    },
-+    {
-+      "name": "blockdev-remove-medium",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "55"
-+    },
-+    {
-+      "name": "blockdev-insert-medium",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "56"
-+    },
-+    {
-+      "name": "blockdev-change-medium",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "57"
-+    },
-+    {
-+      "name": "BLOCK_IMAGE_CORRUPTED",
-+      "meta-type": "event",
-+      "arg-type": "58"
-+    },
-+    {
-+      "name": "BLOCK_IO_ERROR",
-+      "meta-type": "event",
-+      "arg-type": "59"
-+    },
-+    {
-+      "name": "BLOCK_JOB_COMPLETED",
-+      "meta-type": "event",
-+      "arg-type": "60"
-+    },
-+    {
-+      "name": "BLOCK_JOB_CANCELLED",
-+      "meta-type": "event",
-+      "arg-type": "61"
-+    },
-+    {
-+      "name": "BLOCK_JOB_ERROR",
-+      "meta-type": "event",
-+      "arg-type": "62"
-+    },
-+    {
-+      "name": "BLOCK_JOB_READY",
-+      "meta-type": "event",
-+      "arg-type": "63"
-+    },
-+    {
-+      "name": "BLOCK_JOB_PENDING",
-+      "meta-type": "event",
-+      "arg-type": "64"
-+    },
-+    {
-+      "name": "BLOCK_WRITE_THRESHOLD",
-+      "meta-type": "event",
-+      "arg-type": "65"
-+    },
-+    {
-+      "name": "block-set-write-threshold",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "66"
-+    },
-+    {
-+      "name": "x-blockdev-change",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "67"
-+    },
-+    {
-+      "name": "x-blockdev-set-iothread",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "68"
-+    },
-+    {
-+      "name": "JOB_STATUS_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "69"
-+    },
-+    {
-+      "name": "job-pause",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "70"
-+    },
-+    {
-+      "name": "job-resume",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "71"
-+    },
-+    {
-+      "name": "job-cancel",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "72"
-+    },
-+    {
-+      "name": "job-complete",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "73"
-+    },
-+    {
-+      "name": "job-dismiss",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "74"
-+    },
-+    {
-+      "name": "job-finalize",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "75"
-+    },
-+    {
-+      "name": "query-jobs",
-+      "ret-type": "[76]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-chardev",
-+      "ret-type": "[77]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-chardev-backends",
-+      "ret-type": "[78]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "ringbuf-write",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "79"
-+    },
-+    {
-+      "name": "ringbuf-read",
-+      "ret-type": "str",
-+      "meta-type": "command",
-+      "arg-type": "80"
-+    },
-+    {
-+      "name": "chardev-add",
-+      "ret-type": "82",
-+      "meta-type": "command",
-+      "arg-type": "81"
-+    },
-+    {
-+      "name": "chardev-change",
-+      "ret-type": "82",
-+      "meta-type": "command",
-+      "arg-type": "83"
-+    },
-+    {
-+      "name": "chardev-remove",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "84"
-+    },
-+    {
-+      "name": "chardev-send-break",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "85"
-+    },
-+    {
-+      "name": "VSERPORT_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "86"
-+    },
-+    {
-+      "name": "dump-guest-memory",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "87"
-+    },
-+    {
-+      "name": "query-dump",
-+      "ret-type": "88",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "DUMP_COMPLETED",
-+      "meta-type": "event",
-+      "arg-type": "89"
-+    },
-+    {
-+      "name": "query-dump-guest-memory-capability",
-+      "ret-type": "90",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "set_link",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "91"
-+    },
-+    {
-+      "name": "netdev_add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "92"
-+    },
-+    {
-+      "name": "netdev_del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "93"
-+    },
-+    {
-+      "name": "query-rx-filter",
-+      "ret-type": "[95]",
-+      "meta-type": "command",
-+      "arg-type": "94"
-+    },
-+    {
-+      "name": "NIC_RX_FILTER_CHANGED",
-+      "meta-type": "event",
-+      "arg-type": "96"
-+    },
-+    {
-+      "name": "announce-self",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "97"
-+    },
-+    {
-+      "name": "FAILOVER_NEGOTIATED",
-+      "meta-type": "event",
-+      "arg-type": "98"
-+    },
-+    {
-+      "name": "RDMA_GID_STATUS_CHANGED",
-+      "meta-type": "event",
-+      "arg-type": "99"
-+    },
-+    {
-+      "name": "query-rocker",
-+      "ret-type": "101",
-+      "meta-type": "command",
-+      "arg-type": "100"
-+    },
-+    {
-+      "name": "query-rocker-ports",
-+      "ret-type": "[103]",
-+      "meta-type": "command",
-+      "arg-type": "102"
-+    },
-+    {
-+      "name": "query-rocker-of-dpa-flows",
-+      "ret-type": "[105]",
-+      "meta-type": "command",
-+      "arg-type": "104"
-+    },
-+    {
-+      "name": "query-rocker-of-dpa-groups",
-+      "ret-type": "[107]",
-+      "meta-type": "command",
-+      "arg-type": "106"
-+    },
-+    {
-+      "name": "query-tpm-models",
-+      "ret-type": "[108]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-tpm-types",
-+      "ret-type": "[109]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-tpm",
-+      "ret-type": "[110]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "set_password",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "111"
-+    },
-+    {
-+      "name": "expire_password",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "112"
-+    },
-+    {
-+      "name": "screendump",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "113"
-+    },
-+    {
-+      "name": "query-vnc",
-+      "ret-type": "118",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-vnc-servers",
-+      "ret-type": "[119]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "change-vnc-password",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "120"
-+    },
-+    {
-+      "name": "VNC_CONNECTED",
-+      "meta-type": "event",
-+      "arg-type": "121"
-+    },
-+    {
-+      "name": "VNC_INITIALIZED",
-+      "meta-type": "event",
-+      "arg-type": "122"
-+    },
-+    {
-+      "name": "VNC_DISCONNECTED",
-+      "meta-type": "event",
-+      "arg-type": "123"
-+    },
-+    {
-+      "name": "query-mice",
-+      "ret-type": "[124]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "send-key",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "125"
-+    },
-+    {
-+      "name": "input-send-event",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "126"
-+    },
-+    {
-+      "name": "query-display-options",
-+      "ret-type": "127",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-migrate",
-+      "ret-type": "128",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate-set-capabilities",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "129"
-+    },
-+    {
-+      "name": "query-migrate-capabilities",
-+      "ret-type": "[130]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate-set-parameters",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "131"
-+    },
-+    {
-+      "name": "query-migrate-parameters",
-+      "ret-type": "132",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "client_migrate_info",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "133"
-+    },
-+    {
-+      "name": "migrate-start-postcopy",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "MIGRATION",
-+      "meta-type": "event",
-+      "arg-type": "134"
-+    },
-+    {
-+      "name": "MIGRATION_PASS",
-+      "meta-type": "event",
-+      "arg-type": "135"
-+    },
-+    {
-+      "name": "COLO_EXIT",
-+      "meta-type": "event",
-+      "arg-type": "136"
-+    },
-+    {
-+      "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": "137"
-+    },
-+    {
-+      "name": "migrate_set_downtime",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "138"
-+    },
-+    {
-+      "name": "migrate_set_speed",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "139"
-+    },
-+    {
-+      "name": "migrate-set-cache-size",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "140"
-+    },
-+    {
-+      "name": "query-migrate-cache-size",
-+      "ret-type": "int",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "141"
-+    },
-+    {
-+      "name": "migrate-incoming",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "142"
-+    },
-+    {
-+      "name": "xen-save-devices-state",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "143"
-+    },
-+    {
-+      "name": "xen-set-replication",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "144"
-+    },
-+    {
-+      "name": "query-xen-replication-status",
-+      "ret-type": "145",
-+      "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": "146",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "migrate-recover",
-+      "ret-type": "0",
-+      "allow-oob": true,
-+      "meta-type": "command",
-+      "arg-type": "147"
-+    },
-+    {
-+      "name": "migrate-pause",
-+      "ret-type": "0",
-+      "allow-oob": true,
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "UNPLUG_PRIMARY",
-+      "meta-type": "event",
-+      "arg-type": "148"
-+    },
-+    {
-+      "name": "transaction",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "149"
-+    },
-+    {
-+      "name": "trace-event-get-state",
-+      "ret-type": "[151]",
-+      "meta-type": "command",
-+      "arg-type": "150"
-+    },
-+    {
-+      "name": "trace-event-set-state",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "152"
-+    },
-+    {
-+      "name": "query-qmp-schema",
-+      "ret-type": "[153]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "qom-list",
-+      "ret-type": "[155]",
-+      "meta-type": "command",
-+      "arg-type": "154"
-+    },
-+    {
-+      "name": "qom-get",
-+      "ret-type": "any",
-+      "meta-type": "command",
-+      "arg-type": "156"
-+    },
-+    {
-+      "name": "qom-set",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "157"
-+    },
-+    {
-+      "name": "qom-list-types",
-+      "ret-type": "[159]",
-+      "meta-type": "command",
-+      "arg-type": "158"
-+    },
-+    {
-+      "name": "qom-list-properties",
-+      "ret-type": "[155]",
-+      "meta-type": "command",
-+      "arg-type": "160"
-+    },
-+    {
-+      "name": "object-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "161"
-+    },
-+    {
-+      "name": "object-del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "162"
-+    },
-+    {
-+      "name": "device-list-properties",
-+      "ret-type": "[155]",
-+      "meta-type": "command",
-+      "arg-type": "163"
-+    },
-+    {
-+      "name": "device_add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "164"
-+    },
-+    {
-+      "name": "device_del",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "165"
-+    },
-+    {
-+      "name": "DEVICE_DELETED",
-+      "meta-type": "event",
-+      "arg-type": "166"
-+    },
-+    {
-+      "name": "query-cpus",
-+      "ret-type": "[167]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-cpus-fast",
-+      "ret-type": "[168]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "cpu-add",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "169"
-+    },
-+    {
-+      "name": "query-machines",
-+      "ret-type": "[170]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-current-machine",
-+      "ret-type": "171",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-target",
-+      "ret-type": "172",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-memdev",
-+      "ret-type": "[173]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-hotpluggable-cpus",
-+      "ret-type": "[174]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "set-numa-node",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "175"
-+    },
-+    {
-+      "name": "query-cpu-model-expansion",
-+      "ret-type": "181",
-+      "meta-type": "command",
-+      "arg-type": "180"
-+    },
-+    {
-+      "name": "query-cpu-definitions",
-+      "ret-type": "[182]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "qmp_capabilities",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "183"
-+    },
-+    {
-+      "name": "query-version",
-+      "ret-type": "184",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-commands",
-+      "ret-type": "[185]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "add_client",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "186"
-+    },
-+    {
-+      "name": "query-name",
-+      "ret-type": "187",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-kvm",
-+      "ret-type": "188",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-uuid",
-+      "ret-type": "189",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-events",
-+      "ret-type": "[190]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-iothreads",
-+      "ret-type": "[191]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-balloon",
-+      "ret-type": "192",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "BALLOON_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "193"
-+    },
-+    {
-+      "name": "query-pci",
-+      "ret-type": "[194]",
-+      "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": "memsave",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "195"
-+    },
-+    {
-+      "name": "pmemsave",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "196"
-+    },
-+    {
-+      "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": "197"
-+    },
-+    {
-+      "name": "human-monitor-command",
-+      "ret-type": "str",
-+      "meta-type": "command",
-+      "arg-type": "198",
-+      "features": [
-+        "savevm-monitor-nodes"
-+      ]
-+    },
-+    {
-+      "name": "change",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "199"
-+    },
-+    {
-+      "name": "xen-set-global-dirty-log",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "200"
-+    },
-+    {
-+      "name": "getfd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "201"
-+    },
-+    {
-+      "name": "closefd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "202"
-+    },
-+    {
-+      "name": "query-memory-size-summary",
-+      "ret-type": "203",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "add-fd",
-+      "ret-type": "205",
-+      "meta-type": "command",
-+      "arg-type": "204"
-+    },
-+    {
-+      "name": "remove-fd",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "206"
-+    },
-+    {
-+      "name": "query-fdsets",
-+      "ret-type": "[207]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "query-command-line-options",
-+      "ret-type": "[209]",
-+      "meta-type": "command",
-+      "arg-type": "208"
-+    },
-+    {
-+      "name": "query-memory-devices",
-+      "ret-type": "[210]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "MEM_UNPLUG_ERROR",
-+      "meta-type": "event",
-+      "arg-type": "211"
-+    },
-+    {
-+      "name": "query-acpi-ospm-status",
-+      "ret-type": "[212]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "ACPI_DEVICE_OST",
-+      "meta-type": "event",
-+      "arg-type": "213"
-+    },
-+    {
-+      "name": "xen-load-devices-state",
-+      "ret-type": "0",
-+      "meta-type": "command",
-+      "arg-type": "214"
-+    },
-+    {
-+      "name": "query-vm-generation-id",
-+      "ret-type": "215",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "RTC_CHANGE",
-+      "meta-type": "event",
-+      "arg-type": "216"
-+    },
-+    {
-+      "name": "query-gic-capabilities",
-+      "ret-type": "[221]",
-+      "meta-type": "command",
-+      "arg-type": "0"
-+    },
-+    {
-+      "name": "0",
-+      "members": [
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "1",
-+      "members": [
-+        {
-+          "name": "running",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "singlestep",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "status",
-+          "type": "222"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "2",
-+      "members": [
-+        {
-+          "name": "guest",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "223"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "3",
-+      "members": [
-+        {
-+          "name": "guest",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "223"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "4",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "224"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "5",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "224"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "6",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "225"
-+        },
-+        {
-+          "name": "info",
-+          "default": null,
-+          "type": "226"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "7",
-+      "members": [
-+        {
-+          "name": "action",
-+          "type": "225"
-+        },
-+        {
-+          "name": "info",
-+          "default": null,
-+          "type": "226"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[8]",
-+      "element-type": "8",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "8",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "connected",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "9",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "10",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "11",
-+      "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": "12",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "13",
-+      "members": [
-+        {
-+          "name": "addr",
-+          "type": "227"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "14",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "writable",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "bitmap",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "15",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "mode",
-+          "default": null,
-+          "type": "228"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "16",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "tray-open",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "17",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "connected",
-+          "type": "bool"
-+        }
-+      ],
-+      "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": "229"
-+        },
-+        {
-+          "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": "id",
-+          "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": "[21]",
-+      "element-type": "21",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "21",
-+      "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": "33"
-+        },
-+        {
-+          "name": "tray_open",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "io-status",
-+          "default": null,
-+          "type": "230"
-+        },
-+        {
-+          "name": "dirty-bitmaps",
-+          "default": null,
-+          "type": "[231]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "22",
-+      "members": [
-+        {
-+          "name": "query-nodes",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[23]",
-+      "element-type": "23",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "23",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "qdev",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "stats",
-+          "type": "232"
-+        },
-+        {
-+          "name": "driver-specific",
-+          "default": null,
-+          "type": "233"
-+        },
-+        {
-+          "name": "parent",
-+          "default": null,
-+          "type": "23"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "23"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[24]",
-+      "element-type": "24",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "24",
-+      "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": "230"
-+        },
-+        {
-+          "name": "ready",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "status",
-+          "type": "234"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "error",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "25",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "password",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "26",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "27",
-+      "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": "28",
-+      "members": [
-+        {
-+          "name": "node",
-+          "type": "str"
-+        },
-+        {
-+          "name": "overlay",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "29",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "image-node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "backing-file",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "30",
-+      "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": "31",
-+      "members": [
-+        {
-+          "name": "job-id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "sync",
-+          "type": "236"
-+        },
-+        {
-+          "name": "speed",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "bitmap",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "bitmap-mode",
-+          "default": null,
-+          "type": "237"
-+        },
-+        {
-+          "name": "compress",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "on-source-error",
-+          "default": null,
-+          "type": "238"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "238"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "filter-node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "mode",
-+          "default": null,
-+          "type": "235"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "32",
-+      "members": [
-+        {
-+          "name": "job-id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "sync",
-+          "type": "236"
-+        },
-+        {
-+          "name": "speed",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "bitmap",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "bitmap-mode",
-+          "default": null,
-+          "type": "237"
-+        },
-+        {
-+          "name": "compress",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "on-source-error",
-+          "default": null,
-+          "type": "238"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "238"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "filter-node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[33]",
-+      "element-type": "33",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "33",
-+      "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": "239"
-+        },
-+        {
-+          "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": "240"
-+        },
-+        {
-+          "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": "241"
-+        },
-+        {
-+          "name": "write_threshold",
-+          "type": "int"
-+        },
-+        {
-+          "name": "dirty-bitmaps",
-+          "default": null,
-+          "type": "[231]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "34",
-+      "members": [
-+        {
-+          "name": "nodes",
-+          "type": "[242]"
-+        },
-+        {
-+          "name": "edges",
-+          "type": "[243]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "35",
-+      "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": "236"
-+        },
-+        {
-+          "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": "238"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "238"
-+        },
-+        {
-+          "name": "unmap",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "copy-mode",
-+          "default": null,
-+          "type": "244"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "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": "disabled",
-+          "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": "node",
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        },
-+        {
-+          "name": "bitmaps",
-+          "type": "[245]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "39",
-+      "members": [
-+        {
-+          "name": "sha256",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "40",
-+      "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": "236"
-+        },
-+        {
-+          "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": "238"
-+        },
-+        {
-+          "name": "on-target-error",
-+          "default": null,
-+          "type": "238"
-+        },
-+        {
-+          "name": "filter-node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "copy-mode",
-+          "default": null,
-+          "type": "244"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "41",
-+      "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": "42",
-+      "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": "238"
-+        },
-+        {
-+          "name": "auto-finalize",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auto-dismiss",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "43",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "44",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "45",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "46",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "47",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "48",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "49",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "50",
-+      "tag": "driver",
-+      "variants": [
-+        {
-+          "case": "blkdebug",
-+          "type": "249"
-+        },
-+        {
-+          "case": "blklogwrites",
-+          "type": "250"
-+        },
-+        {
-+          "case": "blkverify",
-+          "type": "251"
-+        },
-+        {
-+          "case": "blkreplay",
-+          "type": "252"
-+        },
-+        {
-+          "case": "bochs",
-+          "type": "253"
-+        },
-+        {
-+          "case": "cloop",
-+          "type": "253"
-+        },
-+        {
-+          "case": "compress",
-+          "type": "253"
-+        },
-+        {
-+          "case": "copy-on-read",
-+          "type": "253"
-+        },
-+        {
-+          "case": "dmg",
-+          "type": "253"
-+        },
-+        {
-+          "case": "file",
-+          "type": "254"
-+        },
-+        {
-+          "case": "ftp",
-+          "type": "255"
-+        },
-+        {
-+          "case": "ftps",
-+          "type": "256"
-+        },
-+        {
-+          "case": "gluster",
-+          "type": "257"
-+        },
-+        {
-+          "case": "host_cdrom",
-+          "type": "254"
-+        },
-+        {
-+          "case": "host_device",
-+          "type": "254"
-+        },
-+        {
-+          "case": "http",
-+          "type": "258"
-+        },
-+        {
-+          "case": "https",
-+          "type": "259"
-+        },
-+        {
-+          "case": "iscsi",
-+          "type": "260"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "261"
-+        },
-+        {
-+          "case": "nbd",
-+          "type": "262"
-+        },
-+        {
-+          "case": "nfs",
-+          "type": "263"
-+        },
-+        {
-+          "case": "null-aio",
-+          "type": "264"
-+        },
-+        {
-+          "case": "null-co",
-+          "type": "264"
-+        },
-+        {
-+          "case": "nvme",
-+          "type": "265"
-+        },
-+        {
-+          "case": "parallels",
-+          "type": "253"
-+        },
-+        {
-+          "case": "qcow2",
-+          "type": "266"
-+        },
-+        {
-+          "case": "qcow",
-+          "type": "267"
-+        },
-+        {
-+          "case": "qed",
-+          "type": "268"
-+        },
-+        {
-+          "case": "quorum",
-+          "type": "269"
-+        },
-+        {
-+          "case": "raw",
-+          "type": "270"
-+        },
-+        {
-+          "case": "rbd",
-+          "type": "271"
-+        },
-+        {
-+          "case": "replication",
-+          "type": "272"
-+        },
-+        {
-+          "case": "sheepdog",
-+          "type": "273"
-+        },
-+        {
-+          "case": "ssh",
-+          "type": "274"
-+        },
-+        {
-+          "case": "throttle",
-+          "type": "275"
-+        },
-+        {
-+          "case": "vdi",
-+          "type": "253"
-+        },
-+        {
-+          "case": "vhdx",
-+          "type": "253"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "268"
-+        },
-+        {
-+          "case": "vpc",
-+          "type": "253"
-+        },
-+        {
-+          "case": "vvfat",
-+          "type": "276"
-+        },
-+        {
-+          "case": "vxhs",
-+          "type": "277"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "246"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "discard",
-+          "default": null,
-+          "type": "247"
-+        },
-+        {
-+          "name": "cache",
-+          "default": null,
-+          "type": "248"
-+        },
-+        {
-+          "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": "239"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "51",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "52",
-+      "members": [
-+        {
-+          "name": "job-id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "options",
-+          "type": "278"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "53",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "54",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "55",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "56",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "57",
-+      "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": "279"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "58",
-+      "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": "59",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "node-name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "operation",
-+          "type": "280"
-+        },
-+        {
-+          "name": "action",
-+          "type": "281"
-+        },
-+        {
-+          "name": "nospace",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "60",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "282"
-+        },
-+        {
-+          "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": "61",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "282"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "len",
-+          "type": "int"
-+        },
-+        {
-+          "name": "offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "62",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "operation",
-+          "type": "280"
-+        },
-+        {
-+          "name": "action",
-+          "type": "281"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "63",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "282"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "len",
-+          "type": "int"
-+        },
-+        {
-+          "name": "offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "64",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "282"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "65",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "amount-exceeded",
-+          "type": "int"
-+        },
-+        {
-+          "name": "write-threshold",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "66",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "write-threshold",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "67",
-+      "members": [
-+        {
-+          "name": "parent",
-+          "type": "str"
-+        },
-+        {
-+          "name": "child",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "node",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "68",
-+      "members": [
-+        {
-+          "name": "node-name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "iothread",
-+          "type": "283"
-+        },
-+        {
-+          "name": "force",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "69",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "status",
-+          "type": "234"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "70",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "71",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "72",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "73",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "74",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "75",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[76]",
-+      "element-type": "76",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "76",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "282"
-+        },
-+        {
-+          "name": "status",
-+          "type": "234"
-+        },
-+        {
-+          "name": "current-progress",
-+          "type": "int"
-+        },
-+        {
-+          "name": "total-progress",
-+          "type": "int"
-+        },
-+        {
-+          "name": "error",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[77]",
-+      "element-type": "77",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "77",
-+      "members": [
-+        {
-+          "name": "label",
-+          "type": "str"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "frontend-open",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[78]",
-+      "element-type": "78",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "78",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "79",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "data",
-+          "type": "str"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "284"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "80",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "format",
-+          "default": null,
-+          "type": "284"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "str",
-+      "json-type": "string",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "81",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "backend",
-+          "type": "285"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "82",
-+      "members": [
-+        {
-+          "name": "pty",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "83",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "backend",
-+          "type": "285"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "84",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "85",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "86",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "open",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "87",
-+      "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": "286"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "88",
-+      "members": [
-+        {
-+          "name": "status",
-+          "type": "287"
-+        },
-+        {
-+          "name": "completed",
-+          "type": "int"
-+        },
-+        {
-+          "name": "total",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "89",
-+      "members": [
-+        {
-+          "name": "result",
-+          "type": "88"
-+        },
-+        {
-+          "name": "error",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "90",
-+      "members": [
-+        {
-+          "name": "formats",
-+          "type": "[286]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "91",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "up",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "92",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "93",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "94",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[95]",
-+      "element-type": "95",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "95",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "promiscuous",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "multicast",
-+          "type": "288"
-+        },
-+        {
-+          "name": "unicast",
-+          "type": "288"
-+        },
-+        {
-+          "name": "vlan",
-+          "type": "288"
-+        },
-+        {
-+          "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": "96",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "97",
-+      "members": [
-+        {
-+          "name": "initial",
-+          "type": "int"
-+        },
-+        {
-+          "name": "max",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rounds",
-+          "type": "int"
-+        },
-+        {
-+          "name": "step",
-+          "type": "int"
-+        },
-+        {
-+          "name": "interfaces",
-+          "default": null,
-+          "type": "[str]"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "98",
-+      "members": [
-+        {
-+          "name": "device-id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "99",
-+      "members": [
-+        {
-+          "name": "netdev",
-+          "type": "str"
-+        },
-+        {
-+          "name": "gid-status",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "subnet-prefix",
-+          "type": "int"
-+        },
-+        {
-+          "name": "interface-id",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "100",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "101",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "ports",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "102",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[103]",
-+      "element-type": "103",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "103",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "enabled",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "link-up",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "speed",
-+          "type": "int"
-+        },
-+        {
-+          "name": "duplex",
-+          "type": "289"
-+        },
-+        {
-+          "name": "autoneg",
-+          "type": "290"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "104",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "tbl-id",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[105]",
-+      "element-type": "105",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "105",
-+      "members": [
-+        {
-+          "name": "cookie",
-+          "type": "int"
-+        },
-+        {
-+          "name": "hits",
-+          "type": "int"
-+        },
-+        {
-+          "name": "key",
-+          "type": "291"
-+        },
-+        {
-+          "name": "mask",
-+          "type": "292"
-+        },
-+        {
-+          "name": "action",
-+          "type": "293"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "106",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[107]",
-+      "element-type": "107",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "107",
-+      "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": "[108]",
-+      "element-type": "108",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "108",
-+      "meta-type": "enum",
-+      "values": [
-+        "tpm-tis",
-+        "tpm-crb"
-+      ]
-+    },
-+    {
-+      "name": "[109]",
-+      "element-type": "109",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "109",
-+      "meta-type": "enum",
-+      "values": [
-+        "passthrough",
-+        "emulator"
-+      ]
-+    },
-+    {
-+      "name": "[110]",
-+      "element-type": "110",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "110",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "model",
-+          "type": "108"
-+        },
-+        {
-+          "name": "options",
-+          "type": "294"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "111",
-+      "members": [
-+        {
-+          "name": "protocol",
-+          "type": "str"
-+        },
-+        {
-+          "name": "password",
-+          "type": "str"
-+        },
-+        {
-+          "name": "connected",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "112",
-+      "members": [
-+        {
-+          "name": "protocol",
-+          "type": "str"
-+        },
-+        {
-+          "name": "time",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "113",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "head",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "118",
-+      "members": [
-+        {
-+          "name": "enabled",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "host",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "default": null,
-+          "type": "299"
-+        },
-+        {
-+          "name": "service",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "auth",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "clients",
-+          "default": null,
-+          "type": "[300]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[119]",
-+      "element-type": "119",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "119",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "type": "[301]"
-+        },
-+        {
-+          "name": "clients",
-+          "type": "[300]"
-+        },
-+        {
-+          "name": "auth",
-+          "type": "302"
-+        },
-+        {
-+          "name": "vencrypt",
-+          "default": null,
-+          "type": "303"
-+        },
-+        {
-+          "name": "display",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "120",
-+      "members": [
-+        {
-+          "name": "password",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "121",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "304"
-+        },
-+        {
-+          "name": "client",
-+          "type": "305"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "122",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "304"
-+        },
-+        {
-+          "name": "client",
-+          "type": "300"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "123",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "304"
-+        },
-+        {
-+          "name": "client",
-+          "type": "300"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[124]",
-+      "element-type": "124",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "124",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "index",
-+          "type": "int"
-+        },
-+        {
-+          "name": "current",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "absolute",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "125",
-+      "members": [
-+        {
-+          "name": "keys",
-+          "type": "[306]"
-+        },
-+        {
-+          "name": "hold-time",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "126",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "head",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "events",
-+          "type": "[307]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "127",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "gtk",
-+          "type": "310"
-+        },
-+        {
-+          "case": "curses",
-+          "type": "311"
-+        },
-+        {
-+          "case": "egl-headless",
-+          "type": "312"
-+        },
-+        {
-+          "case": "default",
-+          "type": "0"
-+        },
-+        {
-+          "case": "none",
-+          "type": "0"
-+        },
-+        {
-+          "case": "sdl",
-+          "type": "0"
-+        },
-+        {
-+          "case": "cocoa",
-+          "type": "0"
-+        },
-+        {
-+          "case": "spice-app",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "308"
-+        },
-+        {
-+          "name": "full-screen",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "window-close",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "gl",
-+          "default": null,
-+          "type": "309"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "128",
-+      "members": [
-+        {
-+          "name": "status",
-+          "default": null,
-+          "type": "313"
-+        },
-+        {
-+          "name": "ram",
-+          "default": null,
-+          "type": "314"
-+        },
-+        {
-+          "name": "disk",
-+          "default": null,
-+          "type": "314"
-+        },
-+        {
-+          "name": "xbzrle-cache",
-+          "default": null,
-+          "type": "315"
-+        },
-+        {
-+          "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": "316"
-+        },
-+        {
-+          "name": "socket-address",
-+          "default": null,
-+          "type": "[317]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "129",
-+      "members": [
-+        {
-+          "name": "capabilities",
-+          "type": "[130]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[130]",
-+      "element-type": "130",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "130",
-+      "members": [
-+        {
-+          "name": "capability",
-+          "type": "318"
-+        },
-+        {
-+          "name": "state",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "131",
-+      "members": [
-+        {
-+          "name": "announce-initial",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-max",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-rounds",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-step",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "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": "283"
-+        },
-+        {
-+          "name": "tls-hostname",
-+          "default": null,
-+          "type": "283"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "default": null,
-+          "type": "283"
-+        },
-+        {
-+          "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": "multifd-channels",
-+          "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": "132",
-+      "members": [
-+        {
-+          "name": "announce-initial",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-max",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-rounds",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "announce-step",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "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": "tls-authz",
-+          "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": "multifd-channels",
-+          "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": "133",
-+      "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": "134",
-+      "members": [
-+        {
-+          "name": "status",
-+          "type": "313"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "135",
-+      "members": [
-+        {
-+          "name": "pass",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "136",
-+      "members": [
-+        {
-+          "name": "mode",
-+          "type": "319"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "320"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "137",
-+      "members": [
-+        {
-+          "name": "state",
-+          "type": "313"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "138",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "number"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "139",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "140",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "int",
-+      "json-type": "int",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "141",
-+      "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": "142",
-+      "members": [
-+        {
-+          "name": "uri",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "143",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "live",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "144",
-+      "members": [
-+        {
-+          "name": "enable",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "primary",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "failover",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "145",
-+      "members": [
-+        {
-+          "name": "error",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "desc",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "146",
-+      "members": [
-+        {
-+          "name": "mode",
-+          "type": "319"
-+        },
-+        {
-+          "name": "last-mode",
-+          "type": "319"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "320"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "147",
-+      "members": [
-+        {
-+          "name": "uri",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "148",
-+      "members": [
-+        {
-+          "name": "device-id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "149",
-+      "members": [
-+        {
-+          "name": "actions",
-+          "type": "[321]"
-+        },
-+        {
-+          "name": "properties",
-+          "default": null,
-+          "type": "322"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "150",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "vcpu",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[151]",
-+      "element-type": "151",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "151",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "state",
-+          "type": "323"
-+        },
-+        {
-+          "name": "vcpu",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "152",
-+      "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": "[153]",
-+      "element-type": "153",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "153",
-+      "tag": "meta-type",
-+      "variants": [
-+        {
-+          "case": "builtin",
-+          "type": "325"
-+        },
-+        {
-+          "case": "enum",
-+          "type": "326"
-+        },
-+        {
-+          "case": "array",
-+          "type": "327"
-+        },
-+        {
-+          "case": "object",
-+          "type": "328"
-+        },
-+        {
-+          "case": "alternate",
-+          "type": "329"
-+        },
-+        {
-+          "case": "command",
-+          "type": "330"
-+        },
-+        {
-+          "case": "event",
-+          "type": "331"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "meta-type",
-+          "type": "324"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "154",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[155]",
-+      "element-type": "155",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "155",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "description",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "default-value",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "156",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "property",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "any",
-+      "json-type": "value",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "157",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "property",
-+          "type": "str"
-+        },
-+        {
-+          "name": "value",
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "158",
-+      "members": [
-+        {
-+          "name": "implements",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "abstract",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[159]",
-+      "element-type": "159",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "159",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "abstract",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "parent",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "160",
-+      "members": [
-+        {
-+          "name": "typename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "161",
-+      "members": [
-+        {
-+          "name": "qom-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "props",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "162",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "163",
-+      "members": [
-+        {
-+          "name": "typename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "164",
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "str"
-+        },
-+        {
-+          "name": "bus",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "165",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "166",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[167]",
-+      "element-type": "167",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "167",
-+      "tag": "arch",
-+      "variants": [
-+        {
-+          "case": "x86",
-+          "type": "334"
-+        },
-+        {
-+          "case": "sparc",
-+          "type": "335"
-+        },
-+        {
-+          "case": "ppc",
-+          "type": "336"
-+        },
-+        {
-+          "case": "mips",
-+          "type": "337"
-+        },
-+        {
-+          "case": "tricore",
-+          "type": "338"
-+        },
-+        {
-+          "case": "s390",
-+          "type": "339"
-+        },
-+        {
-+          "case": "riscv",
-+          "type": "340"
-+        },
-+        {
-+          "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": "332"
-+        },
-+        {
-+          "name": "arch",
-+          "type": "333"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[168]",
-+      "element-type": "168",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "168",
-+      "tag": "target",
-+      "variants": [
-+        {
-+          "case": "s390x",
-+          "type": "339"
-+        },
-+        {
-+          "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": "332"
-+        },
-+        {
-+          "name": "arch",
-+          "type": "333"
-+        },
-+        {
-+          "name": "target",
-+          "type": "341"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "169",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[170]",
-+      "element-type": "170",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "170",
-+      "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"
-+        },
-+        {
-+          "name": "numa-mem-supported",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "deprecated",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "default-cpu-type",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "171",
-+      "members": [
-+        {
-+          "name": "wakeup-suspend-support",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "172",
-+      "members": [
-+        {
-+          "name": "arch",
-+          "type": "341"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[173]",
-+      "element-type": "173",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "173",
-+      "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": "342"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[174]",
-+      "element-type": "174",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "174",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "vcpus-count",
-+          "type": "int"
-+        },
-+        {
-+          "name": "props",
-+          "type": "332"
-+        },
-+        {
-+          "name": "qom-path",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "175",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "node",
-+          "type": "344"
-+        },
-+        {
-+          "case": "dist",
-+          "type": "345"
-+        },
-+        {
-+          "case": "cpu",
-+          "type": "346"
-+        },
-+        {
-+          "case": "hmat-lb",
-+          "type": "347"
-+        },
-+        {
-+          "case": "hmat-cache",
-+          "type": "348"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "343"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "180",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "351"
-+        },
-+        {
-+          "name": "model",
-+          "type": "349"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "181",
-+      "members": [
-+        {
-+          "name": "model",
-+          "type": "349"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[182]",
-+      "element-type": "182",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "182",
-+      "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"
-+        },
-+        {
-+          "name": "alias-of",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "183",
-+      "members": [
-+        {
-+          "name": "enable",
-+          "default": null,
-+          "type": "[352]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "184",
-+      "members": [
-+        {
-+          "name": "qemu",
-+          "type": "353"
-+        },
-+        {
-+          "name": "package",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[185]",
-+      "element-type": "185",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "185",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "186",
-+      "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": "187",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "188",
-+      "members": [
-+        {
-+          "name": "enabled",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "present",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "189",
-+      "members": [
-+        {
-+          "name": "UUID",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[190]",
-+      "element-type": "190",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "190",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[191]",
-+      "element-type": "191",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "191",
-+      "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": "192",
-+      "members": [
-+        {
-+          "name": "actual",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "193",
-+      "members": [
-+        {
-+          "name": "actual",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[194]",
-+      "element-type": "194",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "194",
-+      "members": [
-+        {
-+          "name": "bus",
-+          "type": "int"
-+        },
-+        {
-+          "name": "devices",
-+          "type": "[354]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "195",
-+      "members": [
-+        {
-+          "name": "val",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cpu-index",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "196",
-+      "members": [
-+        {
-+          "name": "val",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "197",
-+      "members": [
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "198",
-+      "members": [
-+        {
-+          "name": "command-line",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cpu-index",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "199",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "target",
-+          "type": "str"
-+        },
-+        {
-+          "name": "arg",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "200",
-+      "members": [
-+        {
-+          "name": "enable",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "201",
-+      "members": [
-+        {
-+          "name": "fdname",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "202",
-+      "members": [
-+        {
-+          "name": "fdname",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "203",
-+      "members": [
-+        {
-+          "name": "base-memory",
-+          "type": "int"
-+        },
-+        {
-+          "name": "plugged-memory",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "204",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "opaque",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "205",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "fd",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "206",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "fd",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[207]",
-+      "element-type": "207",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "207",
-+      "members": [
-+        {
-+          "name": "fdset-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "fds",
-+          "type": "[355]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "208",
-+      "members": [
-+        {
-+          "name": "option",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[209]",
-+      "element-type": "209",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "209",
-+      "members": [
-+        {
-+          "name": "option",
-+          "type": "str"
-+        },
-+        {
-+          "name": "parameters",
-+          "type": "[356]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[210]",
-+      "element-type": "210",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "210",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "dimm",
-+          "type": "358"
-+        },
-+        {
-+          "case": "nvdimm",
-+          "type": "358"
-+        },
-+        {
-+          "case": "virtio-pmem",
-+          "type": "359"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "357"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "211",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "msg",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[212]",
-+      "element-type": "212",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "212",
-+      "members": [
-+        {
-+          "name": "device",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "slot",
-+          "type": "str"
-+        },
-+        {
-+          "name": "slot-type",
-+          "type": "360"
-+        },
-+        {
-+          "name": "source",
-+          "type": "int"
-+        },
-+        {
-+          "name": "status",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "213",
-+      "members": [
-+        {
-+          "name": "info",
-+          "type": "212"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "214",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "215",
-+      "members": [
-+        {
-+          "name": "guid",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "216",
-+      "members": [
-+        {
-+          "name": "offset",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[221]",
-+      "element-type": "221",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "221",
-+      "members": [
-+        {
-+          "name": "version",
-+          "type": "int"
-+        },
-+        {
-+          "name": "emulated",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "kernel",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "bool",
-+      "json-type": "boolean",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "222",
-+      "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": "223",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "host-error",
-+        "host-qmp-quit",
-+        "host-qmp-system-reset",
-+        "host-signal",
-+        "host-ui",
-+        "guest-shutdown",
-+        "guest-reset",
-+        "guest-panic",
-+        "subsystem-reset"
-+      ]
-+    },
-+    {
-+      "name": "224",
-+      "meta-type": "enum",
-+      "values": [
-+        "reset",
-+        "shutdown",
-+        "poweroff",
-+        "pause",
-+        "debug",
-+        "none",
-+        "inject-nmi"
-+      ]
-+    },
-+    {
-+      "name": "225",
-+      "meta-type": "enum",
-+      "values": [
-+        "pause",
-+        "poweroff",
-+        "run"
-+      ]
-+    },
-+    {
-+      "name": "226",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "hyper-v",
-+          "type": "363"
-+        },
-+        {
-+          "case": "s390",
-+          "type": "364"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "362"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "227",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "inet",
-+          "type": "366"
-+        },
-+        {
-+          "case": "unix",
-+          "type": "367"
-+        },
-+        {
-+          "case": "vsock",
-+          "type": "368"
-+        },
-+        {
-+          "case": "fd",
-+          "type": "369"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "365"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "228",
-+      "meta-type": "enum",
-+      "values": [
-+        "safe",
-+        "hard"
-+      ]
-+    },
-+    {
-+      "name": "229",
-+      "meta-type": "enum",
-+      "values": [
-+        "read",
-+        "write",
-+        "flush"
-+      ]
-+    },
-+    {
-+      "name": "[int]",
-+      "element-type": "int",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "230",
-+      "meta-type": "enum",
-+      "values": [
-+        "ok",
-+        "failed",
-+        "nospace"
-+      ]
-+    },
-+    {
-+      "name": "[231]",
-+      "element-type": "231",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "231",
-+      "members": [
-+        {
-+          "name": "name",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "count",
-+          "type": "int"
-+        },
-+        {
-+          "name": "granularity",
-+          "type": "int"
-+        },
-+        {
-+          "name": "recording",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "busy",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "status",
-+          "type": "370"
-+        },
-+        {
-+          "name": "persistent",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "inconsistent",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "232",
-+      "members": [
-+        {
-+          "name": "rd_bytes",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_bytes",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_bytes",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rd_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "flush_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rd_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "flush_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_total_time_ns",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_highest_offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rd_merged",
-+          "type": "int"
-+        },
-+        {
-+          "name": "wr_merged",
-+          "type": "int"
-+        },
-+        {
-+          "name": "unmap_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": "failed_unmap_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_rd_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_wr_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_flush_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "invalid_unmap_operations",
-+          "type": "int"
-+        },
-+        {
-+          "name": "account_invalid",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "account_failed",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "timed_stats",
-+          "type": "[371]"
-+        },
-+        {
-+          "name": "rd_latency_histogram",
-+          "default": null,
-+          "type": "372"
-+        },
-+        {
-+          "name": "wr_latency_histogram",
-+          "default": null,
-+          "type": "372"
-+        },
-+        {
-+          "name": "flush_latency_histogram",
-+          "default": null,
-+          "type": "372"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "233",
-+      "tag": "driver",
-+      "variants": [
-+        {
-+          "case": "file",
-+          "type": "373"
-+        },
-+        {
-+          "case": "host_device",
-+          "type": "373"
-+        },
-+        {
-+          "case": "blkdebug",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blklogwrites",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkreplay",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkverify",
-+          "type": "0"
-+        },
-+        {
-+          "case": "bochs",
-+          "type": "0"
-+        },
-+        {
-+          "case": "cloop",
-+          "type": "0"
-+        },
-+        {
-+          "case": "compress",
-+          "type": "0"
-+        },
-+        {
-+          "case": "copy-on-read",
-+          "type": "0"
-+        },
-+        {
-+          "case": "dmg",
-+          "type": "0"
-+        },
-+        {
-+          "case": "ftp",
-+          "type": "0"
-+        },
-+        {
-+          "case": "ftps",
-+          "type": "0"
-+        },
-+        {
-+          "case": "gluster",
-+          "type": "0"
-+        },
-+        {
-+          "case": "host_cdrom",
-+          "type": "0"
-+        },
-+        {
-+          "case": "http",
-+          "type": "0"
-+        },
-+        {
-+          "case": "https",
-+          "type": "0"
-+        },
-+        {
-+          "case": "iscsi",
-+          "type": "0"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "0"
-+        },
-+        {
-+          "case": "nbd",
-+          "type": "0"
-+        },
-+        {
-+          "case": "nfs",
-+          "type": "0"
-+        },
-+        {
-+          "case": "null-aio",
-+          "type": "0"
-+        },
-+        {
-+          "case": "null-co",
-+          "type": "0"
-+        },
-+        {
-+          "case": "nvme",
-+          "type": "0"
-+        },
-+        {
-+          "case": "parallels",
-+          "type": "0"
-+        },
-+        {
-+          "case": "qcow",
-+          "type": "0"
-+        },
-+        {
-+          "case": "qcow2",
-+          "type": "0"
-+        },
-+        {
-+          "case": "qed",
-+          "type": "0"
-+        },
-+        {
-+          "case": "quorum",
-+          "type": "0"
-+        },
-+        {
-+          "case": "raw",
-+          "type": "0"
-+        },
-+        {
-+          "case": "rbd",
-+          "type": "0"
-+        },
-+        {
-+          "case": "replication",
-+          "type": "0"
-+        },
-+        {
-+          "case": "sheepdog",
-+          "type": "0"
-+        },
-+        {
-+          "case": "ssh",
-+          "type": "0"
-+        },
-+        {
-+          "case": "throttle",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vdi",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vhdx",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vpc",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vvfat",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vxhs",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "246"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "234",
-+      "meta-type": "enum",
-+      "values": [
-+        "undefined",
-+        "created",
-+        "running",
-+        "paused",
-+        "ready",
-+        "standby",
-+        "waiting",
-+        "pending",
-+        "aborting",
-+        "concluded",
-+        "null"
-+      ]
-+    },
-+    {
-+      "name": "235",
-+      "meta-type": "enum",
-+      "values": [
-+        "existing",
-+        "absolute-paths"
-+      ]
-+    },
-+    {
-+      "name": "236",
-+      "meta-type": "enum",
-+      "values": [
-+        "top",
-+        "full",
-+        "none",
-+        "incremental",
-+        "bitmap"
-+      ]
-+    },
-+    {
-+      "name": "237",
-+      "meta-type": "enum",
-+      "values": [
-+        "on-success",
-+        "never",
-+        "always"
-+      ]
-+    },
-+    {
-+      "name": "238",
-+      "meta-type": "enum",
-+      "values": [
-+        "report",
-+        "ignore",
-+        "enospc",
-+        "stop",
-+        "auto"
-+      ]
-+    },
-+    {
-+      "name": "239",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "on",
-+        "unmap"
-+      ]
-+    },
-+    {
-+      "name": "240",
-+      "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": "[11]"
-+        },
-+        {
-+          "name": "backing-image",
-+          "default": null,
-+          "type": "240"
-+        },
-+        {
-+          "name": "format-specific",
-+          "default": null,
-+          "type": "374"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "241",
-+      "members": [
-+        {
-+          "name": "writeback",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "direct",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "no-flush",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[242]",
-+      "element-type": "242",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "242",
-+      "members": [
-+        {
-+          "name": "id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "type",
-+          "type": "375"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[243]",
-+      "element-type": "243",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "243",
-+      "members": [
-+        {
-+          "name": "parent",
-+          "type": "int"
-+        },
-+        {
-+          "name": "child",
-+          "type": "int"
-+        },
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "perm",
-+          "type": "[376]"
-+        },
-+        {
-+          "name": "shared-perm",
-+          "type": "[376]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "244",
-+      "meta-type": "enum",
-+      "values": [
-+        "background",
-+        "write-blocking"
-+      ]
-+    },
-+    {
-+      "name": "[245]",
-+      "element-type": "245",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "245",
-+      "members": [
-+        {
-+          "type": "str"
-+        },
-+        {
-+          "type": "37"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "246",
-+      "meta-type": "enum",
-+      "values": [
-+        "blkdebug",
-+        "blklogwrites",
-+        "blkreplay",
-+        "blkverify",
-+        "bochs",
-+        "cloop",
-+        "compress",
-+        "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": "247",
-+      "meta-type": "enum",
-+      "values": [
-+        "ignore",
-+        "unmap"
-+      ]
-+    },
-+    {
-+      "name": "248",
-+      "members": [
-+        {
-+          "name": "direct",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "no-flush",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "249",
-+      "members": [
-+        {
-+          "name": "image",
-+          "type": "377"
-+        },
-+        {
-+          "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": "[378]"
-+        },
-+        {
-+          "name": "set-state",
-+          "default": null,
-+          "type": "[379]"
-+        },
-+        {
-+          "name": "take-child-perms",
-+          "default": null,
-+          "type": "[376]"
-+        },
-+        {
-+          "name": "unshare-child-perms",
-+          "default": null,
-+          "type": "[376]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "250",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "log",
-+          "type": "377"
-+        },
-+        {
-+          "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": "251",
-+      "members": [
-+        {
-+          "name": "test",
-+          "type": "377"
-+        },
-+        {
-+          "name": "raw",
-+          "type": "377"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "252",
-+      "members": [
-+        {
-+          "name": "image",
-+          "type": "377"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "253",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "254",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "pr-manager",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "locking",
-+          "default": null,
-+          "type": "380"
-+        },
-+        {
-+          "name": "aio",
-+          "default": null,
-+          "type": "381"
-+        },
-+        {
-+          "name": "drop-cache",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "x-check-cache-dropped",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object",
-+      "features": [
-+        "dynamic-auto-read-only"
-+      ]
-+    },
-+    {
-+      "name": "255",
-+      "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": "256",
-+      "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": "257",
-+      "members": [
-+        {
-+          "name": "volume",
-+          "type": "str"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "type": "[317]"
-+        },
-+        {
-+          "name": "debug",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "258",
-+      "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": "259",
-+      "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": "260",
-+      "members": [
-+        {
-+          "name": "transport",
-+          "type": "382"
-+        },
-+        {
-+          "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": "383"
-+        },
-+        {
-+          "name": "timeout",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "261",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "262",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "317"
-+        },
-+        {
-+          "name": "export",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "x-dirty-bitmap",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "reconnect-delay",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "263",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "384"
-+        },
-+        {
-+          "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": "264",
-+      "members": [
-+        {
-+          "name": "size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "latency-ns",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "read-zeroes",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "265",
-+      "members": [
-+        {
-+          "name": "device",
-+          "type": "str"
-+        },
-+        {
-+          "name": "namespace",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "266",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "385"
-+        },
-+        {
-+          "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": "386"
-+        },
-+        {
-+          "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": "387"
-+        },
-+        {
-+          "name": "data-file",
-+          "default": null,
-+          "type": "377"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "267",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "385"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "388"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "268",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "backing",
-+          "default": null,
-+          "type": "385"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "269",
-+      "members": [
-+        {
-+          "name": "blkverify",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "children",
-+          "type": "[377]"
-+        },
-+        {
-+          "name": "vote-threshold",
-+          "type": "int"
-+        },
-+        {
-+          "name": "rewrite-corrupted",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "read-pattern",
-+          "default": null,
-+          "type": "389"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "270",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "offset",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "271",
-+      "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": "[390]"
-+        },
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "default": null,
-+          "type": "[391]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "272",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "mode",
-+          "type": "392"
-+        },
-+        {
-+          "name": "top-id",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "273",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "317"
-+        },
-+        {
-+          "name": "vdi",
-+          "type": "str"
-+        },
-+        {
-+          "name": "snap-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "tag",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "274",
-+      "members": [
-+        {
-+          "name": "server",
-+          "type": "393"
-+        },
-+        {
-+          "name": "path",
-+          "type": "str"
-+        },
-+        {
-+          "name": "user",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "host-key-check",
-+          "default": null,
-+          "type": "394"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "275",
-+      "members": [
-+        {
-+          "name": "throttle-group",
-+          "type": "str"
-+        },
-+        {
-+          "name": "file",
-+          "type": "377"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "276",
-+      "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": "277",
-+      "members": [
-+        {
-+          "name": "vdisk-id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "server",
-+          "type": "391"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "278",
-+      "tag": "driver",
-+      "variants": [
-+        {
-+          "case": "file",
-+          "type": "395"
-+        },
-+        {
-+          "case": "gluster",
-+          "type": "396"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "397"
-+        },
-+        {
-+          "case": "nfs",
-+          "type": "398"
-+        },
-+        {
-+          "case": "parallels",
-+          "type": "399"
-+        },
-+        {
-+          "case": "qcow",
-+          "type": "400"
-+        },
-+        {
-+          "case": "qcow2",
-+          "type": "401"
-+        },
-+        {
-+          "case": "qed",
-+          "type": "402"
-+        },
-+        {
-+          "case": "rbd",
-+          "type": "403"
-+        },
-+        {
-+          "case": "sheepdog",
-+          "type": "404"
-+        },
-+        {
-+          "case": "ssh",
-+          "type": "405"
-+        },
-+        {
-+          "case": "vdi",
-+          "type": "406"
-+        },
-+        {
-+          "case": "vhdx",
-+          "type": "407"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "408"
-+        },
-+        {
-+          "case": "vpc",
-+          "type": "409"
-+        },
-+        {
-+          "case": "blkdebug",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blklogwrites",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkreplay",
-+          "type": "0"
-+        },
-+        {
-+          "case": "blkverify",
-+          "type": "0"
-+        },
-+        {
-+          "case": "bochs",
-+          "type": "0"
-+        },
-+        {
-+          "case": "cloop",
-+          "type": "0"
-+        },
-+        {
-+          "case": "compress",
-+          "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": "vvfat",
-+          "type": "0"
-+        },
-+        {
-+          "case": "vxhs",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "driver",
-+          "type": "246"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "279",
-+      "meta-type": "enum",
-+      "values": [
-+        "retain",
-+        "read-only",
-+        "read-write"
-+      ]
-+    },
-+    {
-+      "name": "280",
-+      "meta-type": "enum",
-+      "values": [
-+        "read",
-+        "write"
-+      ]
-+    },
-+    {
-+      "name": "281",
-+      "meta-type": "enum",
-+      "values": [
-+        "ignore",
-+        "report",
-+        "stop"
-+      ]
-+    },
-+    {
-+      "name": "282",
-+      "meta-type": "enum",
-+      "values": [
-+        "commit",
-+        "stream",
-+        "mirror",
-+        "backup",
-+        "create"
-+      ]
-+    },
-+    {
-+      "name": "283",
-+      "members": [
-+        {
-+          "type": "str"
-+        },
-+        {
-+          "type": "null"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "284",
-+      "meta-type": "enum",
-+      "values": [
-+        "utf8",
-+        "base64"
-+      ]
-+    },
-+    {
-+      "name": "285",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "file",
-+          "type": "411"
-+        },
-+        {
-+          "case": "serial",
-+          "type": "412"
-+        },
-+        {
-+          "case": "parallel",
-+          "type": "412"
-+        },
-+        {
-+          "case": "pipe",
-+          "type": "412"
-+        },
-+        {
-+          "case": "socket",
-+          "type": "413"
-+        },
-+        {
-+          "case": "udp",
-+          "type": "414"
-+        },
-+        {
-+          "case": "pty",
-+          "type": "415"
-+        },
-+        {
-+          "case": "null",
-+          "type": "415"
-+        },
-+        {
-+          "case": "mux",
-+          "type": "416"
-+        },
-+        {
-+          "case": "msmouse",
-+          "type": "415"
-+        },
-+        {
-+          "case": "wctablet",
-+          "type": "415"
-+        },
-+        {
-+          "case": "braille",
-+          "type": "415"
-+        },
-+        {
-+          "case": "testdev",
-+          "type": "415"
-+        },
-+        {
-+          "case": "stdio",
-+          "type": "417"
-+        },
-+        {
-+          "case": "console",
-+          "type": "415"
-+        },
-+        {
-+          "case": "vc",
-+          "type": "420"
-+        },
-+        {
-+          "case": "ringbuf",
-+          "type": "421"
-+        },
-+        {
-+          "case": "memory",
-+          "type": "421"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "410"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "286",
-+      "meta-type": "enum",
-+      "values": [
-+        "elf",
-+        "kdump-zlib",
-+        "kdump-lzo",
-+        "kdump-snappy",
-+        "win-dmp"
-+      ]
-+    },
-+    {
-+      "name": "287",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "active",
-+        "completed",
-+        "failed"
-+      ]
-+    },
-+    {
-+      "name": "[286]",
-+      "element-type": "286",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "288",
-+      "meta-type": "enum",
-+      "values": [
-+        "normal",
-+        "none",
-+        "all"
-+      ]
-+    },
-+    {
-+      "name": "[str]",
-+      "element-type": "str",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "289",
-+      "meta-type": "enum",
-+      "values": [
-+        "half",
-+        "full"
-+      ]
-+    },
-+    {
-+      "name": "290",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "on"
-+      ]
-+    },
-+    {
-+      "name": "291",
-+      "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": "292",
-+      "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": "293",
-+      "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": "294",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "passthrough",
-+          "type": "423"
-+        },
-+        {
-+          "case": "emulator",
-+          "type": "424"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "422"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "299",
-+      "meta-type": "enum",
-+      "values": [
-+        "ipv4",
-+        "ipv6",
-+        "unix",
-+        "vsock",
-+        "unknown"
-+      ]
-+    },
-+    {
-+      "name": "[300]",
-+      "element-type": "300",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "300",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "299"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "x509_dname",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "sasl_username",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[301]",
-+      "element-type": "301",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "301",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "299"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auth",
-+          "type": "302"
-+        },
-+        {
-+          "name": "vencrypt",
-+          "default": null,
-+          "type": "303"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "302",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "vnc",
-+        "ra2",
-+        "ra2ne",
-+        "tight",
-+        "ultra",
-+        "tls",
-+        "vencrypt",
-+        "sasl"
-+      ]
-+    },
-+    {
-+      "name": "303",
-+      "meta-type": "enum",
-+      "values": [
-+        "plain",
-+        "tls-none",
-+        "x509-none",
-+        "tls-vnc",
-+        "x509-vnc",
-+        "tls-plain",
-+        "x509-plain",
-+        "tls-sasl",
-+        "x509-sasl"
-+      ]
-+    },
-+    {
-+      "name": "304",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "299"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        },
-+        {
-+          "name": "auth",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "305",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "service",
-+          "type": "str"
-+        },
-+        {
-+          "name": "family",
-+          "type": "299"
-+        },
-+        {
-+          "name": "websocket",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[306]",
-+      "element-type": "306",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "306",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "number",
-+          "type": "426"
-+        },
-+        {
-+          "case": "qcode",
-+          "type": "427"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "425"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[307]",
-+      "element-type": "307",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "307",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "key",
-+          "type": "429"
-+        },
-+        {
-+          "case": "btn",
-+          "type": "430"
-+        },
-+        {
-+          "case": "rel",
-+          "type": "431"
-+        },
-+        {
-+          "case": "abs",
-+          "type": "431"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "428"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "308",
-+      "meta-type": "enum",
-+      "values": [
-+        "default",
-+        "none",
-+        "gtk",
-+        "sdl",
-+        "egl-headless",
-+        "curses",
-+        "cocoa",
-+        "spice-app"
-+      ]
-+    },
-+    {
-+      "name": "309",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "on",
-+        "core",
-+        "es"
-+      ]
-+    },
-+    {
-+      "name": "310",
-+      "members": [
-+        {
-+          "name": "grab-on-hover",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "zoom-to-fit",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "311",
-+      "members": [
-+        {
-+          "name": "charset",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "312",
-+      "members": [
-+        {
-+          "name": "rendernode",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "313",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "setup",
-+        "cancelling",
-+        "cancelled",
-+        "active",
-+        "postcopy-active",
-+        "postcopy-paused",
-+        "postcopy-recover",
-+        "completed",
-+        "failed",
-+        "colo",
-+        "pre-switchover",
-+        "device",
-+        "wait-unplug"
-+      ]
-+    },
-+    {
-+      "name": "314",
-+      "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"
-+        },
-+        {
-+          "name": "pages-per-second",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "315",
-+      "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": "316",
-+      "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": "[317]",
-+      "element-type": "317",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "317",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "inet",
-+          "type": "393"
-+        },
-+        {
-+          "case": "unix",
-+          "type": "433"
-+        },
-+        {
-+          "case": "vsock",
-+          "type": "434"
-+        },
-+        {
-+          "case": "fd",
-+          "type": "435"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "432"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "318",
-+      "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",
-+        "multifd",
-+        "dirty-bitmaps",
-+        "postcopy-blocktime",
-+        "late-block-activate",
-+        "x-ignore-shared",
-+        "validate-uuid"
-+      ]
-+    },
-+    {
-+      "name": "319",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "primary",
-+        "secondary"
-+      ]
-+    },
-+    {
-+      "name": "320",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "request",
-+        "error",
-+        "processing"
-+      ]
-+    },
-+    {
-+      "name": "number",
-+      "json-type": "number",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "[321]",
-+      "element-type": "321",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "321",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "abort",
-+          "type": "437"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-add",
-+          "type": "438"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-remove",
-+          "type": "439"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-clear",
-+          "type": "439"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-enable",
-+          "type": "439"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-disable",
-+          "type": "439"
-+        },
-+        {
-+          "case": "block-dirty-bitmap-merge",
-+          "type": "440"
-+        },
-+        {
-+          "case": "blockdev-backup",
-+          "type": "441"
-+        },
-+        {
-+          "case": "blockdev-snapshot",
-+          "type": "442"
-+        },
-+        {
-+          "case": "blockdev-snapshot-internal-sync",
-+          "type": "443"
-+        },
-+        {
-+          "case": "blockdev-snapshot-sync",
-+          "type": "444"
-+        },
-+        {
-+          "case": "drive-backup",
-+          "type": "445"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "436"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "322",
-+      "members": [
-+        {
-+          "name": "completion-mode",
-+          "default": null,
-+          "type": "446"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "323",
-+      "meta-type": "enum",
-+      "values": [
-+        "unavailable",
-+        "disabled",
-+        "enabled"
-+      ]
-+    },
-+    {
-+      "name": "324",
-+      "meta-type": "enum",
-+      "values": [
-+        "builtin",
-+        "enum",
-+        "array",
-+        "object",
-+        "alternate",
-+        "command",
-+        "event"
-+      ]
-+    },
-+    {
-+      "name": "325",
-+      "members": [
-+        {
-+          "name": "json-type",
-+          "type": "447"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "326",
-+      "members": [
-+        {
-+          "name": "values",
-+          "type": "[str]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "327",
-+      "members": [
-+        {
-+          "name": "element-type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "328",
-+      "members": [
-+        {
-+          "name": "members",
-+          "type": "[448]"
-+        },
-+        {
-+          "name": "tag",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "variants",
-+          "default": null,
-+          "type": "[449]"
-+        },
-+        {
-+          "name": "features",
-+          "default": null,
-+          "type": "[str]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "329",
-+      "members": [
-+        {
-+          "name": "members",
-+          "type": "[450]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "330",
-+      "members": [
-+        {
-+          "name": "arg-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "ret-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "allow-oob",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "features",
-+          "default": null,
-+          "type": "[str]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "331",
-+      "members": [
-+        {
-+          "name": "arg-type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "332",
-+      "members": [
-+        {
-+          "name": "node-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "socket-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "die-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "core-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "thread-id",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "333",
-+      "meta-type": "enum",
-+      "values": [
-+        "x86",
-+        "sparc",
-+        "ppc",
-+        "mips",
-+        "tricore",
-+        "s390",
-+        "riscv",
-+        "other"
-+      ]
-+    },
-+    {
-+      "name": "334",
-+      "members": [
-+        {
-+          "name": "pc",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "335",
-+      "members": [
-+        {
-+          "name": "pc",
-+          "type": "int"
-+        },
-+        {
-+          "name": "npc",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "336",
-+      "members": [
-+        {
-+          "name": "nip",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "337",
-+      "members": [
-+        {
-+          "name": "PC",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "338",
-+      "members": [
-+        {
-+          "name": "PC",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "339",
-+      "members": [
-+        {
-+          "name": "cpu-state",
-+          "type": "451"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "340",
-+      "members": [
-+        {
-+          "name": "pc",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "341",
-+      "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": "342",
-+      "meta-type": "enum",
-+      "values": [
-+        "default",
-+        "preferred",
-+        "bind",
-+        "interleave"
-+      ]
-+    },
-+    {
-+      "name": "343",
-+      "meta-type": "enum",
-+      "values": [
-+        "node",
-+        "dist",
-+        "cpu",
-+        "hmat-lb",
-+        "hmat-cache"
-+      ]
-+    },
-+    {
-+      "name": "344",
-+      "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"
-+        },
-+        {
-+          "name": "initiator",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "345",
-+      "members": [
-+        {
-+          "name": "src",
-+          "type": "int"
-+        },
-+        {
-+          "name": "dst",
-+          "type": "int"
-+        },
-+        {
-+          "name": "val",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "346",
-+      "members": [
-+        {
-+          "name": "node-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "socket-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "die-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "core-id",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "thread-id",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "347",
-+      "members": [
-+        {
-+          "name": "initiator",
-+          "type": "int"
-+        },
-+        {
-+          "name": "target",
-+          "type": "int"
-+        },
-+        {
-+          "name": "hierarchy",
-+          "type": "452"
-+        },
-+        {
-+          "name": "data-type",
-+          "type": "453"
-+        },
-+        {
-+          "name": "latency",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "bandwidth",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "348",
-+      "members": [
-+        {
-+          "name": "node-id",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "level",
-+          "type": "int"
-+        },
-+        {
-+          "name": "associativity",
-+          "type": "454"
-+        },
-+        {
-+          "name": "policy",
-+          "type": "455"
-+        },
-+        {
-+          "name": "line",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "349",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "props",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "350",
-+      "meta-type": "enum",
-+      "values": [
-+        "incompatible",
-+        "identical",
-+        "superset",
-+        "subset"
-+      ]
-+    },
-+    {
-+      "name": "351",
-+      "meta-type": "enum",
-+      "values": [
-+        "static",
-+        "full"
-+      ]
-+    },
-+    {
-+      "name": "[352]",
-+      "element-type": "352",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "352",
-+      "meta-type": "enum",
-+      "values": [
-+        "oob"
-+      ]
-+    },
-+    {
-+      "name": "353",
-+      "members": [
-+        {
-+          "name": "major",
-+          "type": "int"
-+        },
-+        {
-+          "name": "minor",
-+          "type": "int"
-+        },
-+        {
-+          "name": "micro",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[354]",
-+      "element-type": "354",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "354",
-+      "members": [
-+        {
-+          "name": "bus",
-+          "type": "int"
-+        },
-+        {
-+          "name": "slot",
-+          "type": "int"
-+        },
-+        {
-+          "name": "function",
-+          "type": "int"
-+        },
-+        {
-+          "name": "class_info",
-+          "type": "456"
-+        },
-+        {
-+          "name": "id",
-+          "type": "457"
-+        },
-+        {
-+          "name": "irq",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "qdev_id",
-+          "type": "str"
-+        },
-+        {
-+          "name": "pci_bridge",
-+          "default": null,
-+          "type": "458"
-+        },
-+        {
-+          "name": "regions",
-+          "type": "[459]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[355]",
-+      "element-type": "355",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "355",
-+      "members": [
-+        {
-+          "name": "fd",
-+          "type": "int"
-+        },
-+        {
-+          "name": "opaque",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[356]",
-+      "element-type": "356",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "356",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "460"
-+        },
-+        {
-+          "name": "help",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "default",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "357",
-+      "meta-type": "enum",
-+      "values": [
-+        "dimm",
-+        "nvdimm",
-+        "virtio-pmem"
-+      ]
-+    },
-+    {
-+      "name": "358",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "461"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "359",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "462"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "360",
-+      "meta-type": "enum",
-+      "values": [
-+        "DIMM",
-+        "CPU"
-+      ]
-+    },
-+    {
-+      "name": "362",
-+      "meta-type": "enum",
-+      "values": [
-+        "hyper-v",
-+        "s390"
-+      ]
-+    },
-+    {
-+      "name": "363",
-+      "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": "364",
-+      "members": [
-+        {
-+          "name": "core",
-+          "type": "int"
-+        },
-+        {
-+          "name": "psw-mask",
-+          "type": "int"
-+        },
-+        {
-+          "name": "psw-addr",
-+          "type": "int"
-+        },
-+        {
-+          "name": "reason",
-+          "type": "463"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "365",
-+      "meta-type": "enum",
-+      "values": [
-+        "inet",
-+        "unix",
-+        "vsock",
-+        "fd"
-+      ]
-+    },
-+    {
-+      "name": "366",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "393"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "367",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "433"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "368",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "434"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "369",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "435"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "370",
-+      "meta-type": "enum",
-+      "values": [
-+        "active",
-+        "disabled",
-+        "frozen",
-+        "locked",
-+        "inconsistent"
-+      ]
-+    },
-+    {
-+      "name": "[371]",
-+      "element-type": "371",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "371",
-+      "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": "372",
-+      "members": [
-+        {
-+          "name": "boundaries",
-+          "type": "[int]"
-+        },
-+        {
-+          "name": "bins",
-+          "type": "[int]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "373",
-+      "members": [
-+        {
-+          "name": "discard-nb-ok",
-+          "type": "int"
-+        },
-+        {
-+          "name": "discard-nb-failed",
-+          "type": "int"
-+        },
-+        {
-+          "name": "discard-bytes-ok",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[11]",
-+      "element-type": "11",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "374",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "qcow2",
-+          "type": "465"
-+        },
-+        {
-+          "case": "vmdk",
-+          "type": "466"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "467"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "464"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "375",
-+      "meta-type": "enum",
-+      "values": [
-+        "block-backend",
-+        "block-job",
-+        "block-driver"
-+      ]
-+    },
-+    {
-+      "name": "[376]",
-+      "element-type": "376",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "376",
-+      "meta-type": "enum",
-+      "values": [
-+        "consistent-read",
-+        "write",
-+        "write-unchanged",
-+        "resize",
-+        "graph-mod"
-+      ]
-+    },
-+    {
-+      "name": "377",
-+      "members": [
-+        {
-+          "type": "50"
-+        },
-+        {
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "[378]",
-+      "element-type": "378",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "378",
-+      "members": [
-+        {
-+          "name": "event",
-+          "type": "468"
-+        },
-+        {
-+          "name": "state",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "iotype",
-+          "default": null,
-+          "type": "469"
-+        },
-+        {
-+          "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": "[379]",
-+      "element-type": "379",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "379",
-+      "members": [
-+        {
-+          "name": "event",
-+          "type": "468"
-+        },
-+        {
-+          "name": "state",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "new_state",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "380",
-+      "meta-type": "enum",
-+      "values": [
-+        "auto",
-+        "on",
-+        "off"
-+      ]
-+    },
-+    {
-+      "name": "381",
-+      "meta-type": "enum",
-+      "values": [
-+        "threads",
-+        "native"
-+      ]
-+    },
-+    {
-+      "name": "382",
-+      "meta-type": "enum",
-+      "values": [
-+        "tcp",
-+        "iser"
-+      ]
-+    },
-+    {
-+      "name": "383",
-+      "meta-type": "enum",
-+      "values": [
-+        "crc32c",
-+        "none",
-+        "crc32c-none",
-+        "none-crc32c"
-+      ]
-+    },
-+    {
-+      "name": "384",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "470"
-+        },
-+        {
-+          "name": "host",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "385",
-+      "members": [
-+        {
-+          "type": "50"
-+        },
-+        {
-+          "type": "str"
-+        },
-+        {
-+          "type": "null"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "386",
-+      "members": [
-+        {
-+          "type": "471"
-+        },
-+        {
-+          "type": "472"
-+        }
-+      ],
-+      "meta-type": "alternate"
-+    },
-+    {
-+      "name": "387",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "aes",
-+          "type": "474"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "475"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "473"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "388",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "aes",
-+          "type": "474"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "476"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[377]",
-+      "element-type": "377",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "389",
-+      "meta-type": "enum",
-+      "values": [
-+        "quorum",
-+        "fifo"
-+      ]
-+    },
-+    {
-+      "name": "[390]",
-+      "element-type": "390",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "390",
-+      "meta-type": "enum",
-+      "values": [
-+        "cephx",
-+        "none"
-+      ]
-+    },
-+    {
-+      "name": "[391]",
-+      "element-type": "391",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "391",
-+      "members": [
-+        {
-+          "name": "host",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "392",
-+      "meta-type": "enum",
-+      "values": [
-+        "primary",
-+        "secondary"
-+      ]
-+    },
-+    {
-+      "name": "393",
-+      "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"
-+        },
-+        {
-+          "name": "keep-alive",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "394",
-+      "tag": "mode",
-+      "variants": [
-+        {
-+          "case": "hash",
-+          "type": "478"
-+        },
-+        {
-+          "case": "none",
-+          "type": "0"
-+        },
-+        {
-+          "case": "known_hosts",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "mode",
-+          "type": "477"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "395",
-+      "members": [
-+        {
-+          "name": "filename",
-+          "type": "str"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "479"
-+        },
-+        {
-+          "name": "nocow",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "396",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "257"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "479"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "397",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "cipher-alg",
-+          "default": null,
-+          "type": "480"
-+        },
-+        {
-+          "name": "cipher-mode",
-+          "default": null,
-+          "type": "481"
-+        },
-+        {
-+          "name": "ivgen-alg",
-+          "default": null,
-+          "type": "482"
-+        },
-+        {
-+          "name": "ivgen-hash-alg",
-+          "default": null,
-+          "type": "483"
-+        },
-+        {
-+          "name": "hash-alg",
-+          "default": null,
-+          "type": "483"
-+        },
-+        {
-+          "name": "iter-time",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "479"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "398",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "263"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "399",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "400",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "484"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "401",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "data-file",
-+          "default": null,
-+          "type": "377"
-+        },
-+        {
-+          "name": "data-file-raw",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "version",
-+          "default": null,
-+          "type": "485"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "backing-fmt",
-+          "default": null,
-+          "type": "246"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "484"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "479"
-+        },
-+        {
-+          "name": "lazy-refcounts",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "refcount-bits",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "402",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "backing-fmt",
-+          "default": null,
-+          "type": "246"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "table-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "403",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "271"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "cluster-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "404",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "273"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "479"
-+        },
-+        {
-+          "name": "redundancy",
-+          "default": null,
-+          "type": "486"
-+        },
-+        {
-+          "name": "object-size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "405",
-+      "members": [
-+        {
-+          "name": "location",
-+          "type": "274"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "406",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "preallocation",
-+          "default": null,
-+          "type": "479"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "407",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "log-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "block-size",
-+          "default": null,
-+          "type": "int"
-+        },
-+        {
-+          "name": "subformat",
-+          "default": null,
-+          "type": "487"
-+        },
-+        {
-+          "name": "block-state-zero",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "408",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "extents",
-+          "default": null,
-+          "type": "[377]"
-+        },
-+        {
-+          "name": "subformat",
-+          "default": null,
-+          "type": "488"
-+        },
-+        {
-+          "name": "backing-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "adapter-type",
-+          "default": null,
-+          "type": "489"
-+        },
-+        {
-+          "name": "hwversion",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "zeroed-grain",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "409",
-+      "members": [
-+        {
-+          "name": "file",
-+          "type": "377"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "subformat",
-+          "default": null,
-+          "type": "490"
-+        },
-+        {
-+          "name": "force-size",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "null",
-+      "json-type": "null",
-+      "meta-type": "builtin"
-+    },
-+    {
-+      "name": "410",
-+      "meta-type": "enum",
-+      "values": [
-+        "file",
-+        "serial",
-+        "parallel",
-+        "pipe",
-+        "socket",
-+        "udp",
-+        "pty",
-+        "null",
-+        "mux",
-+        "msmouse",
-+        "wctablet",
-+        "braille",
-+        "testdev",
-+        "stdio",
-+        "console",
-+        "vc",
-+        "ringbuf",
-+        "memory"
-+      ]
-+    },
-+    {
-+      "name": "411",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "491"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "412",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "492"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "413",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "493"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "414",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "494"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "415",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "495"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "416",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "496"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "417",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "497"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "420",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "500"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "421",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "501"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "422",
-+      "meta-type": "enum",
-+      "values": [
-+        "passthrough",
-+        "emulator"
-+      ]
-+    },
-+    {
-+      "name": "423",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "502"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "424",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "503"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "425",
-+      "meta-type": "enum",
-+      "values": [
-+        "number",
-+        "qcode"
-+      ]
-+    },
-+    {
-+      "name": "426",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "427",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "504"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "428",
-+      "meta-type": "enum",
-+      "values": [
-+        "key",
-+        "btn",
-+        "rel",
-+        "abs"
-+      ]
-+    },
-+    {
-+      "name": "429",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "505"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "430",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "506"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "431",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "507"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "432",
-+      "meta-type": "enum",
-+      "values": [
-+        "inet",
-+        "unix",
-+        "vsock",
-+        "fd"
-+      ]
-+    },
-+    {
-+      "name": "433",
-+      "members": [
-+        {
-+          "name": "path",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "434",
-+      "members": [
-+        {
-+          "name": "cid",
-+          "type": "str"
-+        },
-+        {
-+          "name": "port",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "435",
-+      "members": [
-+        {
-+          "name": "str",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "436",
-+      "meta-type": "enum",
-+      "values": [
-+        "abort",
-+        "block-dirty-bitmap-add",
-+        "block-dirty-bitmap-remove",
-+        "block-dirty-bitmap-clear",
-+        "block-dirty-bitmap-enable",
-+        "block-dirty-bitmap-disable",
-+        "block-dirty-bitmap-merge",
-+        "blockdev-backup",
-+        "blockdev-snapshot",
-+        "blockdev-snapshot-internal-sync",
-+        "blockdev-snapshot-sync",
-+        "drive-backup"
-+      ]
-+    },
-+    {
-+      "name": "437",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "508"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "438",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "36"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "439",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "37"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "440",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "38"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "441",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "32"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "442",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "28"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "443",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "9"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "444",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "27"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "445",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "31"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "446",
-+      "meta-type": "enum",
-+      "values": [
-+        "individual",
-+        "grouped"
-+      ]
-+    },
-+    {
-+      "name": "447",
-+      "meta-type": "enum",
-+      "values": [
-+        "string",
-+        "number",
-+        "int",
-+        "boolean",
-+        "null",
-+        "object",
-+        "array",
-+        "value"
-+      ]
-+    },
-+    {
-+      "name": "[448]",
-+      "element-type": "448",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "448",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "default",
-+          "default": null,
-+          "type": "any"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[449]",
-+      "element-type": "449",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "449",
-+      "members": [
-+        {
-+          "name": "case",
-+          "type": "str"
-+        },
-+        {
-+          "name": "type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[450]",
-+      "element-type": "450",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "450",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "451",
-+      "meta-type": "enum",
-+      "values": [
-+        "uninitialized",
-+        "stopped",
-+        "check-stop",
-+        "operating",
-+        "load"
-+      ]
-+    },
-+    {
-+      "name": "452",
-+      "meta-type": "enum",
-+      "values": [
-+        "memory",
-+        "first-level",
-+        "second-level",
-+        "third-level"
-+      ]
-+    },
-+    {
-+      "name": "453",
-+      "meta-type": "enum",
-+      "values": [
-+        "access-latency",
-+        "read-latency",
-+        "write-latency",
-+        "access-bandwidth",
-+        "read-bandwidth",
-+        "write-bandwidth"
-+      ]
-+    },
-+    {
-+      "name": "454",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "direct",
-+        "complex"
-+      ]
-+    },
-+    {
-+      "name": "455",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "write-back",
-+        "write-through"
-+      ]
-+    },
-+    {
-+      "name": "456",
-+      "members": [
-+        {
-+          "name": "desc",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "class",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "457",
-+      "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": "458",
-+      "members": [
-+        {
-+          "name": "bus",
-+          "type": "509"
-+        },
-+        {
-+          "name": "devices",
-+          "default": null,
-+          "type": "[354]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[459]",
-+      "element-type": "459",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "459",
-+      "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": "460",
-+      "meta-type": "enum",
-+      "values": [
-+        "string",
-+        "boolean",
-+        "number",
-+        "size"
-+      ]
-+    },
-+    {
-+      "name": "461",
-+      "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": "462",
-+      "members": [
-+        {
-+          "name": "id",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "memaddr",
-+          "type": "int"
-+        },
-+        {
-+          "name": "size",
-+          "type": "int"
-+        },
-+        {
-+          "name": "memdev",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "463",
-+      "meta-type": "enum",
-+      "values": [
-+        "unknown",
-+        "disabled-wait",
-+        "extint-loop",
-+        "pgmint-loop",
-+        "opint-loop"
-+      ]
-+    },
-+    {
-+      "name": "464",
-+      "meta-type": "enum",
-+      "values": [
-+        "qcow2",
-+        "vmdk",
-+        "luks"
-+      ]
-+    },
-+    {
-+      "name": "465",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "510"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "466",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "511"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "467",
-+      "members": [
-+        {
-+          "name": "data",
-+          "type": "512"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "468",
-+      "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",
-+        "cluster_alloc_space",
-+        "none"
-+      ]
-+    },
-+    {
-+      "name": "469",
-+      "meta-type": "enum",
-+      "values": [
-+        "read",
-+        "write",
-+        "write-zeroes",
-+        "discard",
-+        "flush",
-+        "block-status"
-+      ]
-+    },
-+    {
-+      "name": "470",
-+      "meta-type": "enum",
-+      "values": [
-+        "inet"
-+      ]
-+    },
-+    {
-+      "name": "471",
-+      "members": [
-+        {
-+          "name": "template",
-+          "default": null,
-+          "type": "472"
-+        },
-+        {
-+          "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": "472",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "constant",
-+        "cached",
-+        "all"
-+      ]
-+    },
-+    {
-+      "name": "473",
-+      "meta-type": "enum",
-+      "values": [
-+        "aes",
-+        "luks"
-+      ]
-+    },
-+    {
-+      "name": "474",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "475",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "476",
-+      "meta-type": "enum",
-+      "values": [
-+        "aes"
-+      ]
-+    },
-+    {
-+      "name": "477",
-+      "meta-type": "enum",
-+      "values": [
-+        "none",
-+        "hash",
-+        "known_hosts"
-+      ]
-+    },
-+    {
-+      "name": "478",
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "513"
-+        },
-+        {
-+          "name": "hash",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "479",
-+      "meta-type": "enum",
-+      "values": [
-+        "off",
-+        "metadata",
-+        "falloc",
-+        "full"
-+      ]
-+    },
-+    {
-+      "name": "480",
-+      "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": "481",
-+      "meta-type": "enum",
-+      "values": [
-+        "ecb",
-+        "cbc",
-+        "xts",
-+        "ctr"
-+      ]
-+    },
-+    {
-+      "name": "482",
-+      "meta-type": "enum",
-+      "values": [
-+        "plain",
-+        "plain64",
-+        "essiv"
-+      ]
-+    },
-+    {
-+      "name": "483",
-+      "meta-type": "enum",
-+      "values": [
-+        "md5",
-+        "sha1",
-+        "sha224",
-+        "sha256",
-+        "sha384",
-+        "sha512",
-+        "ripemd160"
-+      ]
-+    },
-+    {
-+      "name": "484",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "qcow",
-+          "type": "474"
-+        },
-+        {
-+          "case": "luks",
-+          "type": "515"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "514"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "485",
-+      "meta-type": "enum",
-+      "values": [
-+        "v2",
-+        "v3"
-+      ]
-+    },
-+    {
-+      "name": "486",
-+      "tag": "type",
-+      "variants": [
-+        {
-+          "case": "full",
-+          "type": "517"
-+        },
-+        {
-+          "case": "erasure-coded",
-+          "type": "518"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "type",
-+          "type": "516"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "487",
-+      "meta-type": "enum",
-+      "values": [
-+        "dynamic",
-+        "fixed"
-+      ]
-+    },
-+    {
-+      "name": "488",
-+      "meta-type": "enum",
-+      "values": [
-+        "monolithicSparse",
-+        "monolithicFlat",
-+        "twoGbMaxExtentSparse",
-+        "twoGbMaxExtentFlat",
-+        "streamOptimized"
-+      ]
-+    },
-+    {
-+      "name": "489",
-+      "meta-type": "enum",
-+      "values": [
-+        "ide",
-+        "buslogic",
-+        "lsilogic",
-+        "legacyESX"
-+      ]
-+    },
-+    {
-+      "name": "490",
-+      "meta-type": "enum",
-+      "values": [
-+        "dynamic",
-+        "fixed"
-+      ]
-+    },
-+    {
-+      "name": "491",
-+      "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": "492",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "device",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "493",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "addr",
-+          "type": "227"
-+        },
-+        {
-+          "name": "tls-creds",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "tls-authz",
-+          "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": "494",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "remote",
-+          "type": "227"
-+        },
-+        {
-+          "name": "local",
-+          "default": null,
-+          "type": "227"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "495",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "496",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "chardev",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "497",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "signal",
-+          "default": null,
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "500",
-+      "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": "501",
-+      "members": [
-+        {
-+          "name": "logfile",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "logappend",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "size",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "502",
-+      "members": [
-+        {
-+          "name": "path",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "cancel-path",
-+          "default": null,
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "503",
-+      "members": [
-+        {
-+          "name": "chardev",
-+          "type": "str"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "504",
-+      "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": "505",
-+      "members": [
-+        {
-+          "name": "key",
-+          "type": "306"
-+        },
-+        {
-+          "name": "down",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "506",
-+      "members": [
-+        {
-+          "name": "button",
-+          "type": "519"
-+        },
-+        {
-+          "name": "down",
-+          "type": "bool"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "507",
-+      "members": [
-+        {
-+          "name": "axis",
-+          "type": "520"
-+        },
-+        {
-+          "name": "value",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "508",
-+      "members": [
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "509",
-+      "members": [
-+        {
-+          "name": "number",
-+          "type": "int"
-+        },
-+        {
-+          "name": "secondary",
-+          "type": "int"
-+        },
-+        {
-+          "name": "subordinate",
-+          "type": "int"
-+        },
-+        {
-+          "name": "io_range",
-+          "type": "521"
-+        },
-+        {
-+          "name": "memory_range",
-+          "type": "521"
-+        },
-+        {
-+          "name": "prefetchable_range",
-+          "type": "521"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "510",
-+      "members": [
-+        {
-+          "name": "compat",
-+          "type": "str"
-+        },
-+        {
-+          "name": "data-file",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "data-file-raw",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "lazy-refcounts",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "corrupt",
-+          "default": null,
-+          "type": "bool"
-+        },
-+        {
-+          "name": "refcount-bits",
-+          "type": "int"
-+        },
-+        {
-+          "name": "encrypt",
-+          "default": null,
-+          "type": "522"
-+        },
-+        {
-+          "name": "bitmaps",
-+          "default": null,
-+          "type": "[523]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "511",
-+      "members": [
-+        {
-+          "name": "create-type",
-+          "type": "str"
-+        },
-+        {
-+          "name": "cid",
-+          "type": "int"
-+        },
-+        {
-+          "name": "parent-cid",
-+          "type": "int"
-+        },
-+        {
-+          "name": "extents",
-+          "type": "[240]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "512",
-+      "members": [
-+        {
-+          "name": "cipher-alg",
-+          "type": "480"
-+        },
-+        {
-+          "name": "cipher-mode",
-+          "type": "481"
-+        },
-+        {
-+          "name": "ivgen-alg",
-+          "type": "482"
-+        },
-+        {
-+          "name": "ivgen-hash-alg",
-+          "default": null,
-+          "type": "483"
-+        },
-+        {
-+          "name": "hash-alg",
-+          "type": "483"
-+        },
-+        {
-+          "name": "payload-offset",
-+          "type": "int"
-+        },
-+        {
-+          "name": "master-key-iters",
-+          "type": "int"
-+        },
-+        {
-+          "name": "uuid",
-+          "type": "str"
-+        },
-+        {
-+          "name": "slots",
-+          "type": "[524]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "513",
-+      "meta-type": "enum",
-+      "values": [
-+        "md5",
-+        "sha1"
-+      ]
-+    },
-+    {
-+      "name": "514",
-+      "meta-type": "enum",
-+      "values": [
-+        "qcow",
-+        "luks"
-+      ]
-+    },
-+    {
-+      "name": "515",
-+      "members": [
-+        {
-+          "name": "key-secret",
-+          "default": null,
-+          "type": "str"
-+        },
-+        {
-+          "name": "cipher-alg",
-+          "default": null,
-+          "type": "480"
-+        },
-+        {
-+          "name": "cipher-mode",
-+          "default": null,
-+          "type": "481"
-+        },
-+        {
-+          "name": "ivgen-alg",
-+          "default": null,
-+          "type": "482"
-+        },
-+        {
-+          "name": "ivgen-hash-alg",
-+          "default": null,
-+          "type": "483"
-+        },
-+        {
-+          "name": "hash-alg",
-+          "default": null,
-+          "type": "483"
-+        },
-+        {
-+          "name": "iter-time",
-+          "default": null,
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "516",
-+      "meta-type": "enum",
-+      "values": [
-+        "full",
-+        "erasure-coded"
-+      ]
-+    },
-+    {
-+      "name": "517",
-+      "members": [
-+        {
-+          "name": "copies",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "518",
-+      "members": [
-+        {
-+          "name": "data-strips",
-+          "type": "int"
-+        },
-+        {
-+          "name": "parity-strips",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "519",
-+      "meta-type": "enum",
-+      "values": [
-+        "left",
-+        "middle",
-+        "right",
-+        "wheel-up",
-+        "wheel-down",
-+        "side",
-+        "extra"
-+      ]
-+    },
-+    {
-+      "name": "520",
-+      "meta-type": "enum",
-+      "values": [
-+        "x",
-+        "y"
-+      ]
-+    },
-+    {
-+      "name": "521",
-+      "members": [
-+        {
-+          "name": "base",
-+          "type": "int"
-+        },
-+        {
-+          "name": "limit",
-+          "type": "int"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "522",
-+      "tag": "format",
-+      "variants": [
-+        {
-+          "case": "luks",
-+          "type": "512"
-+        },
-+        {
-+          "case": "aes",
-+          "type": "0"
-+        }
-+      ],
-+      "members": [
-+        {
-+          "name": "format",
-+          "type": "473"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[523]",
-+      "element-type": "523",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "523",
-+      "members": [
-+        {
-+          "name": "name",
-+          "type": "str"
-+        },
-+        {
-+          "name": "granularity",
-+          "type": "int"
-+        },
-+        {
-+          "name": "flags",
-+          "type": "[525]"
-+        }
-+      ],
-+      "meta-type": "object"
-+    },
-+    {
-+      "name": "[240]",
-+      "element-type": "240",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "[524]",
-+      "element-type": "524",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "524",
-+      "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": "[525]",
-+      "element-type": "525",
-+      "meta-type": "array"
-+    },
-+    {
-+      "name": "525",
-+      "meta-type": "enum",
-+      "values": [
-+        "in-use",
-+        "auto"
-+      ]
-+    }
-+  ],
-+  "id": "libvirt-40"
-+}
-+
-+{
-+  "execute": "query-gic-capabilities",
-+  "id": "libvirt-41"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "emulated": true,
-+      "version": 3,
-+      "kernel": true
-+    },
-+    {
-+      "emulated": true,
-+      "version": 2,
-+      "kernel": false
-+    }
-+  ],
-+  "id": "libvirt-41"
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "full",
-+    "model": {
-+      "name": "host"
-+    }
-+  },
-+  "id": "libvirt-42"
-+}
-+
-+{
-+  "return": {
-+    "model": {
-+      "name": "host",
-+      "props": {
-+        "sve768": false,
-+        "sve128": false,
-+        "sve1024": false,
-+        "sve1280": false,
-+        "sve896": false,
-+        "sve256": false,
-+        "sve1536": false,
-+        "sve1792": false,
-+        "sve384": false,
-+        "sve": false,
-+        "sve2048": false,
-+        "kvm-no-adjvtime": false,
-+        "sve512": false,
-+        "aarch64": true,
-+        "pmu": true,
-+        "sve1920": false,
-+        "sve1152": false,
-+        "sve640": false,
-+        "sve1408": false,
-+        "sve1664": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-42"
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "full",
-+    "model": {
-+      "name": "host",
-+      "props": {
-+        "migratable": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-43"
-+}
-+
-+{
-+  "id": "libvirt-43",
-+  "error": {
-+    "class": "GenericError",
-+    "desc": "Parameter 'migratable' is unexpected"
-+  }
-+}
-+
-+{
-+  "execute": "qmp_capabilities",
-+  "id": "libvirt-1"
-+}
-+
-+{
-+  "return": {
-+  },
-+  "id": "libvirt-1"
-+}
-+
-+{
-+  "execute": "query-cpu-definitions",
-+  "id": "libvirt-2"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "name": "pxa262",
-+      "typename": "pxa262-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-a0",
-+      "typename": "pxa270-a0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1136",
-+      "typename": "arm1136-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a15",
-+      "typename": "cortex-a15-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa260",
-+      "typename": "pxa260-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1136-r2",
-+      "typename": "arm1136-r2-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa261",
-+      "typename": "pxa261-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa255",
-+      "typename": "pxa255-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a72",
-+      "typename": "cortex-a72-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m33",
-+      "typename": "cortex-m33-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm926",
-+      "typename": "arm926-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-r5f",
-+      "typename": "cortex-r5f-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm11mpcore",
-+      "typename": "arm11mpcore-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa250",
-+      "typename": "pxa250-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "ti925t",
-+      "typename": "ti925t-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a57",
-+      "typename": "cortex-a57-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "sa1110",
-+      "typename": "sa1110-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "host",
-+      "typename": "host-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1176",
-+      "typename": "arm1176-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a53",
-+      "typename": "cortex-a53-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "sa1100",
-+      "typename": "sa1100-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-c5",
-+      "typename": "pxa270-c5-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a9",
-+      "typename": "cortex-a9-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m7",
-+      "typename": "cortex-m7-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a8",
-+      "typename": "cortex-a8-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-a7",
-+      "typename": "cortex-a7-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-c0",
-+      "typename": "pxa270-c0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm1026",
-+      "typename": "arm1026-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-b1",
-+      "typename": "pxa270-b1-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m3",
-+      "typename": "cortex-m3-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "max",
-+      "typename": "max-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m4",
-+      "typename": "cortex-m4-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-b0",
-+      "typename": "pxa270-b0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "arm946",
-+      "typename": "arm946-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-m0",
-+      "typename": "cortex-m0-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "cortex-r5",
-+      "typename": "cortex-r5-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270-a1",
-+      "typename": "pxa270-a1-arm-cpu",
-+      "static": false
-+    },
-+    {
-+      "name": "pxa270",
-+      "typename": "pxa270-arm-cpu",
-+      "static": false
-+    }
-+  ],
-+  "id": "libvirt-2"
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "full",
-+    "model": {
-+      "name": "max"
-+    }
-+  },
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "return": {
-+    "model": {
-+      "name": "max",
-+      "props": {
-+        "sve768": true,
-+        "sve128": true,
-+        "sve1024": true,
-+        "sve1280": true,
-+        "sve896": true,
-+        "sve256": true,
-+        "sve1536": true,
-+        "sve1792": true,
-+        "sve384": true,
-+        "sve": true,
-+        "sve2048": true,
-+        "sve512": true,
-+        "aarch64": true,
-+        "pmu": true,
-+        "sve1920": true,
-+        "sve1152": true,
-+        "sve640": true,
-+        "sve1408": true,
-+        "sve1664": true
-+      }
-+    }
-+  },
-+  "id": "libvirt-3"
-+}
-+
-+{
-+  "execute": "query-cpu-model-expansion",
-+  "arguments": {
-+    "type": "full",
-+    "model": {
-+      "name": "max",
-+      "props": {
-+        "migratable": false
-+      }
-+    }
-+  },
-+  "id": "libvirt-4"
-+}
-+
-+{
-+  "id": "libvirt-4",
-+  "error": {
-+    "class": "GenericError",
-+    "desc": "Parameter 'migratable' is unexpected"
-+  }
-+}
-+
-+{
-+  "execute": "query-machines",
-+  "id": "libvirt-5"
-+}
-+
-+{
-+  "return": [
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "integratorcp",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "nuri",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an511",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an505",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "verdex",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-3.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "ast2500-evb",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "smdkc210",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "collie",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "sa1110-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "xlnx-versal-virt",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "imx25-pdk",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "none",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "spitz",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "musca-b1",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-pbx-a9",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-eb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "versatilepb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-pb-a8",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a8-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "emcraft-sf2",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.9",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "musicpal",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sbsa-ref",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a57-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "z2",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c5-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "akita",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.7",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "kzm",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "swift-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.8",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "realview-eb-mpcore",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm11mpcore-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "musca-a",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mcimx7d-sabre",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sx1",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "ti925t-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-4.2",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sx1-v1",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "ti925t-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.6",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "cubieboard",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-4.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "highbank",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-4.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "raspi2",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "raspi3",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "netduino2",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "terrier",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c5-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "n810",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm1136-r2-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mainstone",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c5-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "palmetto-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "tacoma-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "sabrelite",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "netduinoplus2",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "midway",
-+      "numa-mem-supported": false,
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "romulus-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "cheetah",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "ti925t-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "tosa",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "borzoi",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "pxa270-c0-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "versatileab",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm926-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "lm3s6965evb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "n800",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "arm1136-r2-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.10",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.11",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "connex",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-2.12",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 255,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "microbit",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "witherspoon-bmc",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "xilinx-zynq-a9",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an385",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "ast2600-evb",
-+      "numa-mem-supported": false,
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "vexpress-a9",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a9-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mps2-an521",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m33-arm-cpu",
-+      "cpu-max": 2,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "mcimx6ul-evk",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "vexpress-a15",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 4,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "xlnx-zcu102",
-+      "numa-mem-supported": false,
-+      "cpu-max": 6,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-5.0",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false,
-+      "alias": "virt"
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "virt-3.1",
-+      "numa-mem-supported": true,
-+      "default-cpu-type": "cortex-a15-arm-cpu",
-+      "cpu-max": 512,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "canon-a1100",
-+      "numa-mem-supported": false,
-+      "cpu-max": 1,
-+      "deprecated": false
-+    },
-+    {
-+      "hotpluggable-cpus": false,
-+      "name": "lm3s811evb",
-+      "numa-mem-supported": false,
-+      "default-cpu-type": "cortex-m3-arm-cpu",
-+      "cpu-max": 1,
-+      "deprecated": false
-+    }
-+  ],
-+  "id": "libvirt-5"
-+}
-diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-new file mode 100644
-index 0000000000..6b365dd75d
---- /dev/null
-+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
-@@ -0,0 +1,455 @@
-+<qemuCaps>
-+  <emulator>/usr/bin/qemu-system-aarch64</emulator>
-+  <qemuctime>0</qemuctime>
-+  <selfctime>0</selfctime>
-+  <selfvers>0</selfvers>
-+  <flag name='kvm'/>
-+  <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='no-acpi'/>
-+  <flag name='virtio-blk-pci.scsi'/>
-+  <flag name='scsi-disk.channel'/>
-+  <flag name='scsi-block'/>
-+  <flag name='hda-micro'/>
-+  <flag name='dump-guest-memory'/>
-+  <flag name='nec-usb-xhci'/>
-+  <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='vnc'/>
-+  <flag name='VGA'/>
-+  <flag name='cirrus-vga'/>
-+  <flag name='vmware-svga'/>
-+  <flag name='device-video-primary'/>
-+  <flag name='usb-serial'/>
-+  <flag name='nbd-server'/>
-+  <flag name='virtio-rng'/>
-+  <flag name='rng-random'/>
-+  <flag name='rng-egd'/>
-+  <flag name='megasas'/>
-+  <flag name='pci-bridge'/>
-+  <flag name='vfio-pci'/>
-+  <flag name='mem-merge'/>
-+  <flag name='drive-discard'/>
-+  <flag name='dmi-to-pci-bridge'/>
-+  <flag name='usb-storage'/>
-+  <flag name='usb-storage.removable'/>
-+  <flag name='virtio-mmio'/>
-+  <flag name='ich9-intel-hda'/>
-+  <flag name='boot-strict'/>
-+  <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='drive-iotune-max'/>
-+  <flag name='VGA.vgamem_mb'/>
-+  <flag name='vmware-svga.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='aarch64-off'/>
-+  <flag name='vhost-user-multiqueue'/>
-+  <flag name='migration-event'/>
-+  <flag name='gpex-pcihost'/>
-+  <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-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='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='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='pcie-root-port'/>
-+  <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='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='pl011'/>
-+  <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='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='usb-storage.werror'/>
-+  <flag name='egl-headless'/>
-+  <flag name='vfio-pci.display'/>
-+  <flag name='blockdev'/>
-+  <flag name='memory-backend-memfd'/>
-+  <flag name='memory-backend-memfd.hugetlb'/>
-+  <flag name='iothread.poll-max-ns'/>
-+  <flag name='egl-headless.rendernode'/>
-+  <flag name='memory-backend-file.align'/>
-+  <flag name='memory-backend-file.pmem'/>
-+  <flag name='scsi-disk.device_id'/>
-+  <flag name='virtio-pci-non-transitional'/>
-+  <flag name='overcommit'/>
-+  <flag name='query-current-machine'/>
-+  <flag name='machine.virt.iommu'/>
-+  <flag name='bitmap-merge'/>
-+  <flag name='nbd-bitmap'/>
-+  <flag name='bochs-display'/>
-+  <flag name='migration-file-drop-cache'/>
-+  <flag name='dbus-vmstate'/>
-+  <flag name='vhost-user-gpu'/>
-+  <flag name='ramfb'/>
-+  <flag name='arm-max-cpu'/>
-+  <flag name='blockdev-file-dynamic-auto-read-only'/>
-+  <flag name='savevm-monitor-nodes'/>
-+  <flag name='drive-nvme'/>
-+  <flag name='smp-dies'/>
-+  <flag name='virtio-net.failover'/>
-+  <version>4002050</version>
-+  <kvmVersion>0</kvmVersion>
-+  <microcodeVersion>61700241</microcodeVersion>
-+  <package>v4.2.0-1157-gadcd6e93b9</package>
-+  <arch>aarch64</arch>
-+  <hostCPU type='kvm' model='host' migratability='no'>
-+    <property name='sve768' type='boolean' value='false'/>
-+    <property name='sve128' type='boolean' value='false'/>
-+    <property name='sve1024' type='boolean' value='false'/>
-+    <property name='sve1280' type='boolean' value='false'/>
-+    <property name='sve896' type='boolean' value='false'/>
-+    <property name='sve256' type='boolean' value='false'/>
-+    <property name='sve1536' type='boolean' value='false'/>
-+    <property name='sve1792' type='boolean' value='false'/>
-+    <property name='sve384' type='boolean' value='false'/>
-+    <property name='sve' type='boolean' value='false'/>
-+    <property name='sve2048' type='boolean' value='false'/>
-+    <property name='kvm-no-adjvtime' type='boolean' value='false'/>
-+    <property name='sve512' type='boolean' value='false'/>
-+    <property name='aarch64' type='boolean' value='true'/>
-+    <property name='pmu' type='boolean' value='true'/>
-+    <property name='sve1920' type='boolean' value='false'/>
-+    <property name='sve1152' type='boolean' value='false'/>
-+    <property name='sve640' type='boolean' value='false'/>
-+    <property name='sve1408' type='boolean' value='false'/>
-+    <property name='sve1664' type='boolean' value='false'/>
-+  </hostCPU>
-+  <cpu type='kvm' name='pxa262' typename='pxa262-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/>
-+  <cpu type='kvm' name='arm1136' typename='arm1136-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a15' typename='cortex-a15-arm-cpu'/>
-+  <cpu type='kvm' name='pxa260' typename='pxa260-arm-cpu'/>
-+  <cpu type='kvm' name='arm1136-r2' typename='arm1136-r2-arm-cpu'/>
-+  <cpu type='kvm' name='pxa261' typename='pxa261-arm-cpu'/>
-+  <cpu type='kvm' name='pxa255' typename='pxa255-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a72' typename='cortex-a72-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-m33' typename='cortex-m33-arm-cpu'/>
-+  <cpu type='kvm' name='arm926' typename='arm926-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-r5f' typename='cortex-r5f-arm-cpu'/>
-+  <cpu type='kvm' name='arm11mpcore' typename='arm11mpcore-arm-cpu'/>
-+  <cpu type='kvm' name='pxa250' typename='pxa250-arm-cpu'/>
-+  <cpu type='kvm' name='ti925t' typename='ti925t-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a57' typename='cortex-a57-arm-cpu'/>
-+  <cpu type='kvm' name='sa1110' typename='sa1110-arm-cpu'/>
-+  <cpu type='kvm' name='host' typename='host-arm-cpu'/>
-+  <cpu type='kvm' name='arm1176' typename='arm1176-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a53' typename='cortex-a53-arm-cpu'/>
-+  <cpu type='kvm' name='sa1100' typename='sa1100-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270-c5' typename='pxa270-c5-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a9' typename='cortex-a9-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-m7' typename='cortex-m7-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a8' typename='cortex-a8-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-a7' typename='cortex-a7-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270-c0' typename='pxa270-c0-arm-cpu'/>
-+  <cpu type='kvm' name='arm1026' typename='arm1026-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270-b1' typename='pxa270-b1-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-m3' typename='cortex-m3-arm-cpu'/>
-+  <cpu type='kvm' name='max' typename='max-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-m4' typename='cortex-m4-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270-b0' typename='pxa270-b0-arm-cpu'/>
-+  <cpu type='kvm' name='arm946' typename='arm946-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-m0' typename='cortex-m0-arm-cpu'/>
-+  <cpu type='kvm' name='cortex-r5' typename='cortex-r5-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/>
-+  <cpu type='kvm' name='pxa270' typename='pxa270-arm-cpu'/>
-+  <machine type='kvm' name='integratorcp' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='kvm' name='nuri' maxCpus='2'/>
-+  <machine type='kvm' name='mps2-an511' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='kvm' name='mps2-an505' maxCpus='1' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='kvm' name='verdex' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='kvm' name='virt-3.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='ast2500-evb' maxCpus='2'/>
-+  <machine type='kvm' name='smdkc210' maxCpus='2'/>
-+  <machine type='kvm' name='collie' maxCpus='1' defaultCPU='sa1110-arm-cpu'/>
-+  <machine type='kvm' name='xlnx-versal-virt' maxCpus='2'/>
-+  <machine type='kvm' name='imx25-pdk' maxCpus='1'/>
-+  <machine type='kvm' name='spitz' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='kvm' name='musca-b1' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='kvm' name='realview-pbx-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='kvm' name='realview-eb' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='kvm' name='versatilepb' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='kvm' name='realview-pb-a8' maxCpus='1' defaultCPU='cortex-a8-arm-cpu'/>
-+  <machine type='kvm' name='emcraft-sf2' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='kvm' name='virt-2.9' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='musicpal' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='kvm' name='sbsa-ref' maxCpus='512' defaultCPU='cortex-a57-arm-cpu'/>
-+  <machine type='kvm' name='z2' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/>
-+  <machine type='kvm' name='akita' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='kvm' name='virt-2.7' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='kzm' maxCpus='1'/>
-+  <machine type='kvm' name='swift-bmc' maxCpus='2'/>
-+  <machine type='kvm' name='virt-2.8' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='realview-eb-mpcore' maxCpus='4' defaultCPU='arm11mpcore-arm-cpu'/>
-+  <machine type='kvm' name='musca-a' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='kvm' name='mcimx7d-sabre' maxCpus='2'/>
-+  <machine type='kvm' name='sx1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/>
-+  <machine type='kvm' name='virt-4.2' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='sx1-v1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/>
-+  <machine type='kvm' name='virt-2.6' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='cubieboard' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='kvm' name='virt-4.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='highbank' maxCpus='4'/>
-+  <machine type='kvm' name='virt-4.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='raspi2' maxCpus='4'/>
-+  <machine type='kvm' name='raspi3' maxCpus='4'/>
-+  <machine type='kvm' name='netduino2' maxCpus='1'/>
-+  <machine type='kvm' name='terrier' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/>
-+  <machine type='kvm' name='n810' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/>
-+  <machine type='kvm' name='mainstone' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/>
-+  <machine type='kvm' name='palmetto-bmc' maxCpus='2'/>
-+  <machine type='kvm' name='tacoma-bmc' maxCpus='2'/>
-+  <machine type='kvm' name='sabrelite' maxCpus='4'/>
-+  <machine type='kvm' name='netduinoplus2' maxCpus='1'/>
-+  <machine type='kvm' name='midway' maxCpus='4'/>
-+  <machine type='kvm' name='romulus-bmc' maxCpus='2'/>
-+  <machine type='kvm' name='cheetah' maxCpus='1' defaultCPU='ti925t-arm-cpu'/>
-+  <machine type='kvm' name='tosa' maxCpus='1'/>
-+  <machine type='kvm' name='borzoi' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='kvm' name='versatileab' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='kvm' name='lm3s6965evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='kvm' name='n800' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/>
-+  <machine type='kvm' name='virt-2.10' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='virt-2.11' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='connex' maxCpus='1'/>
-+  <machine type='kvm' name='virt-2.12' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='microbit' maxCpus='1'/>
-+  <machine type='kvm' name='witherspoon-bmc' maxCpus='2'/>
-+  <machine type='kvm' name='xilinx-zynq-a9' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='kvm' name='mps2-an385' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='kvm' name='ast2600-evb' maxCpus='2'/>
-+  <machine type='kvm' name='vexpress-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='kvm' name='mps2-an521' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='kvm' name='mcimx6ul-evk' maxCpus='1'/>
-+  <machine type='kvm' name='vexpress-a15' maxCpus='4' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='xlnx-zcu102' maxCpus='6'/>
-+  <machine type='kvm' name='virt-5.0' alias='virt' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='virt-3.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='kvm' name='canon-a1100' maxCpus='1'/>
-+  <machine type='kvm' name='lm3s811evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <hostCPU type='tcg' model='max' migratability='no'>
-+    <property name='sve768' type='boolean' value='true'/>
-+    <property name='sve128' type='boolean' value='true'/>
-+    <property name='sve1024' type='boolean' value='true'/>
-+    <property name='sve1280' type='boolean' value='true'/>
-+    <property name='sve896' type='boolean' value='true'/>
-+    <property name='sve256' type='boolean' value='true'/>
-+    <property name='sve1536' type='boolean' value='true'/>
-+    <property name='sve1792' type='boolean' value='true'/>
-+    <property name='sve384' type='boolean' value='true'/>
-+    <property name='sve' type='boolean' value='true'/>
-+    <property name='sve2048' type='boolean' value='true'/>
-+    <property name='sve512' type='boolean' value='true'/>
-+    <property name='aarch64' type='boolean' value='true'/>
-+    <property name='pmu' type='boolean' value='true'/>
-+    <property name='sve1920' type='boolean' value='true'/>
-+    <property name='sve1152' type='boolean' value='true'/>
-+    <property name='sve640' type='boolean' value='true'/>
-+    <property name='sve1408' type='boolean' value='true'/>
-+    <property name='sve1664' type='boolean' value='true'/>
-+  </hostCPU>
-+  <cpu type='tcg' name='pxa262' typename='pxa262-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/>
-+  <cpu type='tcg' name='arm1136' typename='arm1136-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a15' typename='cortex-a15-arm-cpu'/>
-+  <cpu type='tcg' name='pxa260' typename='pxa260-arm-cpu'/>
-+  <cpu type='tcg' name='arm1136-r2' typename='arm1136-r2-arm-cpu'/>
-+  <cpu type='tcg' name='pxa261' typename='pxa261-arm-cpu'/>
-+  <cpu type='tcg' name='pxa255' typename='pxa255-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a72' typename='cortex-a72-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-m33' typename='cortex-m33-arm-cpu'/>
-+  <cpu type='tcg' name='arm926' typename='arm926-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-r5f' typename='cortex-r5f-arm-cpu'/>
-+  <cpu type='tcg' name='arm11mpcore' typename='arm11mpcore-arm-cpu'/>
-+  <cpu type='tcg' name='pxa250' typename='pxa250-arm-cpu'/>
-+  <cpu type='tcg' name='ti925t' typename='ti925t-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a57' typename='cortex-a57-arm-cpu'/>
-+  <cpu type='tcg' name='sa1110' typename='sa1110-arm-cpu'/>
-+  <cpu type='tcg' name='host' typename='host-arm-cpu'/>
-+  <cpu type='tcg' name='arm1176' typename='arm1176-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a53' typename='cortex-a53-arm-cpu'/>
-+  <cpu type='tcg' name='sa1100' typename='sa1100-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270-c5' typename='pxa270-c5-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a9' typename='cortex-a9-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-m7' typename='cortex-m7-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a8' typename='cortex-a8-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-a7' typename='cortex-a7-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270-c0' typename='pxa270-c0-arm-cpu'/>
-+  <cpu type='tcg' name='arm1026' typename='arm1026-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270-b1' typename='pxa270-b1-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-m3' typename='cortex-m3-arm-cpu'/>
-+  <cpu type='tcg' name='max' typename='max-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-m4' typename='cortex-m4-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270-b0' typename='pxa270-b0-arm-cpu'/>
-+  <cpu type='tcg' name='arm946' typename='arm946-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-m0' typename='cortex-m0-arm-cpu'/>
-+  <cpu type='tcg' name='cortex-r5' typename='cortex-r5-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/>
-+  <cpu type='tcg' name='pxa270' typename='pxa270-arm-cpu'/>
-+  <machine type='tcg' name='integratorcp' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='tcg' name='nuri' maxCpus='2'/>
-+  <machine type='tcg' name='mps2-an511' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='tcg' name='mps2-an505' maxCpus='1' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='tcg' name='verdex' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='tcg' name='virt-3.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='ast2500-evb' maxCpus='2'/>
-+  <machine type='tcg' name='smdkc210' maxCpus='2'/>
-+  <machine type='tcg' name='collie' maxCpus='1' defaultCPU='sa1110-arm-cpu'/>
-+  <machine type='tcg' name='xlnx-versal-virt' maxCpus='2'/>
-+  <machine type='tcg' name='imx25-pdk' maxCpus='1'/>
-+  <machine type='tcg' name='spitz' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='tcg' name='musca-b1' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='tcg' name='realview-pbx-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='tcg' name='realview-eb' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='tcg' name='versatilepb' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='tcg' name='realview-pb-a8' maxCpus='1' defaultCPU='cortex-a8-arm-cpu'/>
-+  <machine type='tcg' name='emcraft-sf2' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='tcg' name='virt-2.9' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='musicpal' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='tcg' name='sbsa-ref' maxCpus='512' defaultCPU='cortex-a57-arm-cpu'/>
-+  <machine type='tcg' name='z2' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/>
-+  <machine type='tcg' name='akita' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='tcg' name='virt-2.7' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='kzm' maxCpus='1'/>
-+  <machine type='tcg' name='swift-bmc' maxCpus='2'/>
-+  <machine type='tcg' name='virt-2.8' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='realview-eb-mpcore' maxCpus='4' defaultCPU='arm11mpcore-arm-cpu'/>
-+  <machine type='tcg' name='musca-a' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='tcg' name='mcimx7d-sabre' maxCpus='2'/>
-+  <machine type='tcg' name='sx1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/>
-+  <machine type='tcg' name='virt-4.2' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='sx1-v1' maxCpus='1' defaultCPU='ti925t-arm-cpu'/>
-+  <machine type='tcg' name='virt-2.6' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='cubieboard' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='tcg' name='virt-4.0' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='highbank' maxCpus='4'/>
-+  <machine type='tcg' name='virt-4.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='raspi2' maxCpus='4'/>
-+  <machine type='tcg' name='raspi3' maxCpus='4'/>
-+  <machine type='tcg' name='netduino2' maxCpus='1'/>
-+  <machine type='tcg' name='terrier' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/>
-+  <machine type='tcg' name='n810' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/>
-+  <machine type='tcg' name='mainstone' maxCpus='1' defaultCPU='pxa270-c5-arm-cpu'/>
-+  <machine type='tcg' name='palmetto-bmc' maxCpus='2'/>
-+  <machine type='tcg' name='tacoma-bmc' maxCpus='2'/>
-+  <machine type='tcg' name='sabrelite' maxCpus='4'/>
-+  <machine type='tcg' name='netduinoplus2' maxCpus='1'/>
-+  <machine type='tcg' name='midway' maxCpus='4'/>
-+  <machine type='tcg' name='romulus-bmc' maxCpus='2'/>
-+  <machine type='tcg' name='cheetah' maxCpus='1' defaultCPU='ti925t-arm-cpu'/>
-+  <machine type='tcg' name='tosa' maxCpus='1'/>
-+  <machine type='tcg' name='borzoi' maxCpus='1' defaultCPU='pxa270-c0-arm-cpu'/>
-+  <machine type='tcg' name='versatileab' maxCpus='1' defaultCPU='arm926-arm-cpu'/>
-+  <machine type='tcg' name='lm3s6965evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='tcg' name='n800' maxCpus='1' defaultCPU='arm1136-r2-arm-cpu'/>
-+  <machine type='tcg' name='virt-2.10' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='virt-2.11' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='connex' maxCpus='1'/>
-+  <machine type='tcg' name='virt-2.12' maxCpus='255' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='microbit' maxCpus='1'/>
-+  <machine type='tcg' name='witherspoon-bmc' maxCpus='2'/>
-+  <machine type='tcg' name='xilinx-zynq-a9' maxCpus='1' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='tcg' name='mps2-an385' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <machine type='tcg' name='ast2600-evb' maxCpus='2'/>
-+  <machine type='tcg' name='vexpress-a9' maxCpus='4' defaultCPU='cortex-a9-arm-cpu'/>
-+  <machine type='tcg' name='mps2-an521' maxCpus='2' defaultCPU='cortex-m33-arm-cpu'/>
-+  <machine type='tcg' name='mcimx6ul-evk' maxCpus='1'/>
-+  <machine type='tcg' name='vexpress-a15' maxCpus='4' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='xlnx-zcu102' maxCpus='6'/>
-+  <machine type='tcg' name='virt-5.0' alias='virt' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='virt-3.1' maxCpus='512' defaultCPU='cortex-a15-arm-cpu'/>
-+  <machine type='tcg' name='canon-a1100' maxCpus='1'/>
-+  <machine type='tcg' name='lm3s811evb' maxCpus='1' defaultCPU='cortex-m3-arm-cpu'/>
-+  <gic version='3' kernel='yes' emulated='yes'/>
-+  <gic version='2' kernel='no' emulated='yes'/>
-+</qemuCaps>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-Add-test-case-for-the-armvtimer-timer.patch b/SOURCES/libvirt-tests-Add-test-case-for-the-armvtimer-timer.patch
deleted file mode 100644
index 4144d71..0000000
--- a/SOURCES/libvirt-tests-Add-test-case-for-the-armvtimer-timer.patch
+++ /dev/null
@@ -1,136 +0,0 @@
-From 18f28324129e34a486c5df049785d7ee04960f1d Mon Sep 17 00:00:00 2001
-Message-Id: <18f28324129e34a486c5df049785d7ee04960f1d@dist-git>
-From: Andrea Bolognani <abologna@redhat.com>
-Date: Fri, 14 Feb 2020 14:14:51 +0100
-Subject: [PATCH] tests: Add test case for the armvtimer timer
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 76121fc9c49d26c1ca4f596c3cac5c05eb02fc76)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1762634
-
-Signed-off-by: Andrea Bolognani <abologna@redhat.com>
-Message-Id: <20200214131451.707092-1-abologna@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../clock-timer-armvtimer.aarch64-latest.args | 32 +++++++++++++++++++
- .../clock-timer-armvtimer.xml                 | 27 ++++++++++++++++
- tests/qemuxml2argvtest.c                      |  2 ++
- .../clock-timer-armvtimer.aarch64-latest.xml  |  1 +
- tests/qemuxml2xmltest.c                       |  1 +
- 5 files changed, 63 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/clock-timer-armvtimer.aarch64-latest.args
- create mode 100644 tests/qemuxml2argvdata/clock-timer-armvtimer.xml
- create mode 120000 tests/qemuxml2xmloutdata/clock-timer-armvtimer.aarch64-latest.xml
-
-diff --git a/tests/qemuxml2argvdata/clock-timer-armvtimer.aarch64-latest.args b/tests/qemuxml2argvdata/clock-timer-armvtimer.aarch64-latest.args
-new file mode 100644
-index 0000000000..a1faa97b9f
---- /dev/null
-+++ b/tests/qemuxml2argvdata/clock-timer-armvtimer.aarch64-latest.args
-@@ -0,0 +1,32 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-guest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-aarch64 \
-+-name guest=guest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-guest/master-key.aes \
-+-machine virt,accel=kvm,usb=off,dump-guest-core=off,gic-version=3 \
-+-cpu host,kvm-no-adjvtime=on \
-+-m 4096 \
-+-overcommit mem-lock=off \
-+-smp 4,sockets=4,cores=1,threads=1 \
-+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
-+-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 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/clock-timer-armvtimer.xml b/tests/qemuxml2argvdata/clock-timer-armvtimer.xml
-new file mode 100644
-index 0000000000..295ab64d75
---- /dev/null
-+++ b/tests/qemuxml2argvdata/clock-timer-armvtimer.xml
-@@ -0,0 +1,27 @@
-+<domain type='kvm'>
-+  <name>guest</name>
-+  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
-+  <memory unit='KiB'>4194304</memory>
-+  <currentMemory unit='KiB'>4194304</currentMemory>
-+  <vcpu placement='static'>4</vcpu>
-+  <os>
-+    <type arch='aarch64' machine='virt'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <features>
-+    <gic version='3'/>
-+  </features>
-+  <cpu mode='host-passthrough' check='none'/>
-+  <clock offset='utc'>
-+    <timer name='armvtimer' tickpolicy='discard'/>
-+  </clock>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>destroy</on_crash>
-+  <devices>
-+    <emulator>/usr/bin/qemu-system-aarch64</emulator>
-+    <controller type='usb' index='0' model='none'/>
-+    <controller type='pci' index='0' model='pcie-root'/>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 4d26fe0b55..508dfee3fb 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -2721,6 +2721,8 @@ mymain(void)
-     /* SVE aarch64 CPU features work on modern QEMU */
-     DO_TEST_CAPS_ARCH_LATEST("aarch64-features-sve", "aarch64");
- 
-+    DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64");
-+
-     qemuTestSetHostArch(&driver, VIR_ARCH_NONE);
- 
-     DO_TEST("kvm-pit-delay", QEMU_CAPS_KVM_PIT_TICK_POLICY);
-diff --git a/tests/qemuxml2xmloutdata/clock-timer-armvtimer.aarch64-latest.xml b/tests/qemuxml2xmloutdata/clock-timer-armvtimer.aarch64-latest.xml
-new file mode 120000
-index 0000000000..4bfddd6573
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/clock-timer-armvtimer.aarch64-latest.xml
-@@ -0,0 +1 @@
-+../qemuxml2argvdata/clock-timer-armvtimer.xml
-\ No newline at end of file
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index e54c540ef6..6a8ae9f7eb 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -269,6 +269,7 @@ mymain(void)
-     DO_TEST("clock-catchup", QEMU_CAPS_KVM_PIT_TICK_POLICY);
-     DO_TEST("kvmclock", NONE);
-     DO_TEST("clock-timer-hyperv-rtc", NONE);
-+    DO_TEST_CAPS_ARCH_LATEST("clock-timer-armvtimer", "aarch64");
- 
-     DO_TEST("cpu-eoi-disabled", NONE);
-     DO_TEST("cpu-eoi-enabled", NONE);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-add-cgroup-nested-tests.patch b/SOURCES/libvirt-tests-add-cgroup-nested-tests.patch
deleted file mode 100644
index 300ab47..0000000
--- a/SOURCES/libvirt-tests-add-cgroup-nested-tests.patch
+++ /dev/null
@@ -1,226 +0,0 @@
-From c94691d796682d951ffa8fb3a4fcb985aae17d9b Mon Sep 17 00:00:00 2001
-Message-Id: <c94691d796682d951ffa8fb3a4fcb985aae17d9b@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:34:00 +0100
-Subject: [PATCH] tests: add cgroup nested tests
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 85099c339346e41f457234e8ad831841aef1d5e3)
-
-Conflicts:
-    tests/vircgrouptest.c
-        - missing upstream g_autofree rewrite
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <abf8f7673bd59c6e3d9b596cf9a86029b1f1e9c1.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/vircgroupdata/systemd-legacy.cgroups    | 12 +++
- tests/vircgroupdata/systemd-legacy.mounts     | 11 +++
- .../vircgroupdata/systemd-legacy.self.cgroup  | 11 +++
- tests/vircgroupdata/systemd-unified.cgroups   | 13 +++
- tests/vircgroupdata/systemd-unified.mounts    |  1 +
- .../vircgroupdata/systemd-unified.self.cgroup |  1 +
- tests/vircgrouptest.c                         | 82 +++++++++++++++++++
- 7 files changed, 131 insertions(+)
- create mode 100644 tests/vircgroupdata/systemd-legacy.cgroups
- create mode 100644 tests/vircgroupdata/systemd-legacy.mounts
- create mode 100644 tests/vircgroupdata/systemd-legacy.self.cgroup
- create mode 100644 tests/vircgroupdata/systemd-unified.cgroups
- create mode 100644 tests/vircgroupdata/systemd-unified.mounts
- create mode 100644 tests/vircgroupdata/systemd-unified.self.cgroup
-
-diff --git a/tests/vircgroupdata/systemd-legacy.cgroups b/tests/vircgroupdata/systemd-legacy.cgroups
-new file mode 100644
-index 0000000000..444354e3c8
---- /dev/null
-+++ b/tests/vircgroupdata/systemd-legacy.cgroups
-@@ -0,0 +1,12 @@
-+#subsys_name	hierarchy	num_cgroups	enabled
-+blkio       1       1       1
-+cpu         2       1       1
-+cpuacct     3       1       1
-+cpuset      4       1       1
-+devices     5       1       1
-+freezer     6       1       1
-+hugetlb     7       1       1
-+memory      8       1       1
-+net_cls     9       1       1
-+perf_event  10      1       1
-+pids        11      1       1
-diff --git a/tests/vircgroupdata/systemd-legacy.mounts b/tests/vircgroupdata/systemd-legacy.mounts
-new file mode 100644
-index 0000000000..23462e9e68
---- /dev/null
-+++ b/tests/vircgroupdata/systemd-legacy.mounts
-@@ -0,0 +1,11 @@
-+cgroup /not/really/sys/fs/cgroup/blkio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,blkio 0 0
-+cgroup /not/really/sys/fs/cgroup/cpu cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpu 0 0
-+cgroup /not/really/sys/fs/cgroup/cpuacct cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuacct 0 0
-+cgroup /not/really/sys/fs/cgroup/cpuset cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuset 0 0
-+cgroup /not/really/sys/fs/cgroup/devices cgroup rw,seclabel,nosuid,nodev,noexec,relatime,devices 0 0
-+cgroup /not/really/sys/fs/cgroup/freezer cgroup rw,seclabel,nosuid,nodev,noexec,relatime,freezer 0 0
-+cgroup /not/really/sys/fs/cgroup/hugetlb cgroup rw,seclabel,nosuid,nodev,noexec,relatime,hugetlb 0 0
-+cgroup /not/really/sys/fs/cgroup/memory cgroup rw,seclabel,nosuid,nodev,noexec,relatime,memory 0 0
-+cgroup /not/really/sys/fs/cgroup/net_cls cgroup rw,seclabel,nosuid,nodev,noexec,relatime,net_cls 0 0
-+cgroup /not/really/sys/fs/cgroup/perf_event cgroup rw,seclabel,nosuid,nodev,noexec,relatime,perf_event 0 0
-+cgroup /not/really/sys/fs/cgroup/pids cgroup rw,seclabel,nosuid,nodev,noexec,relatime,pids 0 0
-diff --git a/tests/vircgroupdata/systemd-legacy.self.cgroup b/tests/vircgroupdata/systemd-legacy.self.cgroup
-new file mode 100644
-index 0000000000..5c133a3c08
---- /dev/null
-+++ b/tests/vircgroupdata/systemd-legacy.self.cgroup
-@@ -0,0 +1,11 @@
-+1:blkio:/libvirt
-+2:cpu:/libvirt/emulator
-+3:cpuacct:/libvirt/emulator
-+4:cpuset:/libvirt/emulator
-+5:devices:/libvirt
-+6:freezer:/libvirt
-+7:hugetlb:/
-+8:memory:/libvirt
-+9:net_cls:/libvirt
-+10:perf_event:/libvirt
-+11:pids:/
-diff --git a/tests/vircgroupdata/systemd-unified.cgroups b/tests/vircgroupdata/systemd-unified.cgroups
-new file mode 100644
-index 0000000000..e0d8a3561c
---- /dev/null
-+++ b/tests/vircgroupdata/systemd-unified.cgroups
-@@ -0,0 +1,13 @@
-+#subsys_name	hierarchy	num_cgroups	enabled
-+cpuset      0       1       1
-+cpu         0       1       1
-+cpuacct     0       1       1
-+blkio       0       1       1
-+memory      0       1       1
-+devices     0       1       1
-+freezer     0       1       1
-+net_cls     0       1       1
-+perf_event  0       1       1
-+net_prio    0       1       1
-+hugetlb     0       1       1
-+pids        0       1       1
-diff --git a/tests/vircgroupdata/systemd-unified.mounts b/tests/vircgroupdata/systemd-unified.mounts
-new file mode 100644
-index 0000000000..8225f37f45
---- /dev/null
-+++ b/tests/vircgroupdata/systemd-unified.mounts
-@@ -0,0 +1 @@
-+cgroup2 /not/really/sys/fs/cgroup cgroup2 rw,seclabel,nosuid,nodev,noexec,relatime,nsdelegate 0 0
-diff --git a/tests/vircgroupdata/systemd-unified.self.cgroup b/tests/vircgroupdata/systemd-unified.self.cgroup
-new file mode 100644
-index 0000000000..6007ce7e18
---- /dev/null
-+++ b/tests/vircgroupdata/systemd-unified.self.cgroup
-@@ -0,0 +1 @@
-+0::/libvirt/emulator
-diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c
-index 2d6f52fb6e..aebb90c16c 100644
---- a/tests/vircgrouptest.c
-+++ b/tests/vircgrouptest.c
-@@ -636,6 +636,74 @@ static int testCgroupNewForSelfHybrid(const void *args G_GNUC_UNUSED)
- }
- 
- 
-+static int testCgroupNewForSelfSystemdLegacy(const void *args G_GNUC_UNUSED)
-+{
-+    virCgroupPtr cgroup = NULL;
-+    int ret = -1;
-+    const char *empty[VIR_CGROUP_CONTROLLER_LAST] = { 0 };
-+    const char *mounts[VIR_CGROUP_CONTROLLER_LAST] = {
-+        [VIR_CGROUP_CONTROLLER_BLKIO] = "/not/really/sys/fs/cgroup/blkio",
-+        [VIR_CGROUP_CONTROLLER_CPU] = "/not/really/sys/fs/cgroup/cpu",
-+        [VIR_CGROUP_CONTROLLER_CPUACCT] = "/not/really/sys/fs/cgroup/cpuacct",
-+        [VIR_CGROUP_CONTROLLER_CPUSET] = "/not/really/sys/fs/cgroup/cpuset",
-+        [VIR_CGROUP_CONTROLLER_DEVICES] = "/not/really/sys/fs/cgroup/devices",
-+        [VIR_CGROUP_CONTROLLER_FREEZER] = "/not/really/sys/fs/cgroup/freezer",
-+        [VIR_CGROUP_CONTROLLER_MEMORY] = "/not/really/sys/fs/cgroup/memory",
-+        [VIR_CGROUP_CONTROLLER_NET_CLS] = "/not/really/sys/fs/cgroup/net_cls",
-+        [VIR_CGROUP_CONTROLLER_PERF_EVENT] = "/not/really/sys/fs/cgroup/perf_event",
-+    };
-+    const char *placement[VIR_CGROUP_CONTROLLER_LAST] = {
-+        [VIR_CGROUP_CONTROLLER_BLKIO] = "",
-+        [VIR_CGROUP_CONTROLLER_CPU] = "",
-+        [VIR_CGROUP_CONTROLLER_CPUACCT] = "",
-+        [VIR_CGROUP_CONTROLLER_CPUSET] = "",
-+        [VIR_CGROUP_CONTROLLER_DEVICES] = "",
-+        [VIR_CGROUP_CONTROLLER_FREEZER] = "",
-+        [VIR_CGROUP_CONTROLLER_MEMORY] = "",
-+        [VIR_CGROUP_CONTROLLER_NET_CLS] = "",
-+        [VIR_CGROUP_CONTROLLER_PERF_EVENT] = "",
-+    };
-+
-+    if (virCgroupNewSelf(&cgroup) < 0) {
-+        fprintf(stderr, "Cannot create cgroup for self\n");
-+        goto cleanup;
-+    }
-+
-+    ret = validateCgroup(cgroup, "", mounts, empty, placement, NULL, NULL, 0);
-+
-+ cleanup:
-+    virCgroupFree(&cgroup);
-+    return ret;
-+}
-+
-+
-+static int testCgroupNewForSelfSystemdUnified(const void *args G_GNUC_UNUSED)
-+{
-+    virCgroupPtr cgroup = NULL;
-+    int ret = -1;
-+    const char *empty[VIR_CGROUP_CONTROLLER_LAST] = { 0 };
-+    unsigned int controllers =
-+        (1 << VIR_CGROUP_CONTROLLER_CPU) |
-+        (1 << VIR_CGROUP_CONTROLLER_CPUACCT) |
-+        (1 << VIR_CGROUP_CONTROLLER_MEMORY) |
-+        (1 << VIR_CGROUP_CONTROLLER_DEVICES) |
-+        (1 << VIR_CGROUP_CONTROLLER_BLKIO);
-+
-+    if (virCgroupNewSelf(&cgroup) < 0) {
-+        fprintf(stderr, "Cannot create cgroup for self\n");
-+        goto cleanup;
-+    }
-+
-+    ret = validateCgroup(cgroup, "", empty, empty, empty,
-+                         "/not/really/sys/fs/cgroup", "",
-+                         controllers);
-+
-+ cleanup:
-+    virCgroupFree(&cgroup);
-+    return ret;
-+}
-+
-+
- static int testCgroupAvailable(const void *args)
- {
-     bool got = virCgroupAvailable();
-@@ -1125,6 +1193,20 @@ mymain(void)
-         ret = -1;
-     cleanupFakeFS(fakerootdir);
- 
-+    fakerootdir = initFakeFS("legacy", "systemd-legacy");
-+    if (virTestRun("New cgroup for self (systemd-legacy)",
-+                   testCgroupNewForSelfSystemdLegacy, NULL) < 0) {
-+        ret = -1;
-+    }
-+    cleanupFakeFS(fakerootdir);
-+
-+    fakerootdir = initFakeFS("unified", "systemd-unified");
-+    if (virTestRun("New cgroup for self (systemd-unified)",
-+                   testCgroupNewForSelfSystemdUnified, NULL) < 0) {
-+        ret = -1;
-+    }
-+    cleanupFakeFS(fakerootdir);
-+
-     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-tests-add-host-CPU-data-files-for-validating-die_id.patch b/SOURCES/libvirt-tests-add-host-CPU-data-files-for-validating-die_id.patch
deleted file mode 100644
index 89c2fcb..0000000
--- a/SOURCES/libvirt-tests-add-host-CPU-data-files-for-validating-die_id.patch
+++ /dev/null
@@ -1,2131 +0,0 @@
-From a3d3caef97d7f052187fce8f81527f9a9f1ae74f Mon Sep 17 00:00:00 2001
-Message-Id: <a3d3caef97d7f052187fce8f81527f9a9f1ae74f@dist-git>
-From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
-Date: Mon, 3 Feb 2020 18:07:26 +0000
-Subject: [PATCH] tests: add host CPU data files for validating die_id
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Only Cascadelake-AP CPUs appear to report "die_id" values != 0 on Linux
-right now - AMD EPYC's don't report "die_id" (at least with Fedora 31
-kernel). Lacking access to Cascadelake-AP CPUs, this test data was from
-a Fedora 31 QEMU guest launched with
-
- -cpu qemu64 -smp sockets=2,dies=3,cores=2,threads=1
-
-Ideally we'd replace this data with some from a real machine reporting
-"die_id", to ensure we're not mislead by QEMU's impl.
-
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 0169f5ecdeefb91463b07a2e6f3f3b40c84323e9)
-
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785207
-BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1785211
-Message-Id: <20200203180726.2203691-6-berrange@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- .../linux-basic-dies/system/cpu               |   1 +
- .../linux-basic-dies/system/node              |   1 +
- .../vircaps-x86_64-basic-dies.xml             |  35 ++
- tests/vircaps2xmltest.c                       |   1 +
- .../cpu/cpu0/topology/core_cpus               |   1 +
- .../cpu/cpu0/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu0/topology/core_id  |   1 +
- .../cpu/cpu0/topology/core_siblings           |   1 +
- .../cpu/cpu0/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu0/topology/die_cpus |   1 +
- .../cpu/cpu0/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu0/topology/die_id   |   1 +
- .../cpu/cpu0/topology/package_cpus            |   1 +
- .../cpu/cpu0/topology/package_cpus_list       |   1 +
- .../cpu/cpu0/topology/physical_package_id     |   1 +
- .../cpu/cpu0/topology/thread_siblings         |   1 +
- .../cpu/cpu0/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu1/online            |   1 +
- .../cpu/cpu1/topology/core_cpus               |   1 +
- .../cpu/cpu1/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu1/topology/core_id  |   1 +
- .../cpu/cpu1/topology/core_siblings           |   1 +
- .../cpu/cpu1/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu1/topology/die_cpus |   1 +
- .../cpu/cpu1/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu1/topology/die_id   |   1 +
- .../cpu/cpu1/topology/package_cpus            |   1 +
- .../cpu/cpu1/topology/package_cpus_list       |   1 +
- .../cpu/cpu1/topology/physical_package_id     |   1 +
- .../cpu/cpu1/topology/thread_siblings         |   1 +
- .../cpu/cpu1/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu10/online           |   1 +
- .../cpu/cpu10/topology/core_cpus              |   1 +
- .../cpu/cpu10/topology/core_cpus_list         |   1 +
- .../linux-with-die/cpu/cpu10/topology/core_id |   1 +
- .../cpu/cpu10/topology/core_siblings          |   1 +
- .../cpu/cpu10/topology/core_siblings_list     |   1 +
- .../cpu/cpu10/topology/die_cpus               |   1 +
- .../cpu/cpu10/topology/die_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu10/topology/die_id  |   1 +
- .../cpu/cpu10/topology/package_cpus           |   1 +
- .../cpu/cpu10/topology/package_cpus_list      |   1 +
- .../cpu/cpu10/topology/physical_package_id    |   1 +
- .../cpu/cpu10/topology/thread_siblings        |   1 +
- .../cpu/cpu10/topology/thread_siblings_list   |   1 +
- .../linux-with-die/cpu/cpu11/online           |   1 +
- .../cpu/cpu11/topology/core_cpus              |   1 +
- .../cpu/cpu11/topology/core_cpus_list         |   1 +
- .../linux-with-die/cpu/cpu11/topology/core_id |   1 +
- .../cpu/cpu11/topology/core_siblings          |   1 +
- .../cpu/cpu11/topology/core_siblings_list     |   1 +
- .../cpu/cpu11/topology/die_cpus               |   1 +
- .../cpu/cpu11/topology/die_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu11/topology/die_id  |   1 +
- .../cpu/cpu11/topology/package_cpus           |   1 +
- .../cpu/cpu11/topology/package_cpus_list      |   1 +
- .../cpu/cpu11/topology/physical_package_id    |   1 +
- .../cpu/cpu11/topology/thread_siblings        |   1 +
- .../cpu/cpu11/topology/thread_siblings_list   |   1 +
- .../linux-with-die/cpu/cpu2/online            |   1 +
- .../cpu/cpu2/topology/core_cpus               |   1 +
- .../cpu/cpu2/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu2/topology/core_id  |   1 +
- .../cpu/cpu2/topology/core_siblings           |   1 +
- .../cpu/cpu2/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu2/topology/die_cpus |   1 +
- .../cpu/cpu2/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu2/topology/die_id   |   1 +
- .../cpu/cpu2/topology/package_cpus            |   1 +
- .../cpu/cpu2/topology/package_cpus_list       |   1 +
- .../cpu/cpu2/topology/physical_package_id     |   1 +
- .../cpu/cpu2/topology/thread_siblings         |   1 +
- .../cpu/cpu2/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu3/online            |   1 +
- .../cpu/cpu3/topology/core_cpus               |   1 +
- .../cpu/cpu3/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu3/topology/core_id  |   1 +
- .../cpu/cpu3/topology/core_siblings           |   1 +
- .../cpu/cpu3/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu3/topology/die_cpus |   1 +
- .../cpu/cpu3/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu3/topology/die_id   |   1 +
- .../cpu/cpu3/topology/package_cpus            |   1 +
- .../cpu/cpu3/topology/package_cpus_list       |   1 +
- .../cpu/cpu3/topology/physical_package_id     |   1 +
- .../cpu/cpu3/topology/thread_siblings         |   1 +
- .../cpu/cpu3/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu4/online            |   1 +
- .../cpu/cpu4/topology/core_cpus               |   1 +
- .../cpu/cpu4/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu4/topology/core_id  |   1 +
- .../cpu/cpu4/topology/core_siblings           |   1 +
- .../cpu/cpu4/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu4/topology/die_cpus |   1 +
- .../cpu/cpu4/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu4/topology/die_id   |   1 +
- .../cpu/cpu4/topology/package_cpus            |   1 +
- .../cpu/cpu4/topology/package_cpus_list       |   1 +
- .../cpu/cpu4/topology/physical_package_id     |   1 +
- .../cpu/cpu4/topology/thread_siblings         |   1 +
- .../cpu/cpu4/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu5/online            |   1 +
- .../cpu/cpu5/topology/core_cpus               |   1 +
- .../cpu/cpu5/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu5/topology/core_id  |   1 +
- .../cpu/cpu5/topology/core_siblings           |   1 +
- .../cpu/cpu5/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu5/topology/die_cpus |   1 +
- .../cpu/cpu5/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu5/topology/die_id   |   1 +
- .../cpu/cpu5/topology/package_cpus            |   1 +
- .../cpu/cpu5/topology/package_cpus_list       |   1 +
- .../cpu/cpu5/topology/physical_package_id     |   1 +
- .../cpu/cpu5/topology/thread_siblings         |   1 +
- .../cpu/cpu5/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu6/online            |   1 +
- .../cpu/cpu6/topology/core_cpus               |   1 +
- .../cpu/cpu6/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu6/topology/core_id  |   1 +
- .../cpu/cpu6/topology/core_siblings           |   1 +
- .../cpu/cpu6/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu6/topology/die_cpus |   1 +
- .../cpu/cpu6/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu6/topology/die_id   |   1 +
- .../cpu/cpu6/topology/package_cpus            |   1 +
- .../cpu/cpu6/topology/package_cpus_list       |   1 +
- .../cpu/cpu6/topology/physical_package_id     |   1 +
- .../cpu/cpu6/topology/thread_siblings         |   1 +
- .../cpu/cpu6/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu7/online            |   1 +
- .../cpu/cpu7/topology/core_cpus               |   1 +
- .../cpu/cpu7/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu7/topology/core_id  |   1 +
- .../cpu/cpu7/topology/core_siblings           |   1 +
- .../cpu/cpu7/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu7/topology/die_cpus |   1 +
- .../cpu/cpu7/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu7/topology/die_id   |   1 +
- .../cpu/cpu7/topology/package_cpus            |   1 +
- .../cpu/cpu7/topology/package_cpus_list       |   1 +
- .../cpu/cpu7/topology/physical_package_id     |   1 +
- .../cpu/cpu7/topology/thread_siblings         |   1 +
- .../cpu/cpu7/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu8/online            |   1 +
- .../cpu/cpu8/topology/core_cpus               |   1 +
- .../cpu/cpu8/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu8/topology/core_id  |   1 +
- .../cpu/cpu8/topology/core_siblings           |   1 +
- .../cpu/cpu8/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu8/topology/die_cpus |   1 +
- .../cpu/cpu8/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu8/topology/die_id   |   1 +
- .../cpu/cpu8/topology/package_cpus            |   1 +
- .../cpu/cpu8/topology/package_cpus_list       |   1 +
- .../cpu/cpu8/topology/physical_package_id     |   1 +
- .../cpu/cpu8/topology/thread_siblings         |   1 +
- .../cpu/cpu8/topology/thread_siblings_list    |   1 +
- .../linux-with-die/cpu/cpu9/online            |   1 +
- .../cpu/cpu9/topology/core_cpus               |   1 +
- .../cpu/cpu9/topology/core_cpus_list          |   1 +
- .../linux-with-die/cpu/cpu9/topology/core_id  |   1 +
- .../cpu/cpu9/topology/core_siblings           |   1 +
- .../cpu/cpu9/topology/core_siblings_list      |   1 +
- .../linux-with-die/cpu/cpu9/topology/die_cpus |   1 +
- .../cpu/cpu9/topology/die_cpus_list           |   1 +
- .../linux-with-die/cpu/cpu9/topology/die_id   |   1 +
- .../cpu/cpu9/topology/package_cpus            |   1 +
- .../cpu/cpu9/topology/package_cpus_list       |   1 +
- .../cpu/cpu9/topology/physical_package_id     |   1 +
- .../cpu/cpu9/topology/thread_siblings         |   1 +
- .../cpu/cpu9/topology/thread_siblings_list    |   1 +
- .../virhostcpudata/linux-with-die/cpu/online  |   1 +
- .../virhostcpudata/linux-with-die/cpu/present |   1 +
- .../linux-with-die/node/node0/cpu0            |   1 +
- .../linux-with-die/node/node0/cpu1            |   1 +
- .../linux-with-die/node/node0/cpu10           |   1 +
- .../linux-with-die/node/node0/cpu11           |   1 +
- .../linux-with-die/node/node0/cpu2            |   1 +
- .../linux-with-die/node/node0/cpu3            |   1 +
- .../linux-with-die/node/node0/cpu4            |   1 +
- .../linux-with-die/node/node0/cpu5            |   1 +
- .../linux-with-die/node/node0/cpu6            |   1 +
- .../linux-with-die/node/node0/cpu7            |   1 +
- .../linux-with-die/node/node0/cpu8            |   1 +
- .../linux-with-die/node/node0/cpu9            |   1 +
- .../linux-with-die/node/node0/cpulist         |   1 +
- .../virhostcpudata/linux-with-die/node/online |   1 +
- .../linux-with-die/node/possible              |   1 +
- .../linux-x86_64-with-die.cpuinfo             | 323 ++++++++++++++++++
- .../linux-x86_64-with-die.expected            |   1 +
- tests/virhostcputest.c                        |   1 +
- 191 files changed, 547 insertions(+)
- create mode 120000 tests/vircaps2xmldata/linux-basic-dies/system/cpu
- create mode 120000 tests/vircaps2xmldata/linux-basic-dies/system/node
- create mode 100644 tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/physical_package_id
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings_list
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/online
- create mode 100644 tests/virhostcpudata/linux-with-die/cpu/present
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu0
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu1
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu10
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu11
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu2
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu3
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu4
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu5
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu6
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu7
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu8
- create mode 120000 tests/virhostcpudata/linux-with-die/node/node0/cpu9
- create mode 100644 tests/virhostcpudata/linux-with-die/node/node0/cpulist
- create mode 100644 tests/virhostcpudata/linux-with-die/node/online
- create mode 100644 tests/virhostcpudata/linux-with-die/node/possible
- create mode 100644 tests/virhostcpudata/linux-x86_64-with-die.cpuinfo
- create mode 100644 tests/virhostcpudata/linux-x86_64-with-die.expected
-
-diff --git a/tests/vircaps2xmldata/linux-basic-dies/system/cpu b/tests/vircaps2xmldata/linux-basic-dies/system/cpu
-new file mode 120000
-index 0000000000..af158a7097
---- /dev/null
-+++ b/tests/vircaps2xmldata/linux-basic-dies/system/cpu
-@@ -0,0 +1 @@
-+../../../virhostcpudata/linux-with-die/cpu
-\ No newline at end of file
-diff --git a/tests/vircaps2xmldata/linux-basic-dies/system/node b/tests/vircaps2xmldata/linux-basic-dies/system/node
-new file mode 120000
-index 0000000000..68bc88ea14
---- /dev/null
-+++ b/tests/vircaps2xmldata/linux-basic-dies/system/node
-@@ -0,0 +1 @@
-+../../../virhostcpudata/linux-with-die/node
-\ No newline at end of file
-diff --git a/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml
-new file mode 100644
-index 0000000000..8a3ca2d13c
---- /dev/null
-+++ b/tests/vircaps2xmldata/vircaps-x86_64-basic-dies.xml
-@@ -0,0 +1,35 @@
-+<capabilities>
-+
-+  <host>
-+    <cpu>
-+      <arch>x86_64</arch>
-+    </cpu>
-+    <power_management/>
-+    <iommu support='no'/>
-+    <topology>
-+      <cells num='1'>
-+        <cell id='0'>
-+          <memory unit='KiB'>1048576</memory>
-+          <pages unit='KiB' size='4'>2048</pages>
-+          <pages unit='KiB' size='2048'>4096</pages>
-+          <pages unit='KiB' size='1048576'>6144</pages>
-+          <cpus num='12'>
-+            <cpu id='0' socket_id='0' die_id='0' core_id='0' siblings='0'/>
-+            <cpu id='1' socket_id='0' die_id='0' core_id='1' siblings='1'/>
-+            <cpu id='2' socket_id='0' die_id='1' core_id='0' siblings='2'/>
-+            <cpu id='3' socket_id='0' die_id='1' core_id='1' siblings='3'/>
-+            <cpu id='4' socket_id='0' die_id='2' core_id='0' siblings='4'/>
-+            <cpu id='5' socket_id='0' die_id='2' core_id='1' siblings='5'/>
-+            <cpu id='6' socket_id='1' die_id='0' core_id='0' siblings='6'/>
-+            <cpu id='7' socket_id='1' die_id='0' core_id='1' siblings='7'/>
-+            <cpu id='8' socket_id='1' die_id='1' core_id='0' siblings='8'/>
-+            <cpu id='9' socket_id='1' die_id='1' core_id='1' siblings='9'/>
-+            <cpu id='10' socket_id='1' die_id='2' core_id='0' siblings='10'/>
-+            <cpu id='11' socket_id='1' die_id='2' core_id='1' siblings='11'/>
-+          </cpus>
-+        </cell>
-+      </cells>
-+    </topology>
-+  </host>
-+
-+</capabilities>
-diff --git a/tests/vircaps2xmltest.c b/tests/vircaps2xmltest.c
-index 6c08a26ec4..17cd600a7a 100644
---- a/tests/vircaps2xmltest.c
-+++ b/tests/vircaps2xmltest.c
-@@ -102,6 +102,7 @@ mymain(void)
- 
-     DO_TEST_FULL("basic", VIR_ARCH_X86_64, false, false);
-     DO_TEST_FULL("basic", VIR_ARCH_AARCH64, true, false);
-+    DO_TEST_FULL("basic-dies", VIR_ARCH_X86_64, false, false);
- 
-     DO_TEST_FULL("caches", VIR_ARCH_X86_64, true, true);
- 
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus
-new file mode 100644
-index 0000000000..5325a8dff7
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus
-@@ -0,0 +1 @@
-+001
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus_list
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_cpus_list
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/core_siblings_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus
-new file mode 100644
-index 0000000000..d7887218f9
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus
-@@ -0,0 +1 @@
-+003
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus_list
-new file mode 100644
-index 0000000000..8b0fab869c
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_cpus_list
-@@ -0,0 +1 @@
-+0-1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/die_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/package_cpus_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/physical_package_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/physical_package_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings
-new file mode 100644
-index 0000000000..5325a8dff7
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings
-@@ -0,0 +1 @@
-+001
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu0/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/online b/tests/virhostcpudata/linux-with-die/cpu/cpu1/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus
-new file mode 100644
-index 0000000000..5902f77e7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus
-@@ -0,0 +1 @@
-+002
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus_list
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_cpus_list
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/core_siblings_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus
-new file mode 100644
-index 0000000000..d7887218f9
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus
-@@ -0,0 +1 @@
-+003
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus_list
-new file mode 100644
-index 0000000000..8b0fab869c
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_cpus_list
-@@ -0,0 +1 @@
-+0-1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/die_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/package_cpus_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/physical_package_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/physical_package_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings
-new file mode 100644
-index 0000000000..5902f77e7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings
-@@ -0,0 +1 @@
-+002
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu1/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/online b/tests/virhostcpudata/linux-with-die/cpu/cpu10/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus
-new file mode 100644
-index 0000000000..d411bb7c1a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus
-@@ -0,0 +1 @@
-+400
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus_list
-new file mode 100644
-index 0000000000..f599e28b8a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_cpus_list
-@@ -0,0 +1 @@
-+10
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/core_siblings_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus
-new file mode 100644
-index 0000000000..a94266dd91
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus
-@@ -0,0 +1 @@
-+c00
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus_list
-new file mode 100644
-index 0000000000..ac93dc4496
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_cpus_list
-@@ -0,0 +1 @@
-+10-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_id
-new file mode 100644
-index 0000000000..0cfbf08886
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/die_id
-@@ -0,0 +1 @@
-+2
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/package_cpus_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/physical_package_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/physical_package_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings
-new file mode 100644
-index 0000000000..d411bb7c1a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings
-@@ -0,0 +1 @@
-+400
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..f599e28b8a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu10/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+10
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/online b/tests/virhostcpudata/linux-with-die/cpu/cpu11/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus
-new file mode 100644
-index 0000000000..5ae5aef844
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus
-@@ -0,0 +1 @@
-+800
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus_list
-new file mode 100644
-index 0000000000..b4de394767
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_cpus_list
-@@ -0,0 +1 @@
-+11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/core_siblings_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus
-new file mode 100644
-index 0000000000..a94266dd91
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus
-@@ -0,0 +1 @@
-+c00
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus_list
-new file mode 100644
-index 0000000000..ac93dc4496
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_cpus_list
-@@ -0,0 +1 @@
-+10-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_id
-new file mode 100644
-index 0000000000..0cfbf08886
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/die_id
-@@ -0,0 +1 @@
-+2
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/package_cpus_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/physical_package_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/physical_package_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings
-new file mode 100644
-index 0000000000..5ae5aef844
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings
-@@ -0,0 +1 @@
-+800
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..b4de394767
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu11/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/online b/tests/virhostcpudata/linux-with-die/cpu/cpu2/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus
-new file mode 100644
-index 0000000000..8f3cca4f01
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus
-@@ -0,0 +1 @@
-+004
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus_list
-new file mode 100644
-index 0000000000..0cfbf08886
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_cpus_list
-@@ -0,0 +1 @@
-+2
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/core_siblings_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus
-new file mode 100644
-index 0000000000..3138e83a00
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus
-@@ -0,0 +1 @@
-+00c
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus_list
-new file mode 100644
-index 0000000000..7a9857542a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_cpus_list
-@@ -0,0 +1 @@
-+2-3
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/die_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/package_cpus_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/physical_package_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/physical_package_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings
-new file mode 100644
-index 0000000000..8f3cca4f01
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings
-@@ -0,0 +1 @@
-+004
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..0cfbf08886
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu2/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+2
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/online b/tests/virhostcpudata/linux-with-die/cpu/cpu3/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus
-new file mode 100644
-index 0000000000..e195199bee
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus
-@@ -0,0 +1 @@
-+008
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus_list
-new file mode 100644
-index 0000000000..00750edc07
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_cpus_list
-@@ -0,0 +1 @@
-+3
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/core_siblings_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus
-new file mode 100644
-index 0000000000..3138e83a00
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus
-@@ -0,0 +1 @@
-+00c
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus_list
-new file mode 100644
-index 0000000000..7a9857542a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_cpus_list
-@@ -0,0 +1 @@
-+2-3
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/die_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/package_cpus_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/physical_package_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/physical_package_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings
-new file mode 100644
-index 0000000000..e195199bee
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings
-@@ -0,0 +1 @@
-+008
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..00750edc07
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu3/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+3
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/online b/tests/virhostcpudata/linux-with-die/cpu/cpu4/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus
-new file mode 100644
-index 0000000000..9e8493eaee
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus
-@@ -0,0 +1 @@
-+010
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus_list
-new file mode 100644
-index 0000000000..b8626c4cff
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_cpus_list
-@@ -0,0 +1 @@
-+4
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/core_siblings_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus
-new file mode 100644
-index 0000000000..cadb715e0d
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus
-@@ -0,0 +1 @@
-+030
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus_list
-new file mode 100644
-index 0000000000..e66d883ade
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_cpus_list
-@@ -0,0 +1 @@
-+4-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_id
-new file mode 100644
-index 0000000000..0cfbf08886
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/die_id
-@@ -0,0 +1 @@
-+2
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/package_cpus_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/physical_package_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/physical_package_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings
-new file mode 100644
-index 0000000000..9e8493eaee
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings
-@@ -0,0 +1 @@
-+010
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..b8626c4cff
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu4/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+4
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/online b/tests/virhostcpudata/linux-with-die/cpu/cpu5/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus
-new file mode 100644
-index 0000000000..fb6187e9e0
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus
-@@ -0,0 +1 @@
-+020
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus_list
-new file mode 100644
-index 0000000000..7ed6ff82de
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_cpus_list
-@@ -0,0 +1 @@
-+5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/core_siblings_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus
-new file mode 100644
-index 0000000000..cadb715e0d
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus
-@@ -0,0 +1 @@
-+030
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus_list
-new file mode 100644
-index 0000000000..e66d883ade
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_cpus_list
-@@ -0,0 +1 @@
-+4-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_id
-new file mode 100644
-index 0000000000..0cfbf08886
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/die_id
-@@ -0,0 +1 @@
-+2
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus
-new file mode 100644
-index 0000000000..d37ac748bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus
-@@ -0,0 +1 @@
-+03f
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus_list
-new file mode 100644
-index 0000000000..82a99f2907
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/package_cpus_list
-@@ -0,0 +1 @@
-+0-5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/physical_package_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/physical_package_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings
-new file mode 100644
-index 0000000000..fb6187e9e0
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings
-@@ -0,0 +1 @@
-+020
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..7ed6ff82de
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu5/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+5
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/online b/tests/virhostcpudata/linux-with-die/cpu/cpu6/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus
-new file mode 100644
-index 0000000000..9070bc3017
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus
-@@ -0,0 +1 @@
-+040
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus_list
-new file mode 100644
-index 0000000000..1e8b314962
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_cpus_list
-@@ -0,0 +1 @@
-+6
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/core_siblings_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus
-new file mode 100644
-index 0000000000..8f0552ead0
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus
-@@ -0,0 +1 @@
-+0c0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus_list
-new file mode 100644
-index 0000000000..fdd9f37517
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_cpus_list
-@@ -0,0 +1 @@
-+6-7
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/die_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/package_cpus_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/physical_package_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/physical_package_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings
-new file mode 100644
-index 0000000000..9070bc3017
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings
-@@ -0,0 +1 @@
-+040
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..1e8b314962
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu6/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+6
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/online b/tests/virhostcpudata/linux-with-die/cpu/cpu7/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus
-new file mode 100644
-index 0000000000..fa5c7835bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus
-@@ -0,0 +1 @@
-+080
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus_list
-new file mode 100644
-index 0000000000..7f8f011eb7
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_cpus_list
-@@ -0,0 +1 @@
-+7
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/core_siblings_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus
-new file mode 100644
-index 0000000000..8f0552ead0
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus
-@@ -0,0 +1 @@
-+0c0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus_list
-new file mode 100644
-index 0000000000..fdd9f37517
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_cpus_list
-@@ -0,0 +1 @@
-+6-7
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/die_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/package_cpus_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/physical_package_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/physical_package_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings
-new file mode 100644
-index 0000000000..fa5c7835bd
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings
-@@ -0,0 +1 @@
-+080
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..7f8f011eb7
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu7/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+7
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/online b/tests/virhostcpudata/linux-with-die/cpu/cpu8/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus
-new file mode 100644
-index 0000000000..29d6383b52
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus
-@@ -0,0 +1 @@
-+100
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus_list
-new file mode 100644
-index 0000000000..45a4fb75db
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_cpus_list
-@@ -0,0 +1 @@
-+8
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_id
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_id
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/core_siblings_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus
-new file mode 100644
-index 0000000000..697cb3a26d
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus
-@@ -0,0 +1 @@
-+300
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus_list
-new file mode 100644
-index 0000000000..63edceec1e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_cpus_list
-@@ -0,0 +1 @@
-+8-9
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/die_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/package_cpus_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/physical_package_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/physical_package_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings
-new file mode 100644
-index 0000000000..29d6383b52
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings
-@@ -0,0 +1 @@
-+100
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..45a4fb75db
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu8/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+8
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/online b/tests/virhostcpudata/linux-with-die/cpu/cpu9/online
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/online
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus
-new file mode 100644
-index 0000000000..08839f6bb2
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus
-@@ -0,0 +1 @@
-+200
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus_list
-new file mode 100644
-index 0000000000..ec635144f6
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_cpus_list
-@@ -0,0 +1 @@
-+9
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_id b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/core_siblings_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus
-new file mode 100644
-index 0000000000..697cb3a26d
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus
-@@ -0,0 +1 @@
-+300
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus_list
-new file mode 100644
-index 0000000000..63edceec1e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_cpus_list
-@@ -0,0 +1 @@
-+8-9
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_id b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/die_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus
-new file mode 100644
-index 0000000000..6c3274debe
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus
-@@ -0,0 +1 @@
-+fc0
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus_list b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus_list
-new file mode 100644
-index 0000000000..fd6c445982
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/package_cpus_list
-@@ -0,0 +1 @@
-+6-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/physical_package_id b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/physical_package_id
-new file mode 100644
-index 0000000000..d00491fd7e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/physical_package_id
-@@ -0,0 +1 @@
-+1
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings
-new file mode 100644
-index 0000000000..08839f6bb2
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings
-@@ -0,0 +1 @@
-+200
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings_list b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings_list
-new file mode 100644
-index 0000000000..ec635144f6
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/cpu9/topology/thread_siblings_list
-@@ -0,0 +1 @@
-+9
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/online b/tests/virhostcpudata/linux-with-die/cpu/online
-new file mode 100644
-index 0000000000..536e621dcc
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/online
-@@ -0,0 +1 @@
-+0-11
-diff --git a/tests/virhostcpudata/linux-with-die/cpu/present b/tests/virhostcpudata/linux-with-die/cpu/present
-new file mode 100644
-index 0000000000..536e621dcc
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/cpu/present
-@@ -0,0 +1 @@
-+0-11
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu0 b/tests/virhostcpudata/linux-with-die/node/node0/cpu0
-new file mode 120000
-index 0000000000..c841bea28b
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu0
-@@ -0,0 +1 @@
-+../../cpu/cpu0
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu1 b/tests/virhostcpudata/linux-with-die/node/node0/cpu1
-new file mode 120000
-index 0000000000..5f4536279e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu1
-@@ -0,0 +1 @@
-+../../cpu/cpu1
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu10 b/tests/virhostcpudata/linux-with-die/node/node0/cpu10
-new file mode 120000
-index 0000000000..a6dc6bb10e
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu10
-@@ -0,0 +1 @@
-+../../cpu/cpu10
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu11 b/tests/virhostcpudata/linux-with-die/node/node0/cpu11
-new file mode 120000
-index 0000000000..e29d898284
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu11
-@@ -0,0 +1 @@
-+../../cpu/cpu11
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu2 b/tests/virhostcpudata/linux-with-die/node/node0/cpu2
-new file mode 120000
-index 0000000000..2dcca332ce
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu2
-@@ -0,0 +1 @@
-+../../cpu/cpu2
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu3 b/tests/virhostcpudata/linux-with-die/node/node0/cpu3
-new file mode 120000
-index 0000000000..c7690e5aa6
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu3
-@@ -0,0 +1 @@
-+../../cpu/cpu3
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu4 b/tests/virhostcpudata/linux-with-die/node/node0/cpu4
-new file mode 120000
-index 0000000000..9e77a64eb4
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu4
-@@ -0,0 +1 @@
-+../../cpu/cpu4
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu5 b/tests/virhostcpudata/linux-with-die/node/node0/cpu5
-new file mode 120000
-index 0000000000..cc07c3b97b
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu5
-@@ -0,0 +1 @@
-+../../cpu/cpu5
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu6 b/tests/virhostcpudata/linux-with-die/node/node0/cpu6
-new file mode 120000
-index 0000000000..2e7576354f
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu6
-@@ -0,0 +1 @@
-+../../cpu/cpu6
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu7 b/tests/virhostcpudata/linux-with-die/node/node0/cpu7
-new file mode 120000
-index 0000000000..09e3f79b43
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu7
-@@ -0,0 +1 @@
-+../../cpu/cpu7
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu8 b/tests/virhostcpudata/linux-with-die/node/node0/cpu8
-new file mode 120000
-index 0000000000..bda10cc343
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu8
-@@ -0,0 +1 @@
-+../../cpu/cpu8
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpu9 b/tests/virhostcpudata/linux-with-die/node/node0/cpu9
-new file mode 120000
-index 0000000000..1ec1db255a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpu9
-@@ -0,0 +1 @@
-+../../cpu/cpu9
-\ No newline at end of file
-diff --git a/tests/virhostcpudata/linux-with-die/node/node0/cpulist b/tests/virhostcpudata/linux-with-die/node/node0/cpulist
-new file mode 100644
-index 0000000000..536e621dcc
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/node0/cpulist
-@@ -0,0 +1 @@
-+0-11
-diff --git a/tests/virhostcpudata/linux-with-die/node/online b/tests/virhostcpudata/linux-with-die/node/online
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/online
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-with-die/node/possible b/tests/virhostcpudata/linux-with-die/node/possible
-new file mode 100644
-index 0000000000..573541ac97
---- /dev/null
-+++ b/tests/virhostcpudata/linux-with-die/node/possible
-@@ -0,0 +1 @@
-+0
-diff --git a/tests/virhostcpudata/linux-x86_64-with-die.cpuinfo b/tests/virhostcpudata/linux-x86_64-with-die.cpuinfo
-new file mode 100644
-index 0000000000..f57be77f0c
---- /dev/null
-+++ b/tests/virhostcpudata/linux-x86_64-with-die.cpuinfo
-@@ -0,0 +1,323 @@
-+processor	: 0
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 0
-+siblings	: 6
-+core id		: 0
-+cpu cores	: 6
-+apicid		: 0
-+initial apicid	: 0
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 1
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 0
-+siblings	: 6
-+core id		: 1
-+cpu cores	: 6
-+apicid		: 1
-+initial apicid	: 1
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 2
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 0
-+siblings	: 6
-+core id		: 0
-+cpu cores	: 6
-+apicid		: 2
-+initial apicid	: 2
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 3
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 0
-+siblings	: 6
-+core id		: 1
-+cpu cores	: 6
-+apicid		: 3
-+initial apicid	: 3
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 4
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 0
-+siblings	: 6
-+core id		: 0
-+cpu cores	: 6
-+apicid		: 4
-+initial apicid	: 4
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 5
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 0
-+siblings	: 6
-+core id		: 1
-+cpu cores	: 6
-+apicid		: 5
-+initial apicid	: 5
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 6
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 1
-+siblings	: 6
-+core id		: 0
-+cpu cores	: 6
-+apicid		: 8
-+initial apicid	: 8
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 7
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 1
-+siblings	: 6
-+core id		: 1
-+cpu cores	: 6
-+apicid		: 9
-+initial apicid	: 9
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 8
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 1
-+siblings	: 6
-+core id		: 0
-+cpu cores	: 6
-+apicid		: 10
-+initial apicid	: 10
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 9
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 1
-+siblings	: 6
-+core id		: 1
-+cpu cores	: 6
-+apicid		: 11
-+initial apicid	: 11
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 10
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 1
-+siblings	: 6
-+core id		: 0
-+cpu cores	: 6
-+apicid		: 12
-+initial apicid	: 12
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-+
-+processor	: 11
-+vendor_id	: GenuineIntel
-+cpu family	: 6
-+model		: 6
-+model name	: QEMU Virtual CPU version 2.5+
-+stepping	: 3
-+microcode	: 0x1
-+cpu MHz		: 1897.801
-+cache size	: 16384 KB
-+physical id	: 1
-+siblings	: 6
-+core id		: 1
-+cpu cores	: 6
-+apicid		: 13
-+initial apicid	: 13
-+fpu		: yes
-+fpu_exception	: yes
-+cpuid level	: 31
-+wp		: yes
-+flags		: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
-+bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
-+bogomips	: 3795.60
-+clflush size	: 64
-+cache_alignment	: 64
-+address sizes	: 40 bits physical, 48 bits virtual
-+power management:
-diff --git a/tests/virhostcpudata/linux-x86_64-with-die.expected b/tests/virhostcpudata/linux-x86_64-with-die.expected
-new file mode 100644
-index 0000000000..3c045f483a
---- /dev/null
-+++ b/tests/virhostcpudata/linux-x86_64-with-die.expected
-@@ -0,0 +1 @@
-+CPUs: 12/12, MHz: 1897, Nodes: 1, Sockets: 1, Cores: 12, Threads: 1
-diff --git a/tests/virhostcputest.c b/tests/virhostcputest.c
-index 05c6f5acfb..7865b61578 100644
---- a/tests/virhostcputest.c
-+++ b/tests/virhostcputest.c
-@@ -248,6 +248,7 @@ mymain(void)
-         /* subcores, invalid configuration */
-         {"subcores3", VIR_ARCH_PPC64},
-         {"with-frequency", VIR_ARCH_S390X},
-+        {"with-die", VIR_ARCH_X86_64},
-     };
- 
-     if (virInitialize() < 0)
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-fix-iptables-test-case-commandline-options-in-virfirewalltest.c.patch b/SOURCES/libvirt-tests-fix-iptables-test-case-commandline-options-in-virfirewalltest.c.patch
deleted file mode 100644
index 60697f8..0000000
--- a/SOURCES/libvirt-tests-fix-iptables-test-case-commandline-options-in-virfirewalltest.c.patch
+++ /dev/null
@@ -1,522 +0,0 @@
-From 2439f55f8a44ae3bddde8098f3f6ea67ccfd1d9b Mon Sep 17 00:00:00 2001
-Message-Id: <2439f55f8a44ae3bddde8098f3f6ea67ccfd1d9b@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:47 -0500
-Subject: [PATCH] tests: fix iptables test case commandline options in
- virfirewalltest.c
-
-This test was created with all the commandlines erroneously having
-"--source-host", which is not a valid iptables option. The correct
-name for the option is "--source". However, since the test is just
-checking that the generated commandline matches what we told it to
-generate (and never actually runs iptables, as that would be a "Really
-Bad Idea"(tm)), the test has always succeeded. I only found it because
-I made a change to the code that caused the test to incorrectly try to
-run iptables during the test, and the error message I received was
-"odd" (it complained about the bad option, rather than complaining
-that I had insufficient privilege to run the command).
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit e9693502fb63ce5ddd07d2599daddc563c422eed)
-Message-Id: <20210116035151.1066734-5-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- tests/virfirewalltest.c | 168 ++++++++++++++++++++--------------------
- 1 file changed, 84 insertions(+), 84 deletions(-)
-
-diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
-index 1ec768d302..40e7f4f00b 100644
---- a/tests/virfirewalltest.c
-+++ b/tests/virfirewalltest.c
-@@ -206,8 +206,8 @@ testFirewallSingleGroup(const void *opaque)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -225,12 +225,12 @@ testFirewallSingleGroup(const void *opaque)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     if (virFirewallApply(fw) < 0)
-@@ -262,8 +262,8 @@ testFirewallRemoveRule(const void *opaque)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
-     virFirewallRulePtr fwrule;
- 
-@@ -282,17 +282,17 @@ testFirewallRemoveRule(const void *opaque)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     fwrule = virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                                 "-A", "INPUT", NULL);
--    virFirewallRuleAddArg(fw, fwrule, "--source-host");
-+    virFirewallRuleAddArg(fw, fwrule, "--source");
-     virFirewallRemoveRule(fw, fwrule);
- 
-     fwrule = virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                                 "-A", "INPUT", NULL);
--    virFirewallRuleAddArg(fw, fwrule, "--source-host");
-+    virFirewallRuleAddArg(fw, fwrule, "--source");
-     virFirewallRuleAddArgFormat(fw, fwrule, "%s", "!192.168.122.1");
-     virFirewallRuleAddArgList(fw, fwrule, "--jump", "REJECT", NULL);
- 
-@@ -325,9 +325,9 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n"
--        IPTABLES_PATH " -w -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n"
-         IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
-     const struct testFirewallData *data = opaque;
- 
-@@ -346,19 +346,19 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallStartTransaction(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "OUTPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-@@ -416,9 +416,9 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n"
-         IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
-     const struct testFirewallData *data = opaque;
- 
-@@ -439,19 +439,19 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallStartTransaction(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "OUTPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-@@ -488,9 +488,9 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --source 192.168.122.1 --jump ACCEPT\n"
-         IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
-     const struct testFirewallData *data = opaque;
- 
-@@ -511,18 +511,18 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRuleFull(fw, VIR_FIREWALL_LAYER_IPV4,
-                            true, NULL, NULL,
-                            "-A", "INPUT",
--                           "--source-host", "192.168.122.255",
-+                           "--source", "192.168.122.255",
-                            "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "OUTPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-@@ -559,8 +559,8 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -580,17 +580,17 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     if (virFirewallApply(fw) == 0) {
-@@ -623,11 +623,11 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -647,34 +647,34 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallStartRollback(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     if (virFirewallApply(fw) == 0) {
-@@ -707,10 +707,10 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -730,38 +730,38 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallStartRollback(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallStartTransaction(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallStartRollback(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     if (virFirewallApply(fw) == 0) {
-@@ -794,14 +794,14 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.127 --jump REJECT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.127 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.127 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source 192.168.122.127 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -821,14 +821,14 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallStartRollback(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
- 
-@@ -836,24 +836,24 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.127",
-+                       "--source", "192.168.122.127",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallStartRollback(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.127",
-+                       "--source", "192.168.122.127",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
- 
-@@ -861,24 +861,24 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallStartRollback(fw, VIR_FIREWALL_ROLLBACK_INHERIT_PREVIOUS);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "192.168.122.255",
-+                       "--source", "192.168.122.255",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-D", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     if (virFirewallApply(fw) == 0) {
-@@ -962,7 +962,7 @@ testFirewallQueryCallback(virFirewallPtr fw,
-     size_t i;
-     virFirewallAddRule(fw, layer,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.129",
-+                       "--source", "!192.168.122.129",
-                        "--jump", "REJECT", NULL);
- 
-     for (i = 0; lines[i] != NULL; i++) {
-@@ -990,15 +990,15 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.127 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.127 --jump REJECT\n"
-         IPTABLES_PATH " -w -L\n"
-         IPTABLES_PATH " -w -t nat -L\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.130 --jump REJECT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.129' --jump REJECT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.129' --jump REJECT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.128 --jump REJECT\n"
--        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.130 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.129' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.129' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source 192.168.122.128 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     expectedLineNum = 0;
-@@ -1020,14 +1020,14 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.1",
-+                       "--source", "192.168.122.1",
-                        "--jump", "ACCEPT", NULL);
- 
-     virFirewallStartTransaction(fw, 0);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.127",
-+                       "--source", "192.168.122.127",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRuleFull(fw, VIR_FIREWALL_LAYER_IPV4,
-@@ -1043,7 +1043,7 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.130",
-+                       "--source", "192.168.122.130",
-                        "--jump", "REJECT", NULL);
- 
- 
-@@ -1051,12 +1051,12 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "192.168.122.128",
-+                       "--source", "192.168.122.128",
-                        "--jump", "REJECT", NULL);
- 
-     virFirewallAddRule(fw, VIR_FIREWALL_LAYER_IPV4,
-                        "-A", "INPUT",
--                       "--source-host", "!192.168.122.1",
-+                       "--source", "!192.168.122.1",
-                        "--jump", "REJECT", NULL);
- 
-     if (virFirewallApply(fw) < 0)
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-tests-hash-Test-case-for-adding-duplicate-hash-entry.patch b/SOURCES/libvirt-tests-hash-Test-case-for-adding-duplicate-hash-entry.patch
deleted file mode 100644
index 53106c2..0000000
--- a/SOURCES/libvirt-tests-hash-Test-case-for-adding-duplicate-hash-entry.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From cbdb97e438e9e45b4c0219e95a1d638d03faa8ae Mon Sep 17 00:00:00 2001
-Message-Id: <cbdb97e438e9e45b4c0219e95a1d638d03faa8ae@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:44 +0100
-Subject: [PATCH] tests: hash: Test case for adding duplicate hash entry
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Test that adding a duplicate entry is rejected properly. This also
-allows to see the error message of the duplicate key addition in verbose
-mode.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 7134f26b73162536b8bea2af860b32bad6a7f965)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <9bec2f7b4dc1be3ec963efa667c93ff225e9a0b6.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virhashtest.c | 23 +++++++++++++++++++++++
- 1 file changed, 23 insertions(+)
-
-diff --git a/tests/virhashtest.c b/tests/virhashtest.c
-index 66fa3a428e..4d05cbb0f8 100644
---- a/tests/virhashtest.c
-+++ b/tests/virhashtest.c
-@@ -510,6 +510,28 @@ testHashEqual(const void *data G_GNUC_UNUSED)
- }
- 
- 
-+static int
-+testHashDuplicate(const void *data G_GNUC_UNUSED)
-+{
-+    g_autoptr(virHashTable) hash = NULL;
-+
-+    if (!(hash = virHashCreate(0, NULL)))
-+        return -1;
-+
-+    if (virHashAddEntry(hash, "a", NULL) < 0) {
-+        VIR_TEST_VERBOSE("\nfailed to add key 'a' to hash");
-+        return -1;
-+    }
-+
-+    if (virHashAddEntry(hash, "a", NULL) >= 0) {
-+        VIR_TEST_VERBOSE("\nadding of key 'a' should have failed");
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+
- static int
- mymain(void)
- {
-@@ -546,6 +568,7 @@ mymain(void)
-     DO_TEST("Search", Search);
-     DO_TEST("GetItems", GetItems);
-     DO_TEST("Equal", Equal);
-+    DO_TEST("Duplicate entry", Duplicate);
- 
-     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
- }
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemu-Add-test-data-for-the-new-slice-element.patch b/SOURCES/libvirt-tests-qemu-Add-test-data-for-the-new-slice-element.patch
deleted file mode 100644
index 2666454..0000000
--- a/SOURCES/libvirt-tests-qemu-Add-test-data-for-the-new-slice-element.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-From 6e2efb5b67a6d1a65c4e4facb7013f5e24622591 Mon Sep 17 00:00:00 2001
-Message-Id: <6e2efb5b67a6d1a65c4e4facb7013f5e24622591@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:25 +0100
-Subject: [PATCH] tests: qemu: Add test data for the new <slice> element
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 293e7750c9c26ac19ed4fafa9c9f1fe3e90d5078)
-
- Changes:
-  tests/qemuxml2argvdata/disk-slices.x86_64-latest.args
-  tests/qemuxml2xmloutdata/disk-slices.x86_64-latest.xml
-
- Due to missing backport of changes related to CPU detection there is
- difference in the XML files in unrelated parts.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Message-Id: <21b28fdf8e4fc8aaf9a68b8c32be5d5a1fdedacc.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- .../disk-slices.x86_64-latest.args            | 52 ++++++++++++++++++
- tests/qemuxml2argvdata/disk-slices.xml        | 45 ++++++++++++++++
- tests/qemuxml2argvtest.c                      |  2 +
- .../disk-slices.x86_64-latest.xml             | 53 +++++++++++++++++++
- tests/qemuxml2xmltest.c                       |  2 +
- 5 files changed, 154 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/disk-slices.x86_64-latest.args
- create mode 100644 tests/qemuxml2argvdata/disk-slices.xml
- create mode 100644 tests/qemuxml2xmloutdata/disk-slices.x86_64-latest.xml
-
-diff --git a/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args b/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args
-new file mode 100644
-index 0000000000..661b3f7ea1
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-slices.x86_64-latest.args
-@@ -0,0 +1,52 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-QEMUGuest1 \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-i386 \
-+-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 \
-+-overcommit mem-lock=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 \
-+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/raw.img",\
-+"node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw",\
-+"offset":1234,"size":321,"file":"libvirt-3-storage"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x2,drive=libvirt-3-format,\
-+id=virtio-disk0,bootindex=1 \
-+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/raw.img",\
-+"node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"driver":"raw","node-name":"libvirt-2-slice-sto","offset":9876,\
-+"size":123456789,"file":"libvirt-2-storage","auto-read-only":true,\
-+"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-2-format","read-only":true,"driver":"qcow2",\
-+"file":"libvirt-2-slice-sto","backing":null}' \
-+-blockdev '{"driver":"file","filename":"/var/lib/libvirt/images/overlay.qcow2",\
-+"node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \
-+-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2",\
-+"file":"libvirt-1-storage","backing":"libvirt-2-format"}' \
-+-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-1-format,\
-+id=virtio-disk1 \
-+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/disk-slices.xml b/tests/qemuxml2argvdata/disk-slices.xml
-new file mode 100644
-index 0000000000..cff7cc7ee4
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-slices.xml
-@@ -0,0 +1,45 @@
-+<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-i386</emulator>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source file='/var/lib/libvirt/images/raw.img'>
-+        <slices>
-+          <slice type='storage' offset='1234' size='321'/>
-+        </slices>
-+      </source>
-+      <backingStore/>
-+      <target dev='vda' bus='virtio'/>
-+    </disk>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='qcow2'/>
-+      <source file='/var/lib/libvirt/images/overlay.qcow2'/>
-+      <backingStore type='file'>
-+        <format type='qcow2'/>
-+        <source file='/var/lib/libvirt/images/raw.img'>
-+          <slices>
-+            <slice type='storage' offset='9876' size='123456789'/>
-+          </slices>
-+        </source>
-+        <backingStore/>
-+      </backingStore>
-+      <target dev='vdb' bus='virtio'/>
-+    </disk>
-+    <controller type='usb'/>
-+    <controller type='pci' model='pci-root'/>
-+    <memballoon model='virtio'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 508dfee3fb..8215935bab 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1162,6 +1162,8 @@ mymain(void)
-     DO_TEST_CAPS_VER("disk-backing-chains-noindex", "2.12.0");
-     DO_TEST_CAPS_LATEST("disk-backing-chains-noindex");
- 
-+    DO_TEST_CAPS_LATEST("disk-slices");
-+
-     DO_TEST("graphics-egl-headless",
-             QEMU_CAPS_EGL_HEADLESS,
-             QEMU_CAPS_DEVICE_CIRRUS_VGA);
-diff --git a/tests/qemuxml2xmloutdata/disk-slices.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-slices.x86_64-latest.xml
-new file mode 100644
-index 0000000000..8a56936910
---- /dev/null
-+++ b/tests/qemuxml2xmloutdata/disk-slices.x86_64-latest.xml
-@@ -0,0 +1,53 @@
-+<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-i386</emulator>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='raw'/>
-+      <source file='/var/lib/libvirt/images/raw.img'>
-+        <slices>
-+          <slice type='storage' offset='1234' size='321'/>
-+        </slices>
-+      </source>
-+      <backingStore/>
-+      <target dev='vda' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
-+    </disk>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='qcow2'/>
-+      <source file='/var/lib/libvirt/images/overlay.qcow2'/>
-+      <backingStore type='file'>
-+        <format type='qcow2'/>
-+        <source file='/var/lib/libvirt/images/raw.img'>
-+          <slices>
-+            <slice type='storage' offset='9876' size='123456789'/>
-+          </slices>
-+        </source>
-+        <backingStore/>
-+      </backingStore>
-+      <target dev='vdb' bus='virtio'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+    </disk>
-+    <controller type='usb' index='0' model='piix3-uhci'>
-+      <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='0x04' function='0x0'/>
-+    </memballoon>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
-index 6a8ae9f7eb..a3c7f8fd47 100644
---- a/tests/qemuxml2xmltest.c
-+++ b/tests/qemuxml2xmltest.c
-@@ -527,6 +527,8 @@ mymain(void)
-     DO_TEST("pci-rom-disabled-invalid", NONE);
-     DO_TEST("pci-serial-dev-chardev", NONE);
- 
-+    DO_TEST_CAPS_LATEST("disk-slices");
-+
-     DO_TEST("encrypted-disk", QEMU_CAPS_QCOW2_LUKS);
-     DO_TEST("encrypted-disk-usage", QEMU_CAPS_QCOW2_LUKS);
-     DO_TEST("luks-disks", NONE);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemu-add-disk-error-policy-tests-for-s390x.patch b/SOURCES/libvirt-tests-qemu-add-disk-error-policy-tests-for-s390x.patch
deleted file mode 100644
index b37307a..0000000
--- a/SOURCES/libvirt-tests-qemu-add-disk-error-policy-tests-for-s390x.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From 0e378fc059e8fc52e665910b6c87719750cb6dbe Mon Sep 17 00:00:00 2001
-Message-Id: <0e378fc059e8fc52e665910b6c87719750cb6dbe@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Wed, 1 Apr 2020 17:19:25 +0200
-Subject: [PATCH] tests: qemu: add disk-error-policy tests for s390x
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-To demonstrate the move of these attributes from -drive to -device.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 248d205171c9927b6d0e0077d2f3d9996c5540d9)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1819250
-
-Conflicts: the -latest.args file has an extra "-cpu qemu" upstream
-Message-Id: <5bec690d10f7d452d47fbf2db7dd24e7e855fe1b.1585754141.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- .../disk-error-policy-s390x.s390x-2.12.0.args | 42 +++++++++++++++++++
- .../disk-error-policy-s390x.s390x-latest.args | 42 +++++++++++++++++++
- .../disk-error-policy-s390x.xml               | 37 ++++++++++++++++
- tests/qemuxml2argvtest.c                      |  2 +
- 4 files changed, 123 insertions(+)
- create mode 100644 tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args
- create mode 100644 tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args
- create mode 100644 tests/qemuxml2argvdata/disk-error-policy-s390x.xml
-
-diff --git a/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args
-new file mode 100644
-index 0000000000..cf932d1fad
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-2.12.0.args
-@@ -0,0 +1,42 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-guest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-s390x \
-+-name guest=guest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-guest/master-key.aes \
-+-machine s390-ccw-virtio-2.12,accel=tcg,usb=off,dump-guest-core=off \
-+-m 214 \
-+-realtime mlock=off \
-+-smp 1,sockets=1,cores=1,threads=1 \
-+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
-+-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 \
-+-boot strict=on \
-+-drive file=/var/images/image1,format=qcow2,if=none,id=drive-virtio-disk0,\
-+werror=stop,rerror=stop,cache=none \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0000,drive=drive-virtio-disk0,\
-+id=virtio-disk0,bootindex=1,write-cache=on \
-+-drive file=/var/images/image2,format=qcow2,if=none,id=drive-virtio-disk1,\
-+werror=enospc,cache=none \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0001,drive=drive-virtio-disk1,\
-+id=virtio-disk1,write-cache=on \
-+-drive file=/var/images/image3,format=qcow2,if=none,id=drive-virtio-disk2,\
-+werror=report,rerror=ignore,cache=none \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0002,drive=drive-virtio-disk2,\
-+id=virtio-disk2,write-cache=on \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args
-new file mode 100644
-index 0000000000..5748ad7823
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-error-policy-s390x.s390x-latest.args
-@@ -0,0 +1,42 @@
-+LC_ALL=C \
-+PATH=/bin \
-+HOME=/tmp/lib/domain--1-guest \
-+USER=test \
-+LOGNAME=test \
-+XDG_DATA_HOME=/tmp/lib/domain--1-guest/.local/share \
-+XDG_CACHE_HOME=/tmp/lib/domain--1-guest/.cache \
-+XDG_CONFIG_HOME=/tmp/lib/domain--1-guest/.config \
-+QEMU_AUDIO_DRV=none \
-+/usr/bin/qemu-system-s390x \
-+-name guest=guest,debug-threads=on \
-+-S \
-+-object secret,id=masterKey0,format=raw,\
-+file=/tmp/lib/domain--1-guest/master-key.aes \
-+-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \
-+-m 214 \
-+-overcommit mem-lock=off \
-+-smp 1,sockets=1,cores=1,threads=1 \
-+-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
-+-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 \
-+-boot strict=on \
-+-drive file=/var/images/image1,format=qcow2,if=none,id=drive-virtio-disk0,\
-+werror=stop,rerror=stop,cache=none \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0000,drive=drive-virtio-disk0,\
-+id=virtio-disk0,bootindex=1,write-cache=on \
-+-drive file=/var/images/image2,format=qcow2,if=none,id=drive-virtio-disk1,\
-+werror=enospc,cache=none \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0001,drive=drive-virtio-disk1,\
-+id=virtio-disk1,write-cache=on \
-+-drive file=/var/images/image3,format=qcow2,if=none,id=drive-virtio-disk2,\
-+werror=report,rerror=ignore,cache=none \
-+-device virtio-blk-ccw,scsi=off,devno=fe.0.0002,drive=drive-virtio-disk2,\
-+id=virtio-disk2,write-cache=on \
-+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
-+resourcecontrol=deny \
-+-msg timestamp=on
-diff --git a/tests/qemuxml2argvdata/disk-error-policy-s390x.xml b/tests/qemuxml2argvdata/disk-error-policy-s390x.xml
-new file mode 100644
-index 0000000000..7149e66d70
---- /dev/null
-+++ b/tests/qemuxml2argvdata/disk-error-policy-s390x.xml
-@@ -0,0 +1,37 @@
-+<domain type='qemu'>
-+  <name>guest</name>
-+  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
-+  <memory unit='KiB'>219136</memory>
-+  <currentMemory unit='KiB'>219136</currentMemory>
-+  <vcpu placement='static'>1</vcpu>
-+  <os>
-+    <type arch='s390x' machine='s390-ccw-virtio'>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-s390x</emulator>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='qcow2' cache='none' error_policy='stop'/>
-+      <source file='/var/images/image1'/>
-+      <target dev='vda' bus='virtio'/>
-+      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/>
-+    </disk>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='qcow2' cache='none' error_policy='enospace'/>
-+      <source file='/var/images/image2'/>
-+      <target dev='vdb' bus='virtio'/>
-+      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0001'/>
-+    </disk>
-+    <disk type='file' device='disk'>
-+      <driver name='qemu' type='qcow2' cache='none' error_policy='report' rerror_policy='ignore'/>
-+      <source file='/var/images/image3'/>
-+      <target dev='vdc' bus='virtio'/>
-+      <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/>
-+    </disk>
-+    <memballoon model='none'/>
-+  </devices>
-+</domain>
-diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
-index 7bc01d55d5..d6c5f436ae 100644
---- a/tests/qemuxml2argvtest.c
-+++ b/tests/qemuxml2argvtest.c
-@@ -1051,6 +1051,8 @@ mymain(void)
-     DO_TEST("disk-error-policy", NONE);
-     DO_TEST_CAPS_VER("disk-error-policy", "2.12.0");
-     DO_TEST_CAPS_LATEST("disk-error-policy");
-+    DO_TEST_CAPS_ARCH_VER("disk-error-policy-s390x", "s390x", "2.12.0");
-+    DO_TEST_CAPS_ARCH_LATEST("disk-error-policy-s390x", "s390x");
-     DO_TEST_CAPS_VER("disk-cache", "1.5.3");
-     DO_TEST_CAPS_VER("disk-cache", "2.6.0");
-     DO_TEST_CAPS_VER("disk-cache", "2.7.0");
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-cases-for-creating-image-overlays-on-top-of-disks-with-slice.patch b/SOURCES/libvirt-tests-qemublock-Add-cases-for-creating-image-overlays-on-top-of-disks-with-slice.patch
deleted file mode 100644
index a678628..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-cases-for-creating-image-overlays-on-top-of-disks-with-slice.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 54c8ab3178409f52113c99dca660c1024573ef7e Mon Sep 17 00:00:00 2001
-Message-Id: <54c8ab3178409f52113c99dca660c1024573ef7e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:23 +0100
-Subject: [PATCH] tests: qemublock: Add cases for creating image overlays on
- top of disks with <slice>
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a set of test data to see whether the backing store strings are
-formatted reasonably. Note that we don't support direct creation of such
-images so those tests are not enabled.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9b804ef5efcd3b1e91bbf75f4e94a35630c062c5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <6639bab2e1e9dbdf13471057a1cb3accd1c30549.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                             |  2 ++
- .../imagecreate/qcow2-backing-qcow2-slice.json    | 15 +++++++++++++++
- .../imagecreate/qcow2-backing-qcow2-slice.xml     |  1 +
- .../imagecreate/qcow2-backing-raw-slice.json      | 15 +++++++++++++++
- .../imagecreate/qcow2-backing-raw-slice.xml       |  1 +
- .../qemublocktestdata/imagecreate/qcow2-slice.xml | 14 ++++++++++++++
- tests/qemublocktestdata/imagecreate/raw-slice.xml | 14 ++++++++++++++
- 7 files changed, 62 insertions(+)
- create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json
- create mode 120000 tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.xml
- create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json
- create mode 120000 tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.xml
- create mode 100644 tests/qemublocktestdata/imagecreate/qcow2-slice.xml
- create mode 100644 tests/qemublocktestdata/imagecreate/raw-slice.xml
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index f66d894aed..29af0781fc 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1060,6 +1060,8 @@ mymain(void)
-     TEST_IMAGE_CREATE("qcow2-backing-raw-nbd", "raw-nbd");
-     TEST_IMAGE_CREATE("qcow2-backing-luks", "luks-noopts");
-     TEST_IMAGE_CREATE("qcow2-luks-encopts-backing", "qcow2");
-+    TEST_IMAGE_CREATE("qcow2-backing-raw-slice", "raw-slice");
-+    TEST_IMAGE_CREATE("qcow2-backing-qcow2-slice", "qcow2-slice");
- 
-     TEST_IMAGE_CREATE("network-gluster-qcow2", NULL);
-     TEST_IMAGE_CREATE("network-rbd-qcow2", NULL);
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json
-new file mode 100644
-index 0000000000..2fa27c1933
---- /dev/null
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.json
-@@ -0,0 +1,15 @@
-+protocol:
-+{
-+  "driver": "file",
-+  "filename": "/var/lib/libvirt/images/i.qcow2",
-+  "size": 4294967296
-+}
-+
-+format:
-+{
-+  "driver": "qcow2",
-+  "file": "0123456789ABCDEF0123456789ABCDE",
-+  "size": 8589934590,
-+  "backing-file": "json:{\"driver\":\"raw\",\"offset\":1234,\"size\":5768,\"file\":{\"driver\":\"file\",\"filename\":\"/var/lib/libvirt/images/i.qcow2\"}}",
-+  "backing-fmt": "qcow2"
-+}
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.xml b/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.xml
-new file mode 120000
-index 0000000000..5769c2c866
---- /dev/null
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.xml
-@@ -0,0 +1 @@
-+qcow2.xml
-\ No newline at end of file
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json
-new file mode 100644
-index 0000000000..761002afd9
---- /dev/null
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.json
-@@ -0,0 +1,15 @@
-+protocol:
-+{
-+  "driver": "file",
-+  "filename": "/var/lib/libvirt/images/i.qcow2",
-+  "size": 4294967296
-+}
-+
-+format:
-+{
-+  "driver": "qcow2",
-+  "file": "0123456789ABCDEF0123456789ABCDE",
-+  "size": 8589934590,
-+  "backing-file": "json:{\"driver\":\"raw\",\"offset\":9876,\"size\":54321,\"file\":{\"driver\":\"file\",\"filename\":\"/var/lib/libvirt/images/i.img\"}}",
-+  "backing-fmt": "raw"
-+}
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.xml b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.xml
-new file mode 120000
-index 0000000000..5769c2c866
---- /dev/null
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.xml
-@@ -0,0 +1 @@
-+qcow2.xml
-\ No newline at end of file
-diff --git a/tests/qemublocktestdata/imagecreate/qcow2-slice.xml b/tests/qemublocktestdata/imagecreate/qcow2-slice.xml
-new file mode 100644
-index 0000000000..6c5ae3107b
---- /dev/null
-+++ b/tests/qemublocktestdata/imagecreate/qcow2-slice.xml
-@@ -0,0 +1,14 @@
-+<disk device='disk' name='vda'>
-+  <driver type='qcow2'/>
-+  <source file='/var/lib/libvirt/images/i.qcow2'>
-+    <slices>
-+      <slice type='storage' offset='1234' size='5768'/>
-+    </slices>
-+    <privateData>
-+      <nodenames>
-+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
-+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
-+      </nodenames>
-+    </privateData>
-+  </source>
-+</disk>
-diff --git a/tests/qemublocktestdata/imagecreate/raw-slice.xml b/tests/qemublocktestdata/imagecreate/raw-slice.xml
-new file mode 100644
-index 0000000000..adc7a175ce
---- /dev/null
-+++ b/tests/qemublocktestdata/imagecreate/raw-slice.xml
-@@ -0,0 +1,14 @@
-+<disk device='disk' name='vda'>
-+  <driver type='raw'/>
-+  <source file='/var/lib/libvirt/images/i.img'>
-+    <slices>
-+      <slice type='storage' offset='9876' size='54321'/>
-+    </slices>
-+    <privateData>
-+      <nodenames>
-+        <nodename type='storage' name='0123456789ABCDEF0123456789ABCDE'/>
-+        <nodename type='format' name='0123456789ABCDEF0123456789ABCDE'/>
-+      </nodenames>
-+    </privateData>
-+  </source>
-+</disk>
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-checkpoint-deletion-test-for-deep-backing-chain.patch b/SOURCES/libvirt-tests-qemublock-Add-checkpoint-deletion-test-for-deep-backing-chain.patch
deleted file mode 100644
index cdbf03f..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-checkpoint-deletion-test-for-deep-backing-chain.patch
+++ /dev/null
@@ -1,276 +0,0 @@
-From 5694a24b527b812e7236a7316271f4ae316e4caa Mon Sep 17 00:00:00 2001
-Message-Id: <5694a24b527b812e7236a7316271f4ae316e4caa@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:13 +0100
-Subject: [PATCH] tests: qemublock: Add checkpoint deletion test for deep
- backing chain
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add test cases for merging various pairs of bitmaps when snapshots were
-created together with checkpoints.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3c1c35bada75052b73d224d80fb5c3747a664823)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <06d3c8ebd023583de6c9d5033fc38a2757ecf8e2.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  6 ++
- .../snapshots-current-out.json                | 29 +++++++++
- .../snapshots-intermediate1-out.json          | 22 +++++++
- .../snapshots-intermediate2-out.json          | 59 +++++++++++++++++++
- .../snapshots-intermediate3-out.json          | 59 +++++++++++++++++++
- .../snapshots-noparent-out.json               | 23 ++++++++
- 6 files changed, 198 insertions(+)
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index e56f813424..897b86f970 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1015,6 +1015,12 @@ mymain(void)
-     TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate3", "d", "c", "basic");
-     TEST_CHECKPOINT_DELETE_MERGE("basic-current", "current", "d", "basic");
- 
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-noparent", "a", NULL, "snapshots");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate1", "b", "a", "snapshots");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate2", "c", "b", "snapshots");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate3", "d", "c", "snapshots");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-current", "current", "d", "snapshots");
-+
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
-new file mode 100644
-index 0000000000..1b607567e8
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-current-out.json
-@@ -0,0 +1,29 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "current"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-new file mode 100644
-index 0000000000..29fefeea63
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate1-out.json
-@@ -0,0 +1,22 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-new file mode 100644
-index 0000000000..4da21a9df7
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate2-out.json
-@@ -0,0 +1,59 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "c"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-new file mode 100644
-index 0000000000..dc87dd60b8
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-intermediate3-out.json
-@@ -0,0 +1,59 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-new file mode 100644
-index 0000000000..45a84b47c2
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-noparent-out.json
-@@ -0,0 +1,23 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-checkpoint-deletion-tests-for-some-special-cases.patch b/SOURCES/libvirt-tests-qemublock-Add-checkpoint-deletion-tests-for-some-special-cases.patch
deleted file mode 100644
index 354178a..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-checkpoint-deletion-tests-for-some-special-cases.patch
+++ /dev/null
@@ -1,257 +0,0 @@
-From 686c7592b99c1e2c4831f14c4e101a4ab039c45e Mon Sep 17 00:00:00 2001
-Message-Id: <686c7592b99c1e2c4831f14c4e101a4ab039c45e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:14 +0100
-Subject: [PATCH] tests: qemublock: Add checkpoint deletion tests for some
- special cases
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the synthetic test data to verify that the algorithm correctly picks
-bitmaps to merge when the bitmap is changed along with the image itself.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 065e548ebf0e39c8f9d30d0637ecfa84803d8f98)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <c34b7a28b9943b6cf7546eb2ac4d4bf95a164f11.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  7 +++
- ...hots-synthetic-checkpoint-current-out.json | 29 +++++++++
- ...ynthetic-checkpoint-intermediate1-out.json | 29 +++++++++
- ...ynthetic-checkpoint-intermediate2-out.json | 32 ++++++++++
- ...ynthetic-checkpoint-intermediate3-out.json | 59 +++++++++++++++++++
- ...ots-synthetic-checkpoint-noparent-out.json | 23 ++++++++
- 6 files changed, 179 insertions(+)
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 897b86f970..2e5927f3c1 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1021,6 +1021,13 @@ mymain(void)
-     TEST_CHECKPOINT_DELETE_MERGE("snapshots-intermediate3", "d", "c", "snapshots");
-     TEST_CHECKPOINT_DELETE_MERGE("snapshots-current", "current", "d", "snapshots");
- 
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-noparent", "a", NULL, "snapshots-synthetic-checkpoint");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate1", "b", "a", "snapshots-synthetic-checkpoint");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate2", "c", "b", "snapshots-synthetic-checkpoint");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-intermediate3", "d", "c", "snapshots-synthetic-checkpoint");
-+    TEST_CHECKPOINT_DELETE_MERGE("snapshots-synthetic-checkpoint-current", "current", "d", "snapshots-synthetic-checkpoint");
-+
-+
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json
-new file mode 100644
-index 0000000000..1b607567e8
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-current-out.json
-@@ -0,0 +1,29 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "current"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-new file mode 100644
-index 0000000000..e979691e6f
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate1-out.json
-@@ -0,0 +1,29 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "b"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-new file mode 100644
-index 0000000000..e82098918a
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate2-out.json
-@@ -0,0 +1,32 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-new file mode 100644
-index 0000000000..dc87dd60b8
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-intermediate3-out.json
-@@ -0,0 +1,59 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "c"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-2-format",
-+      "name": "d"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-new file mode 100644
-index 0000000000..45a84b47c2
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/snapshots-synthetic-checkpoint-noparent-out.json
-@@ -0,0 +1,23 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-3-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-4-format",
-+      "name": "a"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-5-format",
-+      "name": "a"
-+    }
-+  }
-+]
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-few-more-test-cases-for-checkpoint-deletion.patch b/SOURCES/libvirt-tests-qemublock-Add-few-more-test-cases-for-checkpoint-deletion.patch
deleted file mode 100644
index 3116da7..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-few-more-test-cases-for-checkpoint-deletion.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-From 06865f5dd0f1616a7f3ac8bc8edd259b362718ce Mon Sep 17 00:00:00 2001
-Message-Id: <06865f5dd0f1616a7f3ac8bc8edd259b362718ce@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:10 +0100
-Subject: [PATCH] tests: qemublock: Add few more test cases for checkpoint
- deletion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add all intermediate steps and deletion of the current checkpoint on a
-flat (single-image) disk image.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 0cf33ab8f178846c0b961fbc4cc6a4e92d351310)a
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <4b1466cba585cb4125ffda7fd2af4ab01d714f79.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  4 +++
- .../checkpointdelete/basic-current-out.json   | 29 +++++++++++++++++++
- .../basic-intermediate1-out.json              | 22 ++++++++++++++
- .../basic-intermediate2-out.json              | 22 ++++++++++++++
- .../basic-intermediate3-out.json              | 22 ++++++++++++++
- 5 files changed, 99 insertions(+)
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-current-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 80355d1340..f48e4ce4b2 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -999,6 +999,10 @@ mymain(void)
-     } while (0)
- 
-     TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL);
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate1", "b", "a");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate2", "c", "b");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-intermediate3", "d", "c");
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-current", "current", "d");
- 
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-current-out.json b/tests/qemublocktestdata/checkpointdelete/basic-current-out.json
-new file mode 100644
-index 0000000000..1b607567e8
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-current-out.json
-@@ -0,0 +1,29 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-enable",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "current"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
-new file mode 100644
-index 0000000000..eccb7ed15f
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-intermediate1-out.json
-@@ -0,0 +1,22 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "b"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
-new file mode 100644
-index 0000000000..de40e4b5b0
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-intermediate2-out.json
-@@ -0,0 +1,22 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "c"
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json b/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-new file mode 100644
-index 0000000000..b5d85f43f0
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-intermediate3-out.json
-@@ -0,0 +1,22 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "d"
-+    }
-+  }
-+]
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-synthetic-snapshot-checkpoint-test-data.patch b/SOURCES/libvirt-tests-qemublock-Add-synthetic-snapshot-checkpoint-test-data.patch
deleted file mode 100644
index 1d03e68..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-synthetic-snapshot-checkpoint-test-data.patch
+++ /dev/null
@@ -1,896 +0,0 @@
-From e79ccc88c3668567bf656cd0113ca46058ef8f00 Mon Sep 17 00:00:00 2001
-Message-Id: <e79ccc88c3668567bf656cd0113ca46058ef8f00@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:11 +0100
-Subject: [PATCH] tests: qemublock: Add synthetic snapshot+checkpoint test data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a faked qemu output which would simulate scenario where libvirt
-would take a snapshot and checkpoint simultaneously. This is visible in
-libvirt-2-format node where bitmap 'c' appears, but bitmap 'b' which is
-active in the previous layer is not present.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit d7d97e87afe00b58e23291cafb0ddb8aec3894d6)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <16c6b0162647c59d81b2b0ceb5ebc5f03c029285.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |   1 +
- .../snapshots-synthetic-checkpoint.json       | 827 ++++++++++++++++++
- .../bitmap/snapshots-synthetic-checkpoint.out |  13 +
- 3 files changed, 841 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json
- create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index f48e4ce4b2..edaf82053d 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -966,6 +966,7 @@ mymain(void)
-     TEST_BITMAP_DETECT("basic");
-     TEST_BITMAP_DETECT("synthetic");
-     TEST_BITMAP_DETECT("snapshots");
-+    TEST_BITMAP_DETECT("snapshots-synthetic-checkpoint");
- 
- #define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
-     do { \
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json b/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json
-new file mode 100644
-index 0000000000..25cc150d67
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.json
-@@ -0,0 +1,827 @@
-+[
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "backing-image": {
-+                    "backing-image": {
-+                        "backing-image": {
-+                            "virtual-size": 10485760,
-+                            "filename": "/tmp/pull4.qcow2",
-+                            "cluster-size": 65536,
-+                            "format": "qcow2",
-+                            "actual-size": 208896,
-+                            "format-specific": {
-+                                "type": "qcow2",
-+                                "data": {
-+                                    "compat": "1.1",
-+                                    "lazy-refcounts": false,
-+                                    "bitmaps": [
-+                                        {
-+                                            "flags": [
-+                                                "auto"
-+                                            ],
-+                                            "name": "a",
-+                                            "granularity": 65536
-+                                        }
-+                                    ],
-+                                    "refcount-bits": 16,
-+                                    "corrupt": false
-+                                }
-+                            },
-+                            "dirty-flag": false
-+                        },
-+                        "backing-filename-format": "qcow2",
-+                        "virtual-size": 10485760,
-+                        "filename": "/tmp/pull4.1575911522",
-+                        "cluster-size": 65536,
-+                        "format": "qcow2",
-+                        "actual-size": 208896,
-+                        "format-specific": {
-+                            "type": "qcow2",
-+                            "data": {
-+                                "compat": "1.1",
-+                                "lazy-refcounts": false,
-+                                "bitmaps": [
-+                                    {
-+                                        "flags": [
-+                                            "auto"
-+                                        ],
-+                                        "name": "a",
-+                                        "granularity": 65536
-+                                    }
-+                                ],
-+                                "refcount-bits": 16,
-+                                "corrupt": false
-+                            }
-+                        },
-+                        "full-backing-filename": "/tmp/pull4.qcow2",
-+                        "backing-filename": "/tmp/pull4.qcow2",
-+                        "dirty-flag": false
-+                    },
-+                    "backing-filename-format": "qcow2",
-+                    "virtual-size": 10485760,
-+                    "filename": "/tmp/pull4.1575911527",
-+                    "cluster-size": 65536,
-+                    "format": "qcow2",
-+                    "actual-size": 217088,
-+                    "format-specific": {
-+                        "type": "qcow2",
-+                        "data": {
-+                            "compat": "1.1",
-+                            "lazy-refcounts": false,
-+                            "bitmaps": [
-+                                {
-+                                    "flags": [
-+                                        "auto"
-+                                    ],
-+                                    "name": "c",
-+                                    "granularity": 65536
-+                                },
-+                                {
-+                                    "flags": [
-+
-+                                    ],
-+                                    "name": "b",
-+                                    "granularity": 65536
-+                                },
-+                                {
-+                                    "flags": [
-+
-+                                    ],
-+                                    "name": "a",
-+                                    "granularity": 65536
-+                                }
-+                            ],
-+                            "refcount-bits": 16,
-+                            "corrupt": false
-+                        }
-+                    },
-+                    "full-backing-filename": "/tmp/pull4.1575911522",
-+                    "backing-filename": "/tmp/pull4.1575911522",
-+                    "dirty-flag": false
-+                },
-+                "backing-filename-format": "qcow2",
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.1575911540",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 212992,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "d",
-+                                "granularity": 65536
-+                            },
-+                            {
-+                                "flags": [
-+
-+                                ],
-+                                "name": "c",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "full-backing-filename": "/tmp/pull4.1575911527",
-+                "backing-filename": "/tmp/pull4.1575911527",
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911550",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 212992,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "in-use",
-+                                "auto"
-+                            ],
-+                            "name": "current",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+                                "in-use"
-+                            ],
-+                            "name": "d",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.1575911540",
-+            "backing-filename": "/tmp/pull4.1575911540",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-1-format",
-+        "backing_file_depth": 4,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.1575911540",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "d",
-+                "recording": false,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "current",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911550",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 393728,
-+            "filename": "/tmp/pull4.1575911550",
-+            "format": "file",
-+            "actual-size": 212992,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-1-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911550",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "backing-image": {
-+                    "backing-image": {
-+                        "virtual-size": 10485760,
-+                        "filename": "/tmp/pull4.qcow2",
-+                        "cluster-size": 65536,
-+                        "format": "qcow2",
-+                        "actual-size": 208896,
-+                        "format-specific": {
-+                            "type": "qcow2",
-+                            "data": {
-+                                "compat": "1.1",
-+                                "lazy-refcounts": false,
-+                                "bitmaps": [
-+                                    {
-+                                        "flags": [
-+                                            "auto"
-+                                        ],
-+                                        "name": "a",
-+                                        "granularity": 65536
-+                                    }
-+                                ],
-+                                "refcount-bits": 16,
-+                                "corrupt": false
-+                            }
-+                        },
-+                        "dirty-flag": false
-+                    },
-+                    "backing-filename-format": "qcow2",
-+                    "virtual-size": 10485760,
-+                    "filename": "/tmp/pull4.1575911522",
-+                    "cluster-size": 65536,
-+                    "format": "qcow2",
-+                    "actual-size": 208896,
-+                    "format-specific": {
-+                        "type": "qcow2",
-+                        "data": {
-+                            "compat": "1.1",
-+                            "lazy-refcounts": false,
-+                            "bitmaps": [
-+                                {
-+                                    "flags": [
-+                                        "auto"
-+                                    ],
-+                                    "name": "a",
-+                                    "granularity": 65536
-+                                }
-+                            ],
-+                            "refcount-bits": 16,
-+                            "corrupt": false
-+                        }
-+                    },
-+                    "full-backing-filename": "/tmp/pull4.qcow2",
-+                    "backing-filename": "/tmp/pull4.qcow2",
-+                    "dirty-flag": false
-+                },
-+                "backing-filename-format": "qcow2",
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.1575911527",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 217088,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "c",
-+                                "granularity": 65536
-+                            },
-+                            {
-+                                "flags": [
-+
-+                                ],
-+                                "name": "b",
-+                                "granularity": 65536
-+                            },
-+                            {
-+                                "flags": [
-+
-+                                ],
-+                                "name": "a",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "full-backing-filename": "/tmp/pull4.1575911522",
-+                "backing-filename": "/tmp/pull4.1575911522",
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911540",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 212992,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "d",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+
-+                            ],
-+                            "name": "c",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.1575911527",
-+            "backing-filename": "/tmp/pull4.1575911527",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-2-format",
-+        "backing_file_depth": 3,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.1575911527",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "c",
-+                "recording": false,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "d",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911540",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 393728,
-+            "filename": "/tmp/pull4.1575911540",
-+            "format": "file",
-+            "actual-size": 212992,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-2-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911540",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "backing-image": {
-+                    "virtual-size": 10485760,
-+                    "filename": "/tmp/pull4.qcow2",
-+                    "cluster-size": 65536,
-+                    "format": "qcow2",
-+                    "actual-size": 208896,
-+                    "format-specific": {
-+                        "type": "qcow2",
-+                        "data": {
-+                            "compat": "1.1",
-+                            "lazy-refcounts": false,
-+                            "bitmaps": [
-+                                {
-+                                    "flags": [
-+                                        "auto"
-+                                    ],
-+                                    "name": "a",
-+                                    "granularity": 65536
-+                                }
-+                            ],
-+                            "refcount-bits": 16,
-+                            "corrupt": false
-+                        }
-+                    },
-+                    "dirty-flag": false
-+                },
-+                "backing-filename-format": "qcow2",
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.1575911522",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 208896,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "a",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "full-backing-filename": "/tmp/pull4.qcow2",
-+                "backing-filename": "/tmp/pull4.qcow2",
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911527",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 217088,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "c",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+
-+                            ],
-+                            "name": "b",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+
-+                            ],
-+                            "name": "a",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.1575911522",
-+            "backing-filename": "/tmp/pull4.1575911522",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-3-format",
-+        "backing_file_depth": 2,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.1575911522",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "a",
-+                "recording": false,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "b",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911527",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 459264,
-+            "filename": "/tmp/pull4.1575911527",
-+            "format": "file",
-+            "actual-size": 217088,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-3-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911527",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.qcow2",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 208896,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "a",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911522",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 208896,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "a",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.qcow2",
-+            "backing-filename": "/tmp/pull4.qcow2",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-4-format",
-+        "backing_file_depth": 1,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.qcow2",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "a",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911522",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 328192,
-+            "filename": "/tmp/pull4.1575911522",
-+            "format": "file",
-+            "actual-size": 208896,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-4-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911522",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.qcow2",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 208896,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "a",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-5-format",
-+        "backing_file_depth": 0,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "dirty-bitmaps": [
-+            {
-+                "name": "a",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.qcow2",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 328192,
-+            "filename": "/tmp/pull4.qcow2",
-+            "format": "file",
-+            "actual-size": 208896,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-5-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.qcow2",
-+        "encryption_key_missing": false
-+    }
-+]
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out b/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out
-new file mode 100644
-index 0000000000..0270657001
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/snapshots-synthetic-checkpoint.out
-@@ -0,0 +1,13 @@
-+libvirt-1-format:
-+        d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+  current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-2-format:
-+        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        d: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-3-format:
-+        a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-4-format:
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-5-format:
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-test-for-checkpoint-deletion-bitmap-merge.patch b/SOURCES/libvirt-tests-qemublock-Add-test-for-checkpoint-deletion-bitmap-merge.patch
deleted file mode 100644
index 097acec..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-test-for-checkpoint-deletion-bitmap-merge.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From c71d50132b3ac8dcfefc1acc11ab5d5bd7bc024a Mon Sep 17 00:00:00 2001
-Message-Id: <c71d50132b3ac8dcfefc1acc11ab5d5bd7bc024a@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:09 +0100
-Subject: [PATCH] tests: qemublock: Add test for checkpoint deletion bitmap
- merge
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add test infrastructure and a basic test for bitmap deletion.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 25f74899720afce52dcf01f230da5c816deaea71)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <50b8789a34b762114b6ea2f87bba1a130be206de.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         | 59 +++++++++++++++++++
- .../checkpointdelete/basic-noparent-out.json  |  9 +++
- 2 files changed, 68 insertions(+)
- create mode 100644 tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 7ff6a6b17b..80355d1340 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -27,6 +27,7 @@
- #include "qemu/qemu_qapi.h"
- #include "qemu/qemu_monitor_json.h"
- #include "qemu/qemu_backup.h"
-+#include "qemu/qemu_checkpoint.h"
- 
- #include "qemu/qemu_command.h"
- 
-@@ -696,6 +697,50 @@ testQemuBackupIncrementalBitmapCalculate(const void *opaque)
- }
- 
- 
-+static const char *checkpointDeletePrefix = "qemublocktestdata/checkpointdelete/";
-+
-+struct testQemuCheckpointDeleteMergeData {
-+    const char *name;
-+    virStorageSourcePtr chain;
-+    const char *deletebitmap;
-+    const char *parentbitmap;
-+};
-+
-+
-+static int
-+testQemuCheckpointDeleteMerge(const void *opaque)
-+{
-+    const struct testQemuCheckpointDeleteMergeData *data = opaque;
-+    g_autofree char *actual = NULL;
-+    g_autofree char *expectpath = NULL;
-+    g_autoptr(virJSONValue) actions = NULL;
-+    bool currentcheckpoint;
-+
-+    expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
-+                                 checkpointDeletePrefix, data->name);
-+
-+    if (!(actions = virJSONValueNewArray()))
-+        return -1;
-+
-+    /* hack to get the 'current' state until the function stops accepting it */
-+    currentcheckpoint = STREQ("current", data->deletebitmap);
-+
-+    if (qemuCheckpointDiscardDiskBitmaps(data->chain,
-+                                         data->deletebitmap,
-+                                         data->parentbitmap,
-+                                         currentcheckpoint,
-+                                         actions) < 0) {
-+        VIR_TEST_VERBOSE("failed to generate checkpoint delete transaction\n");
-+        return -1;
-+    }
-+
-+    if (!(actual = virJSONValueToString(actions, true)))
-+        return -1;
-+
-+    return virTestCompareToFile(actual, expectpath);
-+}
-+
-+
- static int
- mymain(void)
- {
-@@ -705,6 +750,7 @@ mymain(void)
-     struct testQemuDiskXMLToJSONData diskxmljsondata;
-     struct testQemuImageCreateData imagecreatedata;
-     struct testQemuBackupIncrementalBitmapCalculateData backupbitmapcalcdata;
-+    struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
-     char *capslatest_x86_64 = NULL;
-     virQEMUCapsPtr caps_x86_64 = NULL;
-     g_autoptr(virStorageSource) bitmapSourceChain = NULL;
-@@ -941,6 +987,19 @@ mymain(void)
-     TEST_BACKUP_BITMAP_CALCULATE("snapshot-intermediate", bitmapSourceChain, "d", "snapshots");
-     TEST_BACKUP_BITMAP_CALCULATE("snapshot-deep", bitmapSourceChain, "a", "snapshots");
- 
-+#define TEST_CHECKPOINT_DELETE_MERGE(testname, delbmp, parbmp) \
-+    do { \
-+        checkpointdeletedata.name = testname; \
-+        checkpointdeletedata.chain = bitmapSourceChain; \
-+        checkpointdeletedata.deletebitmap = delbmp; \
-+        checkpointdeletedata.parentbitmap = parbmp; \
-+        if (virTestRun("checkpoint delete " testname, \
-+                       testQemuCheckpointDeleteMerge, &checkpointdeletedata) < 0) \
-+        ret = -1; \
-+    } while (0)
-+
-+    TEST_CHECKPOINT_DELETE_MERGE("basic-noparent", "a", NULL);
-+
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
-diff --git a/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-new file mode 100644
-index 0000000000..e87382fdb4
---- /dev/null
-+++ b/tests/qemublocktestdata/checkpointdelete/basic-noparent-out.json
-@@ -0,0 +1,9 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-remove",
-+    "data": {
-+      "node": "libvirt-1-format",
-+      "name": "a"
-+    }
-+  }
-+]
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublock-Add-tests-for-qemuBlockBitmapsHandleBlockcopy.patch b/SOURCES/libvirt-tests-qemublock-Add-tests-for-qemuBlockBitmapsHandleBlockcopy.patch
deleted file mode 100644
index 8523a0b..0000000
--- a/SOURCES/libvirt-tests-qemublock-Add-tests-for-qemuBlockBitmapsHandleBlockcopy.patch
+++ /dev/null
@@ -1,577 +0,0 @@
-From 736c0d3748605b553f065332855b61291503ac25 Mon Sep 17 00:00:00 2001
-Message-Id: <736c0d3748605b553f065332855b61291503ac25@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:26 +0100
-Subject: [PATCH] tests: qemublock: Add tests for
- qemuBlockBitmapsHandleBlockcopy
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use some of the existing bitmap data to add tests for
-qemuBlockBitmapsHandleBlockcopy.
-
-As the output depends on the ordering in the hash table we must also
-install the "virdeterministichash" mock preload library.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 9b13af73ac336fb1d93ef15e30204fbf9c7e536f)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <095e8e63f87edfd7924a8e8d8a4a8def04022d77.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |  71 +++++++++-
- .../bitmapblockcopy/basic-deep-out.json       | 117 +++++++++++++++
- .../bitmapblockcopy/basic-shallow-out.json    | 117 +++++++++++++++
- .../bitmapblockcopy/snapshots-deep-out.json   | 133 ++++++++++++++++++
- .../snapshots-shallow-out.json                |  48 +++++++
- 5 files changed, 485 insertions(+), 1 deletion(-)
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
- create mode 100644 tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 3208e90e41..f66d894aed 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -799,6 +799,56 @@ testQemuBlockBitmapValidate(const void *opaque)
- }
- 
- 
-+static const char *blockcopyPrefix = "qemublocktestdata/bitmapblockcopy/";
-+
-+struct testQemuBlockBitmapBlockcopyData {
-+    const char *name;
-+    bool shallow;
-+    virStorageSourcePtr chain;
-+    const char *nodedatafile;
-+};
-+
-+
-+static int
-+testQemuBlockBitmapBlockcopy(const void *opaque)
-+{
-+    const struct testQemuBlockBitmapBlockcopyData *data = opaque;
-+    g_autofree char *actual = NULL;
-+    g_autofree char *expectpath = NULL;
-+    g_autoptr(virJSONValue) actions = NULL;
-+    g_autoptr(virJSONValue) nodedatajson = NULL;
-+    g_autoptr(virHashTable) nodedata = NULL;
-+    g_autoptr(virStorageSource) fakemirror = virStorageSourceNew();
-+
-+    if (!fakemirror)
-+        return -1;
-+
-+    fakemirror->nodeformat = g_strdup("mirror-format-node");
-+
-+    expectpath = g_strdup_printf("%s/%s%s-out.json", abs_srcdir,
-+                                 blockcopyPrefix, data->name);
-+
-+    if (!(nodedatajson = virTestLoadFileJSON(bitmapDetectPrefix, data->nodedatafile,
-+                                             ".json", NULL)))
-+        return -1;
-+
-+    if (!(nodedata = qemuMonitorJSONBlockGetNamedNodeDataJSON(nodedatajson))) {
-+        VIR_TEST_VERBOSE("failed to load nodedata JSON\n");
-+        return -1;
-+    }
-+
-+    if (qemuBlockBitmapsHandleBlockcopy(data->chain, fakemirror, nodedata,
-+                                        data->shallow, &actions) < 0)
-+        return -1;
-+
-+    if (actions &&
-+        !(actual = virJSONValueToString(actions, true)))
-+        return -1;
-+
-+    return virTestCompareToFile(actual, expectpath);
-+}
-+
-+
- static int
- mymain(void)
- {
-@@ -810,6 +860,7 @@ mymain(void)
-     struct testQemuBackupIncrementalBitmapCalculateData backupbitmapcalcdata;
-     struct testQemuCheckpointDeleteMergeData checkpointdeletedata;
-     struct testQemuBlockBitmapValidateData blockbitmapvalidatedata;
-+    struct testQemuBlockBitmapBlockcopyData blockbitmapblockcopydata;
-     char *capslatest_x86_64 = NULL;
-     virQEMUCapsPtr caps_x86_64 = NULL;
-     g_autoptr(virStorageSource) bitmapSourceChain = NULL;
-@@ -1120,6 +1171,24 @@ mymain(void)
-     TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "d", false);
-     TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "current", true);
- 
-+#define TEST_BITMAP_BLOCKCOPY(testname, shllw, ndf) \
-+    do { \
-+        blockbitmapblockcopydata.name = testname; \
-+        blockbitmapblockcopydata.shallow = shllw; \
-+        blockbitmapblockcopydata.nodedatafile = ndf; \
-+        blockbitmapblockcopydata.chain = bitmapSourceChain;\
-+        if (virTestRun("bitmap block copy " testname, \
-+                       testQemuBlockBitmapBlockcopy, \
-+                       &blockbitmapblockcopydata) < 0) \
-+            ret = -1; \
-+    } while (0)
-+
-+    TEST_BITMAP_BLOCKCOPY("basic-shallow", true, "basic");
-+    TEST_BITMAP_BLOCKCOPY("basic-deep", false, "basic");
-+
-+    TEST_BITMAP_BLOCKCOPY("snapshots-shallow", true, "snapshots");
-+    TEST_BITMAP_BLOCKCOPY("snapshots-deep", false, "snapshots");
-+
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
-@@ -1129,4 +1198,4 @@ mymain(void)
-     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
- 
--VIR_TEST_MAIN(mymain)
-+VIR_TEST_MAIN_PRELOAD(mymain, VIR_TEST_MOCK("virdeterministichash"))
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
-new file mode 100644
-index 0000000000..4ed2b97e95
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/basic-deep-out.json
-@@ -0,0 +1,117 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
-new file mode 100644
-index 0000000000..4ed2b97e95
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/basic-shallow-out.json
-@@ -0,0 +1,117 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json b/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
-new file mode 100644
-index 0000000000..5456553d78
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/snapshots-deep-out.json
-@@ -0,0 +1,133 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "a",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "a",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-4-format",
-+          "name": "a"
-+        },
-+        {
-+          "node": "libvirt-5-format",
-+          "name": "a"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "b",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "b",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "b"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "c",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "c",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "c"
-+        },
-+        {
-+          "node": "libvirt-3-format",
-+          "name": "c"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        },
-+        {
-+          "node": "libvirt-2-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
-diff --git a/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json b/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-new file mode 100644
-index 0000000000..ddd47f7ee1
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmapblockcopy/snapshots-shallow-out.json
-@@ -0,0 +1,48 @@
-+[
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "current",
-+      "persistent": true,
-+      "disabled": false,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "current",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "current"
-+        }
-+      ]
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-add",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "name": "d",
-+      "persistent": true,
-+      "disabled": true,
-+      "granularity": 65536
-+    }
-+  },
-+  {
-+    "type": "block-dirty-bitmap-merge",
-+    "data": {
-+      "node": "mirror-format-node",
-+      "target": "d",
-+      "bitmaps": [
-+        {
-+          "node": "libvirt-1-format",
-+          "name": "d"
-+        }
-+      ]
-+    }
-+  }
-+]
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemublocktest-Add-another-synthetic-test-case-for-broken-bitmaps.patch b/SOURCES/libvirt-tests-qemublocktest-Add-another-synthetic-test-case-for-broken-bitmaps.patch
deleted file mode 100644
index 8fa3519..0000000
--- a/SOURCES/libvirt-tests-qemublocktest-Add-another-synthetic-test-case-for-broken-bitmaps.patch
+++ /dev/null
@@ -1,900 +0,0 @@
-From 51214acf9b65be8575eac8ff82d63e5c260a48fe Mon Sep 17 00:00:00 2001
-Message-Id: <51214acf9b65be8575eac8ff82d63e5c260a48fe@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:24 +0100
-Subject: [PATCH] tests: qemublocktest: Add another synthetic test case for
- broken bitmaps
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a case where a bitmap spanning multiple images is missing one of the
-intermediate components.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 8e29a8b151f59a53d2bb57bb58074185088f38f0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <0a1a64d620d9770afda50efc0e82c67dd3c2ae19.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemublocktest.c                         |   8 +
- .../bitmap/snapshots-synthetic-broken.json    | 819 ++++++++++++++++++
- .../bitmap/snapshots-synthetic-broken.out     |  12 +
- 3 files changed, 839 insertions(+)
- create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
- create mode 100644 tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 6a7b07cfee..3208e90e41 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -1026,6 +1026,7 @@ mymain(void)
-     TEST_BITMAP_DETECT("synthetic");
-     TEST_BITMAP_DETECT("snapshots");
-     TEST_BITMAP_DETECT("snapshots-synthetic-checkpoint");
-+    TEST_BITMAP_DETECT("snapshots-synthetic-broken");
- 
- #define TEST_BACKUP_BITMAP_CALCULATE(testname, source, incrbackup, named) \
-     do { \
-@@ -1112,6 +1113,13 @@ mymain(void)
-     TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "c", true);
-     TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "d", true);
-     TEST_BITMAP_VALIDATE("snapshots-synthetic-checkpoint", "current", true);
-+
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "a", false);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "b", true);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "c", true);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "d", false);
-+    TEST_BITMAP_VALIDATE("snapshots-synthetic-broken", "current", true);
-+
-  cleanup:
-     virHashFree(diskxmljsondata.schema);
-     qemuTestDriverFree(&driver);
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-new file mode 100644
-index 0000000000..bf4963494f
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.json
-@@ -0,0 +1,819 @@
-+[
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "backing-image": {
-+                    "backing-image": {
-+                        "backing-image": {
-+                            "virtual-size": 10485760,
-+                            "filename": "/tmp/pull4.qcow2",
-+                            "cluster-size": 65536,
-+                            "format": "qcow2",
-+                            "actual-size": 208896,
-+                            "format-specific": {
-+                                "type": "qcow2",
-+                                "data": {
-+                                    "compat": "1.1",
-+                                    "lazy-refcounts": false,
-+                                    "bitmaps": [
-+                                        {
-+                                            "flags": [
-+                                                "auto"
-+                                            ],
-+                                            "name": "a",
-+                                            "granularity": 65536
-+                                        }
-+                                    ],
-+                                    "refcount-bits": 16,
-+                                    "corrupt": false
-+                                }
-+                            },
-+                            "dirty-flag": false
-+                        },
-+                        "backing-filename-format": "qcow2",
-+                        "virtual-size": 10485760,
-+                        "filename": "/tmp/pull4.1575911522",
-+                        "cluster-size": 65536,
-+                        "format": "qcow2",
-+                        "actual-size": 208896,
-+                        "format-specific": {
-+                            "type": "qcow2",
-+                            "data": {
-+                                "compat": "1.1",
-+                                "lazy-refcounts": false,
-+                                "bitmaps": [
-+                                    {
-+                                        "flags": [
-+                                            "auto"
-+                                        ],
-+                                        "name": "a",
-+                                        "granularity": 65536
-+                                    }
-+                                ],
-+                                "refcount-bits": 16,
-+                                "corrupt": false
-+                            }
-+                        },
-+                        "full-backing-filename": "/tmp/pull4.qcow2",
-+                        "backing-filename": "/tmp/pull4.qcow2",
-+                        "dirty-flag": false
-+                    },
-+                    "backing-filename-format": "qcow2",
-+                    "virtual-size": 10485760,
-+                    "filename": "/tmp/pull4.1575911527",
-+                    "cluster-size": 65536,
-+                    "format": "qcow2",
-+                    "actual-size": 217088,
-+                    "format-specific": {
-+                        "type": "qcow2",
-+                        "data": {
-+                            "compat": "1.1",
-+                            "lazy-refcounts": false,
-+                            "bitmaps": [
-+                                {
-+                                    "flags": [
-+                                        "auto"
-+                                    ],
-+                                    "name": "c",
-+                                    "granularity": 65536
-+                                },
-+                                {
-+                                    "flags": [
-+
-+                                    ],
-+                                    "name": "b",
-+                                    "granularity": 65536
-+                                },
-+                                {
-+                                    "flags": [
-+
-+                                    ],
-+                                    "name": "a",
-+                                    "granularity": 65536
-+                                }
-+                            ],
-+                            "refcount-bits": 16,
-+                            "corrupt": false
-+                        }
-+                    },
-+                    "full-backing-filename": "/tmp/pull4.1575911522",
-+                    "backing-filename": "/tmp/pull4.1575911522",
-+                    "dirty-flag": false
-+                },
-+                "backing-filename-format": "qcow2",
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.1575911540",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 212992,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "d",
-+                                "granularity": 65536
-+                            },
-+                            {
-+                                "flags": [
-+
-+                                ],
-+                                "name": "c",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "full-backing-filename": "/tmp/pull4.1575911527",
-+                "backing-filename": "/tmp/pull4.1575911527",
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911550",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 212992,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "in-use",
-+                                "auto"
-+                            ],
-+                            "name": "current",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+                                "in-use"
-+                            ],
-+                            "name": "d",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.1575911540",
-+            "backing-filename": "/tmp/pull4.1575911540",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-1-format",
-+        "backing_file_depth": 4,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.1575911540",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "d",
-+                "recording": false,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "current",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911550",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 393728,
-+            "filename": "/tmp/pull4.1575911550",
-+            "format": "file",
-+            "actual-size": 212992,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-1-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911550",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "backing-image": {
-+                    "backing-image": {
-+                        "virtual-size": 10485760,
-+                        "filename": "/tmp/pull4.qcow2",
-+                        "cluster-size": 65536,
-+                        "format": "qcow2",
-+                        "actual-size": 208896,
-+                        "format-specific": {
-+                            "type": "qcow2",
-+                            "data": {
-+                                "compat": "1.1",
-+                                "lazy-refcounts": false,
-+                                "bitmaps": [
-+                                    {
-+                                        "flags": [
-+                                            "auto"
-+                                        ],
-+                                        "name": "a",
-+                                        "granularity": 65536
-+                                    }
-+                                ],
-+                                "refcount-bits": 16,
-+                                "corrupt": false
-+                            }
-+                        },
-+                        "dirty-flag": false
-+                    },
-+                    "backing-filename-format": "qcow2",
-+                    "virtual-size": 10485760,
-+                    "filename": "/tmp/pull4.1575911522",
-+                    "cluster-size": 65536,
-+                    "format": "qcow2",
-+                    "actual-size": 208896,
-+                    "format-specific": {
-+                        "type": "qcow2",
-+                        "data": {
-+                            "compat": "1.1",
-+                            "lazy-refcounts": false,
-+                            "bitmaps": [
-+                                {
-+                                    "flags": [
-+                                        "auto"
-+                                    ],
-+                                    "name": "a",
-+                                    "granularity": 65536
-+                                }
-+                            ],
-+                            "refcount-bits": 16,
-+                            "corrupt": false
-+                        }
-+                    },
-+                    "full-backing-filename": "/tmp/pull4.qcow2",
-+                    "backing-filename": "/tmp/pull4.qcow2",
-+                    "dirty-flag": false
-+                },
-+                "backing-filename-format": "qcow2",
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.1575911527",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 217088,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "c",
-+                                "granularity": 65536
-+                            },
-+                            {
-+                                "flags": [
-+
-+                                ],
-+                                "name": "b",
-+                                "granularity": 65536
-+                            },
-+                            {
-+                                "flags": [
-+
-+                                ],
-+                                "name": "a",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "full-backing-filename": "/tmp/pull4.1575911522",
-+                "backing-filename": "/tmp/pull4.1575911522",
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911540",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 212992,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "d",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+
-+                            ],
-+                            "name": "c",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.1575911527",
-+            "backing-filename": "/tmp/pull4.1575911527",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-2-format",
-+        "backing_file_depth": 3,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.1575911527",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "c",
-+                "recording": false,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "d",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "inconsistent": true,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911540",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 393728,
-+            "filename": "/tmp/pull4.1575911540",
-+            "format": "file",
-+            "actual-size": 212992,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-2-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911540",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "backing-image": {
-+                    "virtual-size": 10485760,
-+                    "filename": "/tmp/pull4.qcow2",
-+                    "cluster-size": 65536,
-+                    "format": "qcow2",
-+                    "actual-size": 208896,
-+                    "format-specific": {
-+                        "type": "qcow2",
-+                        "data": {
-+                            "compat": "1.1",
-+                            "lazy-refcounts": false,
-+                            "bitmaps": [
-+                                {
-+                                    "flags": [
-+                                        "auto"
-+                                    ],
-+                                    "name": "a",
-+                                    "granularity": 65536
-+                                }
-+                            ],
-+                            "refcount-bits": 16,
-+                            "corrupt": false
-+                        }
-+                    },
-+                    "dirty-flag": false
-+                },
-+                "backing-filename-format": "qcow2",
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.1575911522",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 208896,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "a",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "full-backing-filename": "/tmp/pull4.qcow2",
-+                "backing-filename": "/tmp/pull4.qcow2",
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911527",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 217088,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "c",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+
-+                            ],
-+                            "name": "b",
-+                            "granularity": 65536
-+                        },
-+                        {
-+                            "flags": [
-+
-+                            ],
-+                            "name": "a",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.1575911522",
-+            "backing-filename": "/tmp/pull4.1575911522",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-3-format",
-+        "backing_file_depth": 2,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.1575911522",
-+        "dirty-bitmaps": [
-+            {
-+                "name": "a",
-+                "recording": false,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            },
-+            {
-+                "name": "b",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "disabled",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911527",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 459264,
-+            "filename": "/tmp/pull4.1575911527",
-+            "format": "file",
-+            "actual-size": 217088,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-3-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911527",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "backing-image": {
-+                "virtual-size": 10485760,
-+                "filename": "/tmp/pull4.qcow2",
-+                "cluster-size": 65536,
-+                "format": "qcow2",
-+                "actual-size": 208896,
-+                "format-specific": {
-+                    "type": "qcow2",
-+                    "data": {
-+                        "compat": "1.1",
-+                        "lazy-refcounts": false,
-+                        "bitmaps": [
-+                            {
-+                                "flags": [
-+                                    "auto"
-+                                ],
-+                                "name": "a",
-+                                "granularity": 65536
-+                            }
-+                        ],
-+                        "refcount-bits": 16,
-+                        "corrupt": false
-+                    }
-+                },
-+                "dirty-flag": false
-+            },
-+            "backing-filename-format": "qcow2",
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.1575911522",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 208896,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "a",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "full-backing-filename": "/tmp/pull4.qcow2",
-+            "backing-filename": "/tmp/pull4.qcow2",
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-4-format",
-+        "backing_file_depth": 1,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "backing_file": "/tmp/pull4.qcow2",
-+        "dirty-bitmaps": [
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911522",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 328192,
-+            "filename": "/tmp/pull4.1575911522",
-+            "format": "file",
-+            "actual-size": 208896,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-4-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.1575911522",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 10485760,
-+            "filename": "/tmp/pull4.qcow2",
-+            "cluster-size": 65536,
-+            "format": "qcow2",
-+            "actual-size": 208896,
-+            "format-specific": {
-+                "type": "qcow2",
-+                "data": {
-+                    "compat": "1.1",
-+                    "lazy-refcounts": false,
-+                    "bitmaps": [
-+                        {
-+                            "flags": [
-+                                "auto"
-+                            ],
-+                            "name": "a",
-+                            "granularity": 65536
-+                        }
-+                    ],
-+                    "refcount-bits": 16,
-+                    "corrupt": false
-+                }
-+            },
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": true,
-+        "node-name": "libvirt-5-format",
-+        "backing_file_depth": 0,
-+        "drv": "qcow2",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "dirty-bitmaps": [
-+            {
-+                "name": "a",
-+                "recording": true,
-+                "persistent": true,
-+                "busy": false,
-+                "status": "active",
-+                "granularity": 65536,
-+                "count": 0
-+            }
-+        ],
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.qcow2",
-+        "encryption_key_missing": false
-+    },
-+    {
-+        "iops_rd": 0,
-+        "detect_zeroes": "off",
-+        "image": {
-+            "virtual-size": 328192,
-+            "filename": "/tmp/pull4.qcow2",
-+            "format": "file",
-+            "actual-size": 208896,
-+            "dirty-flag": false
-+        },
-+        "iops_wr": 0,
-+        "ro": false,
-+        "node-name": "libvirt-5-storage",
-+        "backing_file_depth": 0,
-+        "drv": "file",
-+        "iops": 0,
-+        "bps_wr": 0,
-+        "write_threshold": 0,
-+        "encrypted": false,
-+        "bps": 0,
-+        "bps_rd": 0,
-+        "cache": {
-+            "no-flush": false,
-+            "direct": false,
-+            "writeback": true
-+        },
-+        "file": "/tmp/pull4.qcow2",
-+        "encryption_key_missing": false
-+    }
-+]
-diff --git a/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-new file mode 100644
-index 0000000000..022630bd76
---- /dev/null
-+++ b/tests/qemublocktestdata/bitmap/snapshots-synthetic-broken.out
-@@ -0,0 +1,12 @@
-+libvirt-1-format:
-+        d: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+  current: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-2-format:
-+        c: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        d: record:1 busy:0 persist:1 inconsist:1 gran:65536 dirty:0
-+libvirt-3-format:
-+        a: record:0 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+        b: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
-+libvirt-4-format:
-+libvirt-5-format:
-+        a: record:1 busy:0 persist:1 inconsist:0 gran:65536 dirty:0
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-qemuxml2argv-Use-existing-machine-type-for-numatune-distances-case.patch b/SOURCES/libvirt-tests-qemuxml2argv-Use-existing-machine-type-for-numatune-distances-case.patch
deleted file mode 100644
index 6d94707..0000000
--- a/SOURCES/libvirt-tests-qemuxml2argv-Use-existing-machine-type-for-numatune-distances-case.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 5fad3414910beac08371233414939433644a92e8 Mon Sep 17 00:00:00 2001
-Message-Id: <5fad3414910beac08371233414939433644a92e8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 7 Oct 2020 18:45:31 +0200
-Subject: [PATCH] tests: qemuxml2argv: Use existing machine type for
- 'numatune-distances' case
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 99dcdf505e0856a5ebfb31f0047a1e24ec60b557)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <4af6d896e777397acd8b5945da6bf6bf071f2e98.1602087923.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/qemuxml2argvdata/numatune-distances.args | 4 ++--
- tests/qemuxml2argvdata/numatune-distances.xml  | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/tests/qemuxml2argvdata/numatune-distances.args b/tests/qemuxml2argvdata/numatune-distances.args
-index 895efeab15..a20b40b5c5 100644
---- a/tests/qemuxml2argvdata/numatune-distances.args
-+++ b/tests/qemuxml2argvdata/numatune-distances.args
-@@ -10,7 +10,7 @@ QEMU_AUDIO_DRV=none \
- /usr/bin/qemu-system-x86_64 \
- -name QEMUGuest \
- -S \
---machine xenfv,accel=tcg,usb=off,dump-guest-core=off \
-+-machine pc,accel=tcg,usb=off,dump-guest-core=off \
- -m 12288 \
- -realtime mlock=off \
- -smp 12,sockets=12,cores=1,threads=1 \
-@@ -66,4 +66,4 @@ server,nowait \
- -rtc base=utc \
- -no-shutdown \
- -usb \
---device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2
-+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
-diff --git a/tests/qemuxml2argvdata/numatune-distances.xml b/tests/qemuxml2argvdata/numatune-distances.xml
-index 0f33526b46..fa4de6aaf6 100644
---- a/tests/qemuxml2argvdata/numatune-distances.xml
-+++ b/tests/qemuxml2argvdata/numatune-distances.xml
-@@ -5,7 +5,7 @@
-   <currentMemory unit='KiB'>8388608</currentMemory>
-   <vcpu placement='static'>12</vcpu>
-   <os>
--    <type arch='x86_64' machine='xenfv'>hvm</type>
-+    <type arch='x86_64' machine='pc'>hvm</type>
-     <boot dev='hd'/>
-   </os>
-   <features>
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-tests-virstorage-Add-test-cases-for-json-pseudo-URI-without-file-wrapper.patch b/SOURCES/libvirt-tests-virstorage-Add-test-cases-for-json-pseudo-URI-without-file-wrapper.patch
deleted file mode 100644
index 520b1ae..0000000
--- a/SOURCES/libvirt-tests-virstorage-Add-test-cases-for-json-pseudo-URI-without-file-wrapper.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 4c5c4e4b30016175c40a1f2dac7e145042ea06ed Mon Sep 17 00:00:00 2001
-Message-Id: <4c5c4e4b30016175c40a1f2dac7e145042ea06ed@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:11 +0100
-Subject: [PATCH] tests: virstorage: Add test cases for "json:" pseudo-URI
- without 'file' wrapper
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add few cases that prove the second format of "json:" pseudo-URIs.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 0d0d60ddc5e58359cff5be8dfd6dd27e98da0282)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <7f9970e468fd99dfb72033f688e45ca086be56a0.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virstoragetest.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 4341c04b1e..6d62aab654 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1315,6 +1315,10 @@ mymain(void)
-                                         "}"
-                             "}",
-                        "<source file='/path/to/file'/>\n");
-+    TEST_BACKING_PARSE("json:{\"driver\":\"file\","
-+                             "\"filename\":\"/path/to/file\""
-+                            "}",
-+                       "<source file='/path/to/file'/>\n");
-     TEST_BACKING_PARSE("json:{\"file.driver\":\"host_device\", "
-                              "\"file.filename\":\"/path/to/dev\"}",
-                        "<source dev='/path/to/dev'/>\n");
-@@ -1389,6 +1393,12 @@ mymain(void)
-                        "<source protocol='nbd'>\n"
-                        "  <host transport='unix' socket='/path/to/socket'/>\n"
-                        "</source>\n");
-+    TEST_BACKING_PARSE("json:{\"driver\":\"nbd\","
-+                             "\"path\":\"/path/to/socket\""
-+                            "}",
-+                       "<source protocol='nbd'>\n"
-+                       "  <host transport='unix' socket='/path/to/socket'/>\n"
-+                       "</source>\n");
-     TEST_BACKING_PARSE("json:{\"file.driver\":\"nbd\","
-                              "\"file.path\":\"/path/to/socket\""
-                             "}",
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-virstorage-Add-test-data-for-json-specified-raw-image-with-offset-size.patch b/SOURCES/libvirt-tests-virstorage-Add-test-data-for-json-specified-raw-image-with-offset-size.patch
deleted file mode 100644
index 35963ac..0000000
--- a/SOURCES/libvirt-tests-virstorage-Add-test-data-for-json-specified-raw-image-with-offset-size.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 5becceb93612985adc0e358c03003b9e85f1053f Mon Sep 17 00:00:00 2001
-Message-Id: <5becceb93612985adc0e358c03003b9e85f1053f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:14 +0100
-Subject: [PATCH] tests: virstorage: Add test data for json specified raw image
- with offset/size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-QEMU allows specifying the offset and size into a raw file to expose a
-sub-slice of the image to the guest with the raw driver. Libvirt
-currently doesn't support it but we can add test case for future
-reference.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 554ae62637fe4205b7f51a75e798be9223dfdc3d)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <36808e0f9518770d82af2562d6a54e36f0cb13f5.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virstoragetest.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 6d62aab654..25d41f0de4 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1593,6 +1593,15 @@ mymain(void)
-                        "<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n"
-                        "  <host name='example.com' port='9999'/>\n"
-                        "</source>\n");
-+    TEST_BACKING_PARSE_FULL("json:{ \"driver\": \"raw\","
-+                                    "\"offset\": 10752,"
-+                                    "\"size\": 4063232,"
-+                                    "\"file\": { \"driver\": \"file\","
-+                                                "\"filename\": \"/tmp/testfle\""
-+                                              "}"
-+                                  "}",
-+                            "<source file='/tmp/testfle'/>\n", 0);
-+
- #endif /* WITH_YAJL */
- 
-  cleanup:
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-virstorage-Add-tests-for-NBD-URI-style-syntax-over-UNIX.patch b/SOURCES/libvirt-tests-virstorage-Add-tests-for-NBD-URI-style-syntax-over-UNIX.patch
deleted file mode 100644
index 2a3c2cb..0000000
--- a/SOURCES/libvirt-tests-virstorage-Add-tests-for-NBD-URI-style-syntax-over-UNIX.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From f2367a6085be46fa0c3e948d0da1277f38bf2fa8 Mon Sep 17 00:00:00 2001
-Message-Id: <f2367a6085be46fa0c3e948d0da1277f38bf2fa8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 17 Jan 2020 13:16:58 +0100
-Subject: [PATCH] tests: virstorage: Add tests for NBD URI style syntax over
- UNIX
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add few test cases for nbd+unix style URIs with few corner cases.
-
-The NBD URI syntax is documented at
-https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2775aada167fad5a508b16a8cadac1fca489c7be)
-https://bugzilla.redhat.com/show_bug.cgi?id=1791614
-Message-Id: <5c316356be1b5aca0cc2858925833e6316de10f8.1579263320.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
----
- tests/virstoragetest.c | 20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 370e19252b..4341c04b1e 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1274,6 +1274,26 @@ mymain(void)
-                        "<source protocol='nbd' name='exportname'>\n"
-                        "  <host name='example.org' port='1234'/>\n"
-                        "</source>\n");
-+    TEST_BACKING_PARSE("nbd+unix://?socket=/tmp/sock",
-+                       "<source protocol='nbd'>\n"
-+                       "  <host transport='unix' socket='/tmp/sock'/>\n"
-+                       "</source>\n");
-+    TEST_BACKING_PARSE("nbd+unix:///?socket=/tmp/sock",
-+                       "<source protocol='nbd'>\n"
-+                       "  <host transport='unix' socket='/tmp/sock'/>\n"
-+                       "</source>\n");
-+    TEST_BACKING_PARSE("nbd+unix:////?socket=/tmp/sock",
-+                       "<source protocol='nbd' name='/'>\n"
-+                       "  <host transport='unix' socket='/tmp/sock'/>\n"
-+                       "</source>\n");
-+    TEST_BACKING_PARSE("nbd+unix:///exp?socket=/tmp/sock",
-+                       "<source protocol='nbd' name='exp'>\n"
-+                       "  <host transport='unix' socket='/tmp/sock'/>\n"
-+                       "</source>\n");
-+    TEST_BACKING_PARSE("nbd+unix:////exp?socket=/tmp/sock",
-+                       "<source protocol='nbd' name='/exp'>\n"
-+                       "  <host transport='unix' socket='/tmp/sock'/>\n"
-+                       "</source>\n");
-     TEST_BACKING_PARSE_FULL("iscsi://testuser:testpass@example.org:1234/exportname",
-                             "<source protocol='iscsi' name='exportname'>\n"
-                             "  <host name='example.org' port='1234'/>\n"
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-tests-virstorage-Fix-backing-file-format-of-created-image.patch b/SOURCES/libvirt-tests-virstorage-Fix-backing-file-format-of-created-image.patch
deleted file mode 100644
index 3436012..0000000
--- a/SOURCES/libvirt-tests-virstorage-Fix-backing-file-format-of-created-image.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 81a506d1ac93ce3c5a21ae0dc6906d26074083f6 Mon Sep 17 00:00:00 2001
-Message-Id: <81a506d1ac93ce3c5a21ae0dc6906d26074083f6@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:35 +0100
-Subject: [PATCH] tests: virstorage: Fix backing file format of created image
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We create some images for testing our code. We've recorded wrong format
-of the backing file for one of the images though.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit e5c8f6e0800106c9331c975344086c7834fcae2a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <fbd88f094ef3e9e43b4395bb7686bb9f6f76fb38.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virstoragetest.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 39040bf4cb..e7794d6168 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -964,7 +964,7 @@ mymain(void)
-     /* Rewrite wrap and qcow2 back to 3-deep chain, absolute backing */
-     virCommandFree(cmd);
-     cmd = virCommandNewArgList(qemuimg, "rebase", "-u", "-f", "qcow2",
--                               "-F", "qcow2", "-b", absraw, "qcow2", NULL);
-+                               "-F", "raw", "-b", absraw, "qcow2", NULL);
-     if (virCommandRun(cmd, NULL) < 0)
-         ret = -1;
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-tools-Secure-guest-check-for-AMD-in-virt-host-validate.patch b/SOURCES/libvirt-tools-Secure-guest-check-for-AMD-in-virt-host-validate.patch
deleted file mode 100644
index d962395..0000000
--- a/SOURCES/libvirt-tools-Secure-guest-check-for-AMD-in-virt-host-validate.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 962f3c23ce6f477cfb24f5fa66a9f296ce953759 Mon Sep 17 00:00:00 2001
-Message-Id: <962f3c23ce6f477cfb24f5fa66a9f296ce953759@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:21 +0200
-Subject: [PATCH] tools: Secure guest check for AMD in virt-host-validate
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add checking in virt-host-validate for secure guest support
-on x86 for AMD Secure Encrypted Virtualization.
-
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Reviewed-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 4b561d49ad5d6cc45766714253adb798bb99b6e8)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <638121e5c2692557b1b2d716371d324d61273282.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tools/virt-host-validate-common.c | 30 +++++++++++++++++++++++++++++-
- tools/virt-host-validate-common.h |  1 +
- 2 files changed, 30 insertions(+), 1 deletion(-)
-
-diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c
-index e59469a49b..82e6092c01 100644
---- a/tools/virt-host-validate-common.c
-+++ b/tools/virt-host-validate-common.c
-@@ -40,7 +40,8 @@ VIR_ENUM_IMPL(virHostValidateCPUFlag,
-               "vmx",
-               "svm",
-               "sie",
--              "158");
-+              "158",
-+              "sev");
- 
- static bool quiet;
- 
-@@ -420,14 +421,18 @@ int virHostValidateSecureGuests(const char *hvname,
- {
-     virBitmapPtr flags;
-     bool hasFac158 = false;
-+    bool hasAMDSev = false;
-     virArch arch = virArchFromHost();
-     g_autofree char *cmdline = NULL;
-     static const char *kIBMValues[] = {"y", "Y", "on", "ON", "oN", "On", "1"};
-+    g_autofree char *mod_value = NULL;
- 
-     flags = virHostValidateGetCPUFlags();
- 
-     if (flags && virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_FACILITY_158))
-         hasFac158 = true;
-+    else if (flags && virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_SEV))
-+        hasAMDSev = true;
- 
-     virBitmapFree(flags);
- 
-@@ -463,6 +468,29 @@ int virHostValidateSecureGuests(const char *hvname,
-             virHostMsgFail(level, "Hardware or firmware does not provide "
-                                   "support for IBM Secure Execution");
-         }
-+    } else if (hasAMDSev) {
-+        if (virFileReadValueString(&mod_value, "/sys/module/kvm_amd/parameters/sev") < 0) {
-+            virHostMsgFail(level, "AMD Secure Encrypted Virtualization not "
-+                                  "supported by the currently used kernel");
-+            return 0;
-+        }
-+
-+        if (mod_value[0] != '1') {
-+            virHostMsgFail(level,
-+                           "AMD Secure Encrypted Virtualization appears to be "
-+                           "disabled in kernel. Add kvm_amd.sev=1 "
-+                           "to the kernel cmdline arguments");
-+            return 0;
-+        }
-+
-+        if (virFileExists("/dev/sev")) {
-+            virHostMsgPass();
-+            return 1;
-+        } else {
-+            virHostMsgFail(level,
-+                           "AMD Secure Encrypted Virtualization appears to be "
-+                           "disabled in firemare.");
-+        }
-     } else {
-         virHostMsgFail(level,
-                        "Unknown if this platform has Secure Guest support");
-diff --git a/tools/virt-host-validate-common.h b/tools/virt-host-validate-common.h
-index 1653c9c95b..014331c0e0 100644
---- a/tools/virt-host-validate-common.h
-+++ b/tools/virt-host-validate-common.h
-@@ -39,6 +39,7 @@ typedef enum {
-     VIR_HOST_VALIDATE_CPU_FLAG_SVM,
-     VIR_HOST_VALIDATE_CPU_FLAG_SIE,
-     VIR_HOST_VALIDATE_CPU_FLAG_FACILITY_158,
-+    VIR_HOST_VALIDATE_CPU_FLAG_SEV,
- 
-     VIR_HOST_VALIDATE_CPU_FLAG_LAST,
- } virHostValidateCPUFlag;
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-tools-Secure-guest-check-on-s390-in-virt-host-validate.patch b/SOURCES/libvirt-tools-Secure-guest-check-on-s390-in-virt-host-validate.patch
deleted file mode 100644
index 2aa8ecc..0000000
--- a/SOURCES/libvirt-tools-Secure-guest-check-on-s390-in-virt-host-validate.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From 085b955a75c49585d94fd5a19d6ac37833bb05cb Mon Sep 17 00:00:00 2001
-Message-Id: <085b955a75c49585d94fd5a19d6ac37833bb05cb@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:20 +0200
-Subject: [PATCH] tools: Secure guest check on s390 in virt-host-validate
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add checking in virt-host-validate for secure guest support
-on s390 for IBM Secure Execution.
-
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Tested-by: Viktor Mihajlovski <mihajlov@linux.ibm.com>
-Reviewed-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 0254ceab82f5e1f7b505730586d8c8337ecc5920)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Conflicts:
-	tools/virt-host-validate-common.c
-	tools/virt-host-validate-common.h
-            - unrelated commit 4653a5194c1 was not backported
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <744e4ceb0760fe10ab0d82de24a78c280482d90d.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tools/virt-host-validate-common.c | 64 ++++++++++++++++++++++++++++++-
- tools/virt-host-validate-common.h |  4 ++
- tools/virt-host-validate-qemu.c   |  4 ++
- 3 files changed, 70 insertions(+), 2 deletions(-)
-
-diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c
-index bce0f14917..e59469a49b 100644
---- a/tools/virt-host-validate-common.c
-+++ b/tools/virt-host-validate-common.c
-@@ -39,7 +39,8 @@ VIR_ENUM_IMPL(virHostValidateCPUFlag,
-               VIR_HOST_VALIDATE_CPU_FLAG_LAST,
-               "vmx",
-               "svm",
--              "sie");
-+              "sie",
-+              "158");
- 
- static bool quiet;
- 
-@@ -209,7 +210,8 @@ virBitmapPtr virHostValidateGetCPUFlags(void)
-          * on the architecture, so check possible prefixes */
-         if (!STRPREFIX(line, "flags") &&
-             !STRPREFIX(line, "Features") &&
--            !STRPREFIX(line, "features"))
-+            !STRPREFIX(line, "features") &&
-+            !STRPREFIX(line, "facilities"))
-             continue;
- 
-         /* fgets() includes the trailing newline in the output buffer,
-@@ -411,3 +413,61 @@ int virHostValidateIOMMU(const char *hvname,
-     virHostMsgPass();
-     return 0;
- }
-+
-+
-+int virHostValidateSecureGuests(const char *hvname,
-+                                virHostValidateLevel level)
-+{
-+    virBitmapPtr flags;
-+    bool hasFac158 = false;
-+    virArch arch = virArchFromHost();
-+    g_autofree char *cmdline = NULL;
-+    static const char *kIBMValues[] = {"y", "Y", "on", "ON", "oN", "On", "1"};
-+
-+    flags = virHostValidateGetCPUFlags();
-+
-+    if (flags && virBitmapIsBitSet(flags, VIR_HOST_VALIDATE_CPU_FLAG_FACILITY_158))
-+        hasFac158 = true;
-+
-+    virBitmapFree(flags);
-+
-+    virHostMsgCheck(hvname, "%s", _("for secure guest support"));
-+    if (ARCH_IS_S390(arch)) {
-+        if (hasFac158) {
-+            if (!virFileIsDir("/sys/firmware/uv")) {
-+                virHostMsgFail(level, "IBM Secure Execution not supported by "
-+                                      "the currently used kernel");
-+                return 0;
-+            }
-+
-+            if (virFileReadValueString(&cmdline, "/proc/cmdline") < 0)
-+                return -1;
-+
-+            /* we're prefix matching rather than equality matching here, because
-+             * kernel would treat even something like prot_virt='yFOO' as
-+             * enabled
-+             */
-+            if (virKernelCmdlineMatchParam(cmdline, "prot_virt", kIBMValues,
-+                                           G_N_ELEMENTS(kIBMValues),
-+                                           VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST |
-+                                           VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX)) {
-+                virHostMsgPass();
-+                return 1;
-+            } else {
-+                virHostMsgFail(level,
-+                               "IBM Secure Execution appears to be disabled "
-+                               "in kernel. Add prot_virt=1 to kernel cmdline "
-+                               "arguments");
-+            }
-+        } else {
-+            virHostMsgFail(level, "Hardware or firmware does not provide "
-+                                  "support for IBM Secure Execution");
-+        }
-+    } else {
-+        virHostMsgFail(level,
-+                       "Unknown if this platform has Secure Guest support");
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-diff --git a/tools/virt-host-validate-common.h b/tools/virt-host-validate-common.h
-index 1b7e93e520..1653c9c95b 100644
---- a/tools/virt-host-validate-common.h
-+++ b/tools/virt-host-validate-common.h
-@@ -38,6 +38,7 @@ typedef enum {
-     VIR_HOST_VALIDATE_CPU_FLAG_VMX = 0,
-     VIR_HOST_VALIDATE_CPU_FLAG_SVM,
-     VIR_HOST_VALIDATE_CPU_FLAG_SIE,
-+    VIR_HOST_VALIDATE_CPU_FLAG_FACILITY_158,
- 
-     VIR_HOST_VALIDATE_CPU_FLAG_LAST,
- } virHostValidateCPUFlag;
-@@ -83,3 +84,6 @@ int virHostValidateCGroupControllers(const char *hvname,
- 
- int virHostValidateIOMMU(const char *hvname,
-                          virHostValidateLevel level);
-+
-+int virHostValidateSecureGuests(const char *hvname,
-+                                virHostValidateLevel level);
-diff --git a/tools/virt-host-validate-qemu.c b/tools/virt-host-validate-qemu.c
-index ff3c1f0231..b38b0fbd6a 100644
---- a/tools/virt-host-validate-qemu.c
-+++ b/tools/virt-host-validate-qemu.c
-@@ -112,5 +112,9 @@ int virHostValidateQEMU(void)
-                              VIR_HOST_VALIDATE_WARN) < 0)
-         ret = -1;
- 
-+    if (virHostValidateSecureGuests("QEMU",
-+                                    VIR_HOST_VALIDATE_WARN) < 0)
-+        ret = -1;
-+
-     return ret;
- }
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-udevProcessCSS-Check-if-def-driver-is-non-NULL.patch b/SOURCES/libvirt-udevProcessCSS-Check-if-def-driver-is-non-NULL.patch
deleted file mode 100644
index 82ec9ba..0000000
--- a/SOURCES/libvirt-udevProcessCSS-Check-if-def-driver-is-non-NULL.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 32957eca8129f926d205310ee7efbc1168e8ebdc Mon Sep 17 00:00:00 2001
-Message-Id: <32957eca8129f926d205310ee7efbc1168e8ebdc@dist-git>
-From: Marc Hartmayer <mhartmay@linux.ibm.com>
-Date: Thu, 8 Oct 2020 11:07:00 -0400
-Subject: [PATCH] udevProcessCSS: Check if def->driver is non-NULL
-
-Don't process subchannel devices where `def->driver` is not set. This
-fixes the following segfault:
-
-Thread 21 "nodedev-init" received signal SIGSEGV, Segmentation fault.
-[Switching to Thread 0x3ffb08fc910 (LWP 64303)]
-(gdb) bt
- #0  0x000003fffd1272b4 in __strcmp_vx () at /lib64/libc.so.6
- #1  0x000003ffc260c3a8 in udevProcessCSS (device=0x3ff9018d130, def=0x3ff90194a90)
- #2  0x000003ffc260cb78 in udevGetDeviceDetails (device=0x3ff9018d130, def=0x3ff90194a90)
- #3  0x000003ffc260d126 in udevAddOneDevice (device=0x3ff9018d130)
- #4  0x000003ffc260d414 in udevProcessDeviceListEntry (udev=0x3ffa810d800, list_entry=0x3ff90001990)
- #5  0x000003ffc260d638 in udevEnumerateDevices (udev=0x3ffa810d800)
- #6  0x000003ffc260e08e in nodeStateInitializeEnumerate (opaque=0x3ffa810d800)
- #7  0x000003fffdaa14b6 in virThreadHelper (data=0x3ffa810df00)
- #8  0x000003fffc309ed6 in start_thread ()
- #9  0x000003fffd185e66 in thread_start ()
-(gdb) p *def
-$2 = {
-  name = 0x0,
-  sysfs_path = 0x3ff90198e80 "/sys/devices/css0/0.0.ff40",
-  parent = 0x0,
-  parent_sysfs_path = 0x0,
-  parent_wwnn = 0x0,
-  parent_wwpn = 0x0,
-  parent_fabric_wwn = 0x0,
-  driver = 0x0,
-  devnode = 0x0,
-  devlinks = 0x3ff90194670,
-  caps = 0x3ff90194380
-}
-
-Fixes: 05e6cdafa6e0 ("node_device: detect CSS devices")
-Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
-(cherry picked from commit cb09344a2cccc0cc9bcefa3cb53d7af45ba92631)
-https://bugzilla.redhat.com/show_bug.cgi?id=1853289
-https://bugzilla.redhat.com/show_bug.cgi?id=1865932
-Message-Id: <20201008150700.52157-6-bfiuczyn@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- src/node_device/node_device_udev.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
-index b6b28bc35a..88cf1edf50 100644
---- a/src/node_device/node_device_udev.c
-+++ b/src/node_device/node_device_udev.c
-@@ -1130,8 +1130,9 @@ udevProcessCSS(struct udev_device *device,
-                virNodeDeviceDefPtr def)
- {
-     /* only process IO subchannel and vfio-ccw devices to keep the list sane */
--    if (STRNEQ(def->driver, "io_subchannel") &&
--        STRNEQ(def->driver, "vfio_ccw"))
-+    if (!def->driver ||
-+        (STRNEQ(def->driver, "io_subchannel") &&
-+         STRNEQ(def->driver, "vfio_ccw")))
-         return -1;
- 
-     if (udevGetCCWAddress(def->sysfs_path, &def->caps->data) < 0)
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-util-Add-phys_port_name-support-on-virPCIGetNetName.patch b/SOURCES/libvirt-util-Add-phys_port_name-support-on-virPCIGetNetName.patch
deleted file mode 100644
index 2cbe85e..0000000
--- a/SOURCES/libvirt-util-Add-phys_port_name-support-on-virPCIGetNetName.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From cfe170216accf60938ff4ea9440a4ac78b0bd83f Mon Sep 17 00:00:00 2001
-Message-Id: <cfe170216accf60938ff4ea9440a4ac78b0bd83f@dist-git>
-From: Dmytro Linkin <dlinkin@nvidia.com>
-Date: Thu, 28 Jan 2021 23:17:29 -0500
-Subject: [PATCH] util: Add phys_port_name support on virPCIGetNetName
-
-virPCIGetNetName is used to get the name of the netdev associated with
-a particular PCI device. This is used when we have a VF name, but need
-the PF name in order to send a netlink command (e.g. in order to
-get/set the MAC address of the VF).
-
-In simple cases there is a single netdev associated with any PCI
-device, so it is easy to figure out the PF netdev for a VF - just look
-for the PCI device that has the VF listed in its "virtfns" directory;
-the only name in the "net" subdirectory of that PCI device's sysfs
-directory is the PF netdev that is upstream of the VF in question.
-
-In some cases there can be more than one netdev in a PCI device's net
-directory though. In the past, the only case of this was for SR-IOV
-NICs that could have multiple PF's per PCI device. In this case, all
-PF netdevs associated with a PCI address would be listed in the "net"
-subdirectory of the PCI device's directory in sysfs. At the same time,
-all VF netdevs and all PF netdevs have a phys_port_id in their sysfs,
-so the way to learn the correct PF netdev for a particular VF netdev
-is to search through the list of devices in the net subdirectory of
-the PF's PCI device, looking for the one netdev with a "phys_port_id"
-matching that of the VF netdev.
-
-But starting in kernel 5.8, the NVIDIA Mellanox driver began linking
-the VFs' representor netdevs to the PF PCI address [1], and so the VF
-representor netdevs would also show up in the net
-subdirectory. However, all of the devices that do so also only have a
-single PF netdev for any given PCI address.
-
-This means that the net directory of the PCI device can still hold
-multiple net devices, but only one of them will be the PF netdev (the
-others are VF representors):
-
-$ ls '/sys/bus/pci/devices/0000:82:00.0/net'
-ens1f0  eth0  eth1
-
-In this case the way to find the PF device is to look at the
-"phys_port_name" attribute of each netdev in sysfs. All PF devices
-have a phys_port_name matching a particular regex
-
-  (p[0-9]+$)|(p[0-9]+s[0-9]+$)
-
-Since there can only be one PF in the entire list of devices, once we
-match that regex, we've found the PF netdev.
-
-[1] - https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
-      commit/?id=123f0f53dd64b67e34142485fe866a8a581f12f1
-
-Resolves: https://bugzilla.redhat.com/1918708
-Co-Authored-by: Moshe Levi <moshele@nvidia.com>
-Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
-Reviewed-by: Adrian Chiris <adrianc@nvidia.com>
-Reviewed-by: Laine Stump <laine@redhat.com>
-(cherry picked from commit 5b1c525b1f3608156884aed0dc5e925306c1e260)
-
-Conflicts: src/util/virpci.c - upstream all DIR* were converted to use
-    g_autoptr, which permitted virPCIGetNetName() to be
-    simplified. Unfortunately, backporting this refactor would require
-    backporting an ever-ballooning set of patches, making the
-    possibility of causing a regression a very real danger. Instead,
-    one small refactor of virPCIGetName() that didn't affect any other
-    functions was backported, and this patch (adding phys_port_name
-    support) resolved the remaining conflicts by mimicking the current
-    upstream version of the function, but with all "return 0" replaced
-    by "ret = 0; goto cleanup;" and all "return -1" replaced by "goto
-    cleanup;" (the code at cleanup: just closes the DIR* and returns
-    the current value of ret). This will assure identical behavior to
-    upstream.
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20210129041729.1076345-4-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virpci.c | 93 ++++++++++++++++++++++++++++-------------------
- src/util/virpci.h |  5 +++
- 2 files changed, 61 insertions(+), 37 deletions(-)
-
-diff --git a/src/util/virpci.c b/src/util/virpci.c
-index 00377eed31..d5c038b7fe 100644
---- a/src/util/virpci.c
-+++ b/src/util/virpci.c
-@@ -2424,9 +2424,9 @@ virPCIDeviceAddressGetSysfsFile(virPCIDeviceAddressPtr addr,
-  * virPCIGetNetName:
-  * @device_link_sysfs_path: sysfs path to the PCI device
-  * @idx: used to choose which netdev when there are several
-- *       (ignored if physPortID is set)
-+ *       (ignored if physPortID is set or physPortName is available)
-  * @physPortID: match this string in the netdev's phys_port_id
-- *       (or NULL to ignore and use idx instead)
-+ *       (or NULL to ignore and use phys_port_name or idx instead)
-  * @netname: used to return the name of the netdev
-  *       (set to NULL (but returns success) if there is no netdev)
-  *
-@@ -2460,6 +2460,14 @@ virPCIGetNetName(const char *device_link_sysfs_path,
-     }
- 
-     while (virDirRead(dir, &entry, pcidev_sysfs_net_path) > 0) {
-+        /* save the first entry we find to use as a failsafe
-+         * in case we don't match the phys_port_id. This is
-+         * needed because some NIC drivers (e.g. i40e)
-+         * implement phys_port_id for PFs, but not for VFs
-+         */
-+        if (!firstEntryName)
-+            firstEntryName = g_strdup(entry->d_name);
-+
-         /* if the caller sent a physPortID, compare it to the
-          * physportID of this netdev. If not, look for entry[idx].
-          */
-@@ -2470,50 +2478,61 @@ virPCIGetNetName(const char *device_link_sysfs_path,
-                 goto cleanup;
- 
-             /* if this one doesn't match, keep looking */
--            if (STRNEQ_NULLABLE(physPortID, thisPhysPortID)) {
--                /* save the first entry we find to use as a failsafe
--                 * in case we don't match the phys_port_id. This is
--                 * needed because some NIC drivers (e.g. i40e)
--                 * implement phys_port_id for PFs, but not for VFs
--                 */
--                if (!firstEntryName)
--                    firstEntryName = g_strdup(entry->d_name);
--
-+            if (STRNEQ_NULLABLE(physPortID, thisPhysPortID))
-                 continue;
--            }
-+
-         } else {
--            if (i++ < idx)
--                continue;
--        }
-+            /* Most switch devices use phys_port_name instead of
-+             * phys_port_id.
-+             * NOTE: VFs' representors net devices can be linked to PF's PCI
-+             * device, which mean that there'll be multiple net devices
-+             * instances and to get a proper net device need to match on
-+             * specific regex.
-+             * To get PF netdev, for ex., used following regex:
-+             * "(p[0-9]+$)|(p[0-9]+s[0-9]+$)"
-+             * or to get exact VF's netdev next regex is used:
-+             * "pf0vf1$"
-+             */
-+            g_autofree char *thisPhysPortName = NULL;
- 
--        *netname = g_strdup(entry->d_name);
-+            if (virNetDevGetPhysPortName(entry->d_name, &thisPhysPortName) < 0)
-+                goto cleanup;
- 
--        ret = 0;
--        break;
--    }
-+            if (thisPhysPortName) {
-+
-+                /* if this one doesn't match, keep looking */
-+                if (!virStringMatch(thisPhysPortName, VIR_PF_PHYS_PORT_NAME_REGEX))
-+                    continue;
- 
--    if (ret < 0) {
--        if (physPortID) {
--            if (firstEntryName) {
--                /* we didn't match the provided phys_port_id, but this
--                 * is probably because phys_port_id isn't implemented
--                 * for this NIC driver, so just return the first
--                 * (probably only) netname we found.
--                 */
--                *netname = firstEntryName;
--                firstEntryName = NULL;
--                ret = 0;
-             } else {
--                virReportError(VIR_ERR_INTERNAL_ERROR,
--                               _("Could not find network device with "
--                                 "phys_port_id '%s' under PCI device at %s"),
--                               physPortID, device_link_sysfs_path);
-+
-+                if (i++ < idx)
-+                    continue;
-             }
--        } else {
--            ret = 0; /* no netdev at the given index is *not* an error */
-         }
-+
-+        *netname = g_strdup(entry->d_name);
-+        ret = 0;
-+        goto cleanup;
-     }
-- cleanup:
-+
-+    if (firstEntryName) {
-+        /* we didn't match the provided phys_port_id / find a
-+         * phys_port_name matching VIR_PF_PHYS_PORT_NAME_REGEX / find
-+         * as many net devices as the value of idx, but this is
-+         * probably because phys_port_id / phys_port_name isn't
-+         * implemented for this NIC driver, so just return the first
-+         * (probably only) netname we found.
-+         */
-+        *netname = g_steal_pointer(&firstEntryName);
-+        ret = 0;
-+        goto cleanup;
-+    }
-+
-+    virReportError(VIR_ERR_INTERNAL_ERROR,
-+                   _("Could not find any network device under PCI device at %s"),
-+                   device_link_sysfs_path);
-+cleanup:
-     VIR_DIR_CLOSE(dir);
-     return ret;
- }
-diff --git a/src/util/virpci.h b/src/util/virpci.h
-index f6796fc422..e47c766918 100644
---- a/src/util/virpci.h
-+++ b/src/util/virpci.h
-@@ -49,6 +49,11 @@ struct _virZPCIDeviceAddress {
- 
- #define VIR_PCI_DEVICE_ADDRESS_FMT "%04x:%02x:%02x.%d"
- 
-+/* Represents format of PF's phys_port_name in switchdev mode:
-+ * 'p%u' or 'p%us%u'. New line checked since value is readed from sysfs file.
-+ */
-+#define VIR_PF_PHYS_PORT_NAME_REGEX  "(p[0-9]+$)|(p[0-9]+s[0-9]+$)"
-+
- struct _virPCIDeviceAddress {
-     unsigned int domain;
-     unsigned int bus;
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-Introduce-a-parser-for-kernel-cmdline-arguments.patch b/SOURCES/libvirt-util-Introduce-a-parser-for-kernel-cmdline-arguments.patch
deleted file mode 100644
index 3f1b1d3..0000000
--- a/SOURCES/libvirt-util-Introduce-a-parser-for-kernel-cmdline-arguments.patch
+++ /dev/null
@@ -1,446 +0,0 @@
-From 8b59b9dab54c094dfc9bafd9d9f2c18f25877f36 Mon Sep 17 00:00:00 2001
-Message-Id: <8b59b9dab54c094dfc9bafd9d9f2c18f25877f36@dist-git>
-From: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Date: Wed, 24 Jun 2020 13:16:17 +0200
-Subject: [PATCH] util: Introduce a parser for kernel cmdline arguments
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduce two utility functions to parse a kernel command
-line string according to the kernel code parsing rules in
-order to enable the caller to perform operations such as
-verifying whether certain argument=value combinations are
-present or retrieving an argument's value.
-
-Signed-off-by: Paulo de Rezende Pinatti <ppinatti@linux.ibm.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit c5fffb959d93b83d87e70b21d19424e9722700b0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1848997
-https://bugzilla.redhat.com/show_bug.cgi?id=1850351
-
-Conflicts:
-	src/util/virutil.c
-            - unrelated commits db72866310d and ab36f729470 were not
-              backported
-
-Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
-Message-Id: <784fbc062d41f991b6321ac051b05e6c80a470cd.1592996194.git.jdenemar@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt_private.syms |   2 +
- src/util/virutil.c       | 185 +++++++++++++++++++++++++++++++++++++++
- src/util/virutil.h       |  34 +++++++
- tests/utiltest.c         | 136 ++++++++++++++++++++++++++++
- 4 files changed, 357 insertions(+)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index a3fe49ae33..9e290c7bdf 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -3395,6 +3395,8 @@ virHexToBin;
- virHostGetDRMRenderNode;
- virHostHasIOMMU;
- virIndexToDiskName;
-+virKernelCmdlineMatchParam;
-+virKernelCmdlineNextParam;
- virMemoryLimitIsSet;
- virMemoryLimitTruncate;
- virMemoryMaxValue;
-diff --git a/src/util/virutil.c b/src/util/virutil.c
-index 261b2d2af6..17fd06dbb2 100644
---- a/src/util/virutil.c
-+++ b/src/util/virutil.c
-@@ -1673,3 +1673,188 @@ virHostGetDRMRenderNode(void)
-     VIR_DIR_CLOSE(driDir);
-     return ret;
- }
-+
-+
-+static const char *virKernelCmdlineSkipQuote(const char *cmdline,
-+                                             bool *is_quoted)
-+{
-+    if (cmdline[0] == '"') {
-+        *is_quoted = !(*is_quoted);
-+        cmdline++;
-+    }
-+    return cmdline;
-+}
-+
-+
-+/**
-+ * virKernelCmdlineFindEqual:
-+ * @cmdline: target kernel command line string
-+ * @is_quoted: indicates whether the string begins with quotes
-+ * @res: pointer to the position immediately after the parsed parameter,
-+ * can be used in subsequent calls to process further parameters until
-+ * the end of the string.
-+ *
-+ * Iterate over the provided kernel command line string while honoring
-+ * the kernel quoting rules and returns the index of the equal sign
-+ * separating argument and value.
-+ *
-+ * Returns 0 for the cases where no equal sign is found or the argument
-+ * itself begins with the equal sign (both cases indicating that the
-+ * argument has no value). Otherwise, returns the index of the equal
-+ * sign in the string.
-+ */
-+static size_t virKernelCmdlineFindEqual(const char *cmdline,
-+                                        bool is_quoted,
-+                                        const char **res)
-+{
-+    size_t i;
-+    size_t equal_index = 0;
-+
-+    for (i = 0; cmdline[i]; i++) {
-+        if (!(is_quoted) && g_ascii_isspace(cmdline[i]))
-+            break;
-+        if (equal_index == 0 && cmdline[i] == '=') {
-+            equal_index = i;
-+            continue;
-+        }
-+        virKernelCmdlineSkipQuote(cmdline + i, &is_quoted);
-+    }
-+    *res = cmdline + i;
-+    return equal_index;
-+}
-+
-+
-+static char* virKernelArgNormalize(const char *arg)
-+{
-+    return virStringReplace(arg, "_", "-");
-+}
-+
-+
-+/**
-+ * virKernelCmdlineNextParam:
-+ * @cmdline: kernel command line string to be checked for next parameter
-+ * @param: pointer to hold retrieved parameter, will be NULL if none found
-+ * @val: pointer to hold retrieved value of @param
-+ *
-+ * Parse the kernel cmdline and store the next parameter in @param
-+ * and the value of @param in @val which can be NULL if @param has
-+ * no value. In addition returns the address right after @param=@value
-+ * for possible further processing.
-+ *
-+ * Returns a pointer to address right after @param=@val in the
-+ * kernel command line, will point to the string's end (NULL)
-+ * in case no next parameter is found
-+ */
-+const char *virKernelCmdlineNextParam(const char *cmdline,
-+                                      char **param,
-+                                      char **val)
-+{
-+    const char *next;
-+    int equal_index;
-+    bool is_quoted = false;
-+    *param = NULL;
-+    *val = NULL;
-+
-+    virSkipSpaces(&cmdline);
-+    cmdline = virKernelCmdlineSkipQuote(cmdline, &is_quoted);
-+    equal_index = virKernelCmdlineFindEqual(cmdline, is_quoted, &next);
-+
-+    if (next == cmdline)
-+        return next;
-+
-+    /* param has no value */
-+    if (equal_index == 0) {
-+        if (is_quoted && next[-1] == '"')
-+            *param = g_strndup(cmdline, next - cmdline - 1);
-+        else
-+            *param = g_strndup(cmdline, next - cmdline);
-+        return next;
-+    }
-+
-+    *param = g_strndup(cmdline, equal_index);
-+
-+    if (cmdline[equal_index + 1] == '"') {
-+        is_quoted = true;
-+        equal_index++;
-+    }
-+
-+    if (is_quoted && next[-1] == '"')
-+        *val = g_strndup(cmdline + equal_index + 1,
-+                         next - cmdline - equal_index - 2);
-+    else
-+        *val = g_strndup(cmdline + equal_index + 1,
-+                         next - cmdline - equal_index - 1);
-+    return next;
-+}
-+
-+
-+static bool virKernelCmdlineStrCmp(const char *kernel_val,
-+                                   const char *caller_val,
-+                                   virKernelCmdlineFlags flags)
-+{
-+    if (flags & VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX)
-+        return STRPREFIX(kernel_val, caller_val);
-+    return STREQ(kernel_val, caller_val);
-+}
-+
-+
-+/**
-+ * virKernelCmdlineMatchParam:
-+ * @cmdline: kernel command line string to be checked for @arg
-+ * @arg: kernel command line argument
-+ * @values: array of possible values to match @arg
-+ * @len_values: size of array, it can be 0 meaning a match will be positive if
-+ *              the argument has no value.
-+ * @flags: bitwise-OR of virKernelCmdlineFlags
-+ *
-+ * Try to match the provided kernel cmdline string with the provided @arg
-+ * and the list @values of possible values according to the matching strategy
-+ * defined in @flags.
-+ *
-+ *
-+ * Returns true if a match is found, false otherwise
-+ */
-+bool virKernelCmdlineMatchParam(const char *cmdline,
-+                                const char *arg,
-+                                const char **values,
-+                                size_t len_values,
-+                                virKernelCmdlineFlags flags)
-+{
-+    bool match = false;
-+    size_t i;
-+    const char *next = cmdline;
-+    g_autofree char *arg_norm = virKernelArgNormalize(arg);
-+
-+    while (next[0] != '\0') {
-+        g_autofree char *kparam = NULL;
-+        g_autofree char *kparam_norm = NULL;
-+        g_autofree char *kval = NULL;
-+
-+        next = virKernelCmdlineNextParam(next, &kparam, &kval);
-+
-+        if (!kparam)
-+            break;
-+
-+        kparam_norm = virKernelArgNormalize(kparam);
-+
-+        if (STRNEQ(kparam_norm, arg_norm))
-+            continue;
-+
-+        if (!kval) {
-+            match = (len_values == 0) ? true : false;
-+        } else {
-+            match = false;
-+            for (i = 0; i < len_values; i++) {
-+                if (virKernelCmdlineStrCmp(kval, values[i], flags)) {
-+                    match = true;
-+                    break;
-+                }
-+            }
-+        }
-+
-+        if (match && (flags & VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST))
-+            break;
-+    }
-+
-+    return match;
-+}
-diff --git a/src/util/virutil.h b/src/util/virutil.h
-index 0dcaff79ac..f1d2ccdd1f 100644
---- a/src/util/virutil.h
-+++ b/src/util/virutil.h
-@@ -145,6 +145,40 @@ bool virHostHasIOMMU(void);
- 
- char *virHostGetDRMRenderNode(void) G_GNUC_NO_INLINE;
- 
-+/* Kernel cmdline match and comparison strategy for arg=value pairs */
-+typedef enum {
-+    /* substring comparison of argument values */
-+    VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX = 1,
-+
-+    /* strict string comparison of argument values */
-+    VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ = 2,
-+
-+    /* look for any occurrence of the argument with the expected value,
-+     * this should be used when an argument set to the expected value overrides
-+     * all the other occurrences of the argument, e.g. when looking for 'arg=1'
-+     * in 'arg=0 arg=1 arg=0' the search would succeed with this flag
-+     */
-+    VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST = 4,
-+
-+    /* look for the last occurrence of argument with the expected value,
-+     * this should be used when the last occurrence of the argument overrides
-+     * all the other ones, e.g. when looking for 'arg=1' in 'arg=0 arg=1' the
-+     * search would succeed with this flag, but in 'arg=1 arg=0' it would not,
-+     * because 'arg=0' overrides all the previous occurrences of 'arg'
-+     */
-+    VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST = 8,
-+} virKernelCmdlineFlags;
-+
-+const char *virKernelCmdlineNextParam(const char *cmdline,
-+                                      char **param,
-+                                      char **val);
-+
-+bool virKernelCmdlineMatchParam(const char *cmdline,
-+                                const char *arg,
-+                                const char **values,
-+                                size_t len_values,
-+                                virKernelCmdlineFlags flags);
-+
- /**
-  * VIR_ASSIGN_IS_OVERFLOW:
-  * @rvalue: value that is checked (evaluated twice)
-diff --git a/tests/utiltest.c b/tests/utiltest.c
-index 5ae04585cb..2bff7859dc 100644
---- a/tests/utiltest.c
-+++ b/tests/utiltest.c
-@@ -254,6 +254,140 @@ testOverflowCheckMacro(const void *data G_GNUC_UNUSED)
- }
- 
- 
-+struct testKernelCmdlineNextParamData
-+{
-+    const char *cmdline;
-+    const char *param;
-+    const char *val;
-+    const char *next;
-+};
-+
-+static struct testKernelCmdlineNextParamData kEntries[] = {
-+    { "arg1 arg2 arg3=val1",                        "arg1",              NULL,                  " arg2 arg3=val1"      },
-+    { "arg1=val1 arg2 arg3=val3 arg4",              "arg1",              "val1",                " arg2 arg3=val3 arg4" },
-+    { "arg1=sub1=val1,sub2=val2 arg3=val3 arg4",    "arg1",              "sub1=val1,sub2=val2", " arg3=val3 arg4"      },
-+    { "arg3=val3 ",                                 "arg3",              "val3",                " "                    },
-+    { "arg3=val3",                                  "arg3",              "val3",                ""                     },
-+    { "arg-3=val3 arg4",                            "arg-3",             "val3",                " arg4"                },
-+    { " arg_3=val3 arg4",                           "arg_3",             "val3",                " arg4"                },
-+    { "arg2=\"value with space\" arg3=val3",        "arg2",              "value with space",    " arg3=val3"           },
-+    { " arg2=\"value with space\"   arg3=val3",     "arg2",              "value with space",    "   arg3=val3"         },
-+    { "  \"arg2=value with space\" arg3=val3",      "arg2",              "value with space",    " arg3=val3"           },
-+    { "arg2=\"val\"ue arg3",                        "arg2",              "val\"ue",             " arg3"                },
-+    { "arg2=value\" long\" arg3",                   "arg2",              "value\" long\"",      " arg3"                },
-+    { " \"arg2 with space=value with space\" arg3", "arg2 with space",   "value with space",    " arg3"                },
-+    { " arg2\" with space=val2\" arg3",             "arg2\" with space", "val2\"",              " arg3"                },
-+    { " arg2longer=someval\" long\" arg2=val2",     "arg2longer",        "someval\" long\"",    " arg2=val2"           },
-+    { "=val1 arg2=val2",                            "=val1",             NULL,                  " arg2=val2"           },
-+    { " ",                                          NULL,                NULL,                  ""                     },
-+    { "",                                           NULL,                NULL,                  ""                     },
-+};
-+
-+static int
-+testKernelCmdlineNextParam(const void *data G_GNUC_UNUSED)
-+{
-+    const char *next;
-+    size_t i;
-+
-+    for (i = 0; i < G_N_ELEMENTS(kEntries); ++i) {
-+        g_autofree char * param = NULL;
-+        g_autofree char * val = NULL;
-+
-+        next = virKernelCmdlineNextParam(kEntries[i].cmdline, &param, &val);
-+
-+        if (STRNEQ_NULLABLE(param, kEntries[i].param) ||
-+            STRNEQ_NULLABLE(val, kEntries[i].val) ||
-+            STRNEQ(next, kEntries[i].next)) {
-+            VIR_TEST_DEBUG("\nKernel cmdline [%s]", kEntries[i].cmdline);
-+            VIR_TEST_DEBUG("Expect param [%s]", kEntries[i].param);
-+            VIR_TEST_DEBUG("Actual param [%s]", param);
-+            VIR_TEST_DEBUG("Expect value [%s]", kEntries[i].val);
-+            VIR_TEST_DEBUG("Actual value [%s]", val);
-+            VIR_TEST_DEBUG("Expect next [%s]", kEntries[i].next);
-+            VIR_TEST_DEBUG("Actual next [%s]", next);
-+
-+            return -1;
-+        }
-+    }
-+
-+    return 0;
-+}
-+
-+
-+struct testKernelCmdlineMatchData
-+{
-+    const char *cmdline;
-+    const char *arg;
-+    const char *values[2];
-+    virKernelCmdlineFlags flags;
-+    bool result;
-+};
-+
-+static struct testKernelCmdlineMatchData kMatchEntries[] = {
-+    {"arg1 myarg=no arg2=val2 myarg=yes arg4=val4 myarg=no arg5", "myarg",  {"1", "y"},          VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST | VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ,     false },
-+    {"arg1 myarg=no arg2=val2 myarg=yes arg4=val4 myarg=no arg5", "myarg",  {"on", "yes"},       VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST | VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ,     true  },
-+    {"arg1 myarg=no arg2=val2 myarg=yes arg4=val4 myarg=no arg5", "myarg",  {"1", "y"},          VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST | VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX, true  },
-+    {"arg1 myarg=no arg2=val2 myarg=yes arg4=val4 myarg=no arg5", "myarg",  {"a", "b"},          VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST | VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX, false },
-+    {"arg1 myarg=no arg2=val2 myarg=yes arg4=val4 myarg=no arg5", "myarg",  {"on", "yes"},       VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST | VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ,      false },
-+    {"arg1 myarg=no arg2=val2 myarg=yes arg4=val4 myarg=no arg5", "myarg",  {"1", "y"},          VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST | VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX,  false },
-+    {"arg1 myarg=no arg2=val2 arg4=val4 myarg=yes arg5",          "myarg",  {"on", "yes"},       VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST | VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ,      true  },
-+    {"arg1 myarg=no arg2=val2 arg4=val4 myarg=yes arg5",          "myarg",  {"1", "y"},          VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST | VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX,  true  },
-+    {"arg1 myarg=no arg2=val2 arg4=val4 myarg arg5",              "myarg",  {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        true  },
-+    {"arg1 myarg arg2=val2 arg4=val4 myarg=yes arg5",             "myarg",  {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST,                                       true  },
-+    {"arg1 myarg arg2=val2 arg4=val4 myarg=yes arg5",             "myarg",  {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        false },
-+    {"arg1 my-arg=no arg2=val2 arg4=val4 my_arg=yes arg5",        "my-arg", {"on", "yes"},       VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        true  },
-+    {"arg1 my-arg=no arg2=val2 arg4=val4 my_arg=yes arg5 ",       "my-arg", {"on", "yes"},       VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST | VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ,      true  },
-+    {"arg1 my-arg arg2=val2 arg4=val4 my_arg=yes arg5",           "my_arg", {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST,                                       true  },
-+    {"arg1 my-arg arg2=val2 arg4=val4 my-arg=yes arg5",           "my_arg", {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST,                                       true  },
-+    {"=arg1 my-arg arg2=val2 arg4=val4 my-arg=yes arg5",          "my_arg", {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST,                                       true  },
-+    {"my-arg =arg1 arg2=val2 arg4=val4 my-arg=yes arg5",          "=arg1",  {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        true  },
-+    {"arg1 arg2=val2 myarg=sub1=val1 arg5",                       "myarg",  {"sub1=val1", NULL}, VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        true  },
-+    {"arg1 arg2=",                                                "arg2",   {"", ""},            VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST | VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ,      true  },
-+    {" ",                                                         "myarg",  {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        false },
-+    {"",                                                          "",       {NULL, NULL},        VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST,                                        false },
-+};
-+
-+
-+static int
-+testKernelCmdlineMatchParam(const void *data G_GNUC_UNUSED)
-+{
-+    bool result;
-+    size_t i, lenValues;
-+
-+    for (i = 0; i < G_N_ELEMENTS(kMatchEntries); ++i) {
-+        if (kMatchEntries[i].values[0] == NULL)
-+            lenValues = 0;
-+        else
-+            lenValues = G_N_ELEMENTS(kMatchEntries[i].values);
-+
-+        result = virKernelCmdlineMatchParam(kMatchEntries[i].cmdline,
-+                                            kMatchEntries[i].arg,
-+                                            kMatchEntries[i].values,
-+                                            lenValues,
-+                                            kMatchEntries[i].flags);
-+
-+        if (result != kMatchEntries[i].result) {
-+            VIR_TEST_DEBUG("\nKernel cmdline [%s]", kMatchEntries[i].cmdline);
-+            VIR_TEST_DEBUG("Kernel argument [%s]", kMatchEntries[i].arg);
-+            VIR_TEST_DEBUG("Kernel values [%s] [%s]", kMatchEntries[i].values[0],
-+                           kMatchEntries[i].values[1]);
-+            if (kMatchEntries[i].flags & VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX)
-+                VIR_TEST_DEBUG("Flag [VIR_KERNEL_CMDLINE_FLAGS_CMP_PREFIX]");
-+            if (kMatchEntries[i].flags & VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ)
-+                VIR_TEST_DEBUG("Flag [VIR_KERNEL_CMDLINE_FLAGS_CMP_EQ]");
-+            if (kMatchEntries[i].flags & VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST)
-+                VIR_TEST_DEBUG("Flag [VIR_KERNEL_CMDLINE_FLAGS_SEARCH_FIRST]");
-+            if (kMatchEntries[i].flags & VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST)
-+                VIR_TEST_DEBUG("Flag [VIR_KERNEL_CMDLINE_FLAGS_SEARCH_LAST]");
-+            VIR_TEST_DEBUG("Expect result [%d]", kMatchEntries[i].result);
-+            VIR_TEST_DEBUG("Actual result [%d]", result);
-+
-+            return -1;
-+        }
-+    }
-+
-+    return 0;
-+}
- 
- 
- static int
-@@ -277,6 +411,8 @@ mymain(void)
-     DO_TEST(ParseVersionString);
-     DO_TEST(RoundValueToPowerOfTwo);
-     DO_TEST(OverflowCheckMacro);
-+    DO_TEST(KernelCmdlineNextParam);
-+    DO_TEST(KernelCmdlineMatchParam);
- 
-     return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-util-Move-virIsDevMapperDevice-to-virdevmapper.c.patch b/SOURCES/libvirt-util-Move-virIsDevMapperDevice-to-virdevmapper.c.patch
deleted file mode 100644
index 53a265b..0000000
--- a/SOURCES/libvirt-util-Move-virIsDevMapperDevice-to-virdevmapper.c.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From 16b26f917f445c837127c786c7b641e1e38f93fe Mon Sep 17 00:00:00 2001
-Message-Id: <16b26f917f445c837127c786c7b641e1e38f93fe@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 19 Jun 2020 17:44:08 +0200
-Subject: [PATCH] util: Move virIsDevMapperDevice() to virdevmapper.c
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When introducing virdevmapper.c (in v4.3.0-rc1~427) I didn't
-realize there is a function that calls in devmapper. The function
-is called virIsDevMapperDevice() and lives in virutil.c. Now that
-we have a special file for handling devmapper move it there.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit dfa0e118f745fe3f4fe95975c6100f0fc6d788be)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1849095
-
-Conflicts:
-- src/util/virutil.c - Context, becasue v6.0.0-206-gfc920f704c is
-  not backported.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <84be146c2e7fc097da7189a7bf270577ffba18b2.1592581422.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt_private.syms           |  2 +-
- src/storage/parthelper.c           |  2 +-
- src/storage/storage_backend_disk.c |  1 +
- src/util/virdevmapper.c            | 24 ++++++++++++++++++++++++
- src/util/virdevmapper.h            |  3 +++
- src/util/virutil.c                 | 24 ------------------------
- src/util/virutil.h                 |  2 --
- 7 files changed, 30 insertions(+), 28 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index ac5527ef01..a3fe49ae33 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -1871,6 +1871,7 @@ virDBusSetSharedBus;
- 
- # util/virdevmapper.h
- virDevMapperGetTargets;
-+virIsDevMapperDevice;
- 
- 
- # util/virdnsmasq.h
-@@ -3394,7 +3395,6 @@ virHexToBin;
- virHostGetDRMRenderNode;
- virHostHasIOMMU;
- virIndexToDiskName;
--virIsDevMapperDevice;
- virMemoryLimitIsSet;
- virMemoryLimitTruncate;
- virMemoryMaxValue;
-diff --git a/src/storage/parthelper.c b/src/storage/parthelper.c
-index 761a7f93fc..812e90d3cb 100644
---- a/src/storage/parthelper.c
-+++ b/src/storage/parthelper.c
-@@ -36,10 +36,10 @@
- #include <sys/stat.h>
- #include <unistd.h>
- 
--#include "virutil.h"
- #include "virfile.h"
- #include "virstring.h"
- #include "virgettext.h"
-+#include "virdevmapper.h"
- 
- /* we don't need to include the full internal.h just for this */
- #define STREQ(a, b) (strcmp(a, b) == 0)
-diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c
-index 00e8b1aa13..90c57af59b 100644
---- a/src/storage/storage_backend_disk.c
-+++ b/src/storage/storage_backend_disk.c
-@@ -31,6 +31,7 @@
- #include "virfile.h"
- #include "configmake.h"
- #include "virstring.h"
-+#include "virdevmapper.h"
- 
- #define VIR_FROM_THIS VIR_FROM_STORAGE
- 
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index f000979ce0..23b2a16057 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -214,3 +214,27 @@ virDevMapperGetTargets(const char *path G_GNUC_UNUSED,
-     return -1;
- }
- #endif /* ! WITH_DEVMAPPER */
-+
-+
-+#if WITH_DEVMAPPER
-+bool
-+virIsDevMapperDevice(const char *dev_name)
-+{
-+    struct stat buf;
-+
-+    if (!stat(dev_name, &buf) &&
-+        S_ISBLK(buf.st_mode) &&
-+        dm_is_dm_major(major(buf.st_rdev)))
-+            return true;
-+
-+    return false;
-+}
-+
-+#else /* ! WITH_DEVMAPPER */
-+
-+bool
-+virIsDevMapperDevice(const char *dev_name G_GNUC_UNUSED)
-+{
-+    return false;
-+}
-+#endif /* ! WITH_DEVMAPPER */
-diff --git a/src/util/virdevmapper.h b/src/util/virdevmapper.h
-index 87bbc63cfd..834900692e 100644
---- a/src/util/virdevmapper.h
-+++ b/src/util/virdevmapper.h
-@@ -25,3 +25,6 @@
- int
- virDevMapperGetTargets(const char *path,
-                        char ***devPaths) G_GNUC_NO_INLINE;
-+
-+bool
-+virIsDevMapperDevice(const char *dev_name) ATTRIBUTE_NONNULL(1);
-diff --git a/src/util/virutil.c b/src/util/virutil.c
-index 4198473fce..261b2d2af6 100644
---- a/src/util/virutil.c
-+++ b/src/util/virutil.c
-@@ -37,10 +37,6 @@
- #include <sys/types.h>
- #include <termios.h>
- 
--#if WITH_DEVMAPPER
--# include <libdevmapper.h>
--#endif
--
- #include <netdb.h>
- #ifdef HAVE_GETPWUID_R
- # include <pwd.h>
-@@ -1327,26 +1323,6 @@ void virWaitForDevices(void)
-     ignore_value(virCommandRun(cmd, &exitstatus));
- }
- 
--#if WITH_DEVMAPPER
--bool
--virIsDevMapperDevice(const char *dev_name)
--{
--    struct stat buf;
--
--    if (!stat(dev_name, &buf) &&
--        S_ISBLK(buf.st_mode) &&
--        dm_is_dm_major(major(buf.st_rdev)))
--            return true;
--
--    return false;
--}
--#else
--bool virIsDevMapperDevice(const char *dev_name G_GNUC_UNUSED)
--{
--    return false;
--}
--#endif
--
- bool
- virValidateWWN(const char *wwn)
- {
-diff --git a/src/util/virutil.h b/src/util/virutil.h
-index 58c45a6447..0dcaff79ac 100644
---- a/src/util/virutil.h
-+++ b/src/util/virutil.h
-@@ -116,8 +116,6 @@ bool virDoesUserExist(const char *name);
- bool virDoesGroupExist(const char *name);
- 
- 
--bool virIsDevMapperDevice(const char *dev_name) ATTRIBUTE_NONNULL(1);
--
- bool virValidateWWN(const char *wwn);
- 
- int virGetDeviceID(const char *path,
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-util-add-virBufferTrimChars.patch b/SOURCES/libvirt-util-add-virBufferTrimChars.patch
deleted file mode 100644
index 0114425..0000000
--- a/SOURCES/libvirt-util-add-virBufferTrimChars.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 494b2a24ad03653b4a2658a741669943555744bf Mon Sep 17 00:00:00 2001
-Message-Id: <494b2a24ad03653b4a2658a741669943555744bf@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:07 +0100
-Subject: [PATCH] util: add virBufferTrimChars
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-A new helper for trimming combinations of specified characters from
-the tail of the buffer.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit fdd48f5b737c09a0581bf666d1578f5bd5d0de12)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <6c9d9490de405d56f3fd787dd5d02d3fb4943bb4.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt_private.syms |  1 +
- src/util/virbuffer.c     | 26 ++++++++++++++++++++++++++
- src/util/virbuffer.h     |  1 +
- tests/virbuftest.c       | 36 ++++++++++++++++++++++++++++++++++++
- 4 files changed, 64 insertions(+)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index 1f97879faa..dbbec0d567 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -1642,6 +1642,7 @@ virBufferSetIndent;
- virBufferStrcat;
- virBufferStrcatVArgs;
- virBufferTrim;
-+virBufferTrimChars;
- virBufferURIEncodeString;
- virBufferUse;
- virBufferVasprintf;
-diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c
-index 1b93110919..914c386b18 100644
---- a/src/util/virbuffer.c
-+++ b/src/util/virbuffer.c
-@@ -673,6 +673,32 @@ virBufferTrim(virBufferPtr buf, const char *str, int len)
-     g_string_truncate(buf->str, buf->str->len - len);
- }
- 
-+/**
-+ * virBufferTrimChars:
-+ * @buf: the buffer to trim
-+ * @trim: the characters to be trimmed
-+ *
-+ * Trim the tail of the buffer. The longest string that can be formed with
-+ * the characters from @trim is trimmed.
-+ */
-+void
-+virBufferTrimChars(virBufferPtr buf, const char *trim)
-+{
-+    ssize_t i;
-+
-+    if (!buf || !buf->str)
-+        return;
-+
-+    if (!trim)
-+        return;
-+
-+    for (i = buf->str->len - 1; i > 0; i--) {
-+        if (!strchr(trim, buf->str->str[i]))
-+            break;
-+    }
-+
-+    g_string_truncate(buf->str, i + 1);
-+}
- 
- /**
-  * virBufferAddStr:
-diff --git a/src/util/virbuffer.h b/src/util/virbuffer.h
-index 38758a9125..183f78f279 100644
---- a/src/util/virbuffer.h
-+++ b/src/util/virbuffer.h
-@@ -92,4 +92,5 @@ size_t virBufferGetIndent(const virBuffer *buf);
- size_t virBufferGetEffectiveIndent(const virBuffer *buf);
- 
- void virBufferTrim(virBufferPtr buf, const char *trim, int len);
-+void virBufferTrimChars(virBufferPtr buf, const char *trim);
- void virBufferAddStr(virBufferPtr buf, const char *str);
-diff --git a/tests/virbuftest.c b/tests/virbuftest.c
-index 1780b62bf4..7919075000 100644
---- a/tests/virbuftest.c
-+++ b/tests/virbuftest.c
-@@ -12,6 +12,7 @@
- struct testBufAddStrData {
-     const char *data;
-     const char *expect;
-+    const char *arg;
- };
- 
- static int testBufAutoIndent(const void *data G_GNUC_UNUSED)
-@@ -130,6 +131,30 @@ static int testBufTrim(const void *data G_GNUC_UNUSED)
-     return ret;
- }
- 
-+static int
-+testBufTrimChars(const void *opaque)
-+{
-+    const struct testBufAddStrData *data = opaque;
-+    virBuffer buf = VIR_BUFFER_INITIALIZER;
-+    g_autofree char *actual = NULL;
-+
-+    virBufferAddStr(&buf, data->data);
-+    virBufferTrimChars(&buf, data->arg);
-+
-+    if (!(actual = virBufferContentAndReset(&buf))) {
-+        VIR_TEST_DEBUG("buf is empty");
-+        return -1;
-+    }
-+
-+    if (STRNEQ_NULLABLE(actual, data->expect)) {
-+        VIR_TEST_DEBUG("testBufEscapeStr(): Strings don't match:");
-+        virTestDifference(stderr, data->expect, actual);
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
- static int testBufAddBuffer(const void *data G_GNUC_UNUSED)
- {
-     virBuffer buf1 = VIR_BUFFER_INITIALIZER;
-@@ -411,6 +436,17 @@ mymain(void)
-     DO_TEST_ESCAPE_REGEX("^$.|?*+()[]{}\\",
-                          "\\^\\$\\.\\|\\?\\*\\+\\(\\)\\[\\]\\{\\}\\\\");
- 
-+#define DO_TEST_TRIM_CHARS(_data, _arg, _expect) \
-+    do { \
-+        struct testBufAddStrData info = { .data = _data, .expect = _expect, .arg = _arg }; \
-+        if (virTestRun("Buf: Trim: " #_data, testBufTrimChars, &info) < 0) \
-+            ret = -1; \
-+    } while (0)
-+
-+    DO_TEST_TRIM_CHARS("Trimmm", "m", "Tri");
-+    DO_TEST_TRIM_CHARS("-abcd-efgh--", "-", "-abcd-efgh");
-+    DO_TEST_TRIM_CHARS("-hABC-efgh--", "-h", "-hABC-efg");
-+
-     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-util-add-virNetDevGetPhysPortName.patch b/SOURCES/libvirt-util-add-virNetDevGetPhysPortName.patch
deleted file mode 100644
index 15a794f..0000000
--- a/SOURCES/libvirt-util-add-virNetDevGetPhysPortName.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From 1b2014e2206b30a743a75908a129e444761726a7 Mon Sep 17 00:00:00 2001
-Message-Id: <1b2014e2206b30a743a75908a129e444761726a7@dist-git>
-From: Moshe Levi <moshele@nvidia.com>
-Date: Thu, 28 Jan 2021 23:17:27 -0500
-Subject: [PATCH] util: add virNetDevGetPhysPortName
-
-This commit add virNetDevGetPhysPortName to read netdevice
-phys_port_name from sysfs. It also refactor the code so
-virNetDevGetPhysPortName and virNetDevGetPhysPortID will use
-same method to read the netdevice sysfs.
-
-https://bugzilla.redhat.com/1918708
-Signed-off-by: Moshe Levi <moshele@nvidia.com>
-Reviewed-by: Laine Stump <laine@redhat.com>
-(cherry picked from commit 97ebb982453bc23759c5f180799d6f2207b81c80)
-
-Conflicts: src/util/virnetdev.c was converted to use g_autofree upstream.
-    This patch removes the need for the g_autofreed variable.
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20210129041729.1076345-2-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virnetdev.c | 72 +++++++++++++++++++++++++++++++++-----------
- src/util/virnetdev.h |  4 +++
- 2 files changed, 59 insertions(+), 17 deletions(-)
-
-diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
-index e2aad07c24..52c9343d63 100644
---- a/src/util/virnetdev.c
-+++ b/src/util/virnetdev.c
-@@ -1143,6 +1143,29 @@ virNetDevGetPCIDevice(const char *devName)
- }
- 
- 
-+/* A wrapper to get content of file from ifname SYSFS_NET_DIR
-+ */
-+static int
-+virNetDevGetSysfsFileValue(const char *ifname,
-+                           const char *fileName,
-+                           char **sysfsFileData)
-+{
-+    g_autofree char *sysfsFile = NULL;
-+
-+    *sysfsFileData = NULL;
-+
-+    if (virNetDevSysfsFile(&sysfsFile, ifname, fileName) < 0)
-+        return -1;
-+
-+    /* a failure to read just means the driver doesn't support
-+     * <fileName>, so set success now and ignore the return from
-+     * virFileReadAllQuiet().
-+     */
-+
-+    ignore_value(virFileReadAllQuiet(sysfsFile, 1024, sysfsFileData));
-+    return 0;
-+}
-+
- /**
-  * virNetDevGetPhysPortID:
-  *
-@@ -1161,25 +1184,29 @@ int
- virNetDevGetPhysPortID(const char *ifname,
-                        char **physPortID)
- {
--    int ret = -1;
--    char *physPortIDFile = NULL;
--
--    *physPortID = NULL;
--
--    if (virNetDevSysfsFile(&physPortIDFile, ifname, "phys_port_id") < 0)
--        goto cleanup;
--
--    /* a failure to read just means the driver doesn't support
--     * phys_port_id, so set success now and ignore the return from
--     * virFileReadAllQuiet().
--     */
--    ret = 0;
-+    return virNetDevGetSysfsFileValue(ifname, "phys_port_id", physPortID);
-+}
- 
--    ignore_value(virFileReadAllQuiet(physPortIDFile, 1024, physPortID));
- 
-- cleanup:
--    VIR_FREE(physPortIDFile);
--    return ret;
-+/**
-+ * virNetDevGetPhysPortName:
-+ *
-+ * @ifname: name of a netdev
-+ *
-+ * @physPortName: pointer to char* that will receive @ifname's
-+ *                phys_port_name from sysfs (null terminated
-+ *                string). Could be NULL if @ifname's net driver doesn't
-+ *                support phys_port_name (most netdev drivers
-+ *                don't). Caller is responsible for freeing the string
-+ *                when finished.
-+ *
-+ * Returns 0 on success or -1 on failure.
-+ */
-+int
-+virNetDevGetPhysPortName(const char *ifname,
-+                         char **physPortName)
-+{
-+    return virNetDevGetSysfsFileValue(ifname, "phys_port_name", physPortName);
- }
- 
- 
-@@ -1461,6 +1488,17 @@ virNetDevGetPhysPortID(const char *ifname G_GNUC_UNUSED,
-     return 0;
- }
- 
-+int
-+virNetDevGetPhysPortName(const char *ifname G_GNUC_UNUSED,
-+                       char **physPortName)
-+{
-+    /* this actually should never be called, and is just here to
-+     * satisfy the linker.
-+     */
-+    *physPortName = NULL;
-+    return 0;
-+}
-+
- int
- virNetDevGetVirtualFunctions(const char *pfname G_GNUC_UNUSED,
-                              char ***vfname G_GNUC_UNUSED,
-diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
-index 24b41498ed..26fe76cc2c 100644
---- a/src/util/virnetdev.h
-+++ b/src/util/virnetdev.h
-@@ -227,6 +227,10 @@ int virNetDevGetPhysPortID(const char *ifname,
-                            char **physPortID)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
-     G_GNUC_WARN_UNUSED_RESULT;
-+int virNetDevGetPhysPortName(const char *ifname,
-+                           char **physPortName)
-+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
-+    G_GNUC_WARN_UNUSED_RESULT;
- 
- int virNetDevGetVirtualFunctions(const char *pfname,
-                                  char ***vfname,
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-always-check-for-ebtables-iptables-binaries-even-when-using-firewalld.patch b/SOURCES/libvirt-util-always-check-for-ebtables-iptables-binaries-even-when-using-firewalld.patch
deleted file mode 100644
index f4fe465..0000000
--- a/SOURCES/libvirt-util-always-check-for-ebtables-iptables-binaries-even-when-using-firewalld.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From 36a12736f39da72dba98b843def645e5e4ed0afb Mon Sep 17 00:00:00 2001
-Message-Id: <36a12736f39da72dba98b843def645e5e4ed0afb@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:49 -0500
-Subject: [PATCH] util: always check for ebtables/iptables binaries, even when
- using firewalld
-
-Even though *we* don't call ebtables/iptables/ip6tables (yet) when the
-firewalld backend is selected, firewalld does, so these binaries need
-to be there; let's check for them. (Also, the patch after this one is
-going to start execing those binaries directly rather than via
-firewalld).
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 56dd128bd06c38fab4256a098124d47d803e919a)
-Message-Id: <20210116035151.1066734-7-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virfirewall.c | 56 ++++++++++++++++++++----------------------
- 1 file changed, 26 insertions(+), 30 deletions(-)
-
-diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
-index 2e3b02402e..520d515c11 100644
---- a/src/util/virfirewall.c
-+++ b/src/util/virfirewall.c
-@@ -100,24 +100,38 @@ VIR_ONCE_GLOBAL_INIT(virFirewall);
- static int
- virFirewallValidateBackend(virFirewallBackend backend)
- {
--    VIR_DEBUG("Validating backend %d", backend);
-+    const char *commands[] = {
-+        IPTABLES_PATH, IP6TABLES_PATH, EBTABLES_PATH
-+    };
-+    size_t i;
-+
-+    for (i = 0; i < G_N_ELEMENTS(commands); i++) {
-+        if (!virFileIsExecutable(commands[i])) {
-+            virReportSystemError(errno,
-+                                 _("%s not available, firewall backend will not function"),
-+                                 commands[i]);
-+            return -1;
-+        }
-+    }
-+    VIR_DEBUG("found iptables/ip6tables/ebtables");
-+
-     if (backend == VIR_FIREWALL_BACKEND_AUTOMATIC ||
-         backend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         int rv = virFirewallDIsRegistered();
- 
-         VIR_DEBUG("Firewalld is registered ? %d", rv);
--        if (rv < 0) {
--            if (rv == -2) {
--                if (backend == VIR_FIREWALL_BACKEND_FIREWALLD) {
--                    virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
--                                   _("firewalld firewall backend requested, but service is not running"));
--                    return -1;
--                } else {
--                    VIR_DEBUG("firewalld service not running, trying direct backend");
--                    backend = VIR_FIREWALL_BACKEND_DIRECT;
--                }
--            } else {
-+
-+        if (rv == -1)
-+            return -1;
-+
-+        if (rv == -2) {
-+            if (backend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-+                               _("firewalld backend requested, but service is not running"));
-                 return -1;
-+            } else {
-+                VIR_DEBUG("firewalld service not running, using direct backend");
-+                backend = VIR_FIREWALL_BACKEND_DIRECT;
-             }
-         } else {
-             VIR_DEBUG("firewalld service running, using firewalld backend");
-@@ -125,25 +139,7 @@ virFirewallValidateBackend(virFirewallBackend backend)
-         }
-     }
- 
--    if (backend == VIR_FIREWALL_BACKEND_DIRECT) {
--        const char *commands[] = {
--            IPTABLES_PATH, IP6TABLES_PATH, EBTABLES_PATH
--        };
--        size_t i;
--
--        for (i = 0; i < G_N_ELEMENTS(commands); i++) {
--            if (!virFileIsExecutable(commands[i])) {
--                virReportSystemError(errno,
--                                     _("direct firewall backend requested, but %s is not available"),
--                                     commands[i]);
--                return -1;
--            }
--        }
--        VIR_DEBUG("found iptables/ip6tables/ebtables, using direct backend");
--    }
--
-     currentBackend = backend;
--
-     return 0;
- }
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-assign-tap-device-names-using-a-monotonically-increasing-integer.patch b/SOURCES/libvirt-util-assign-tap-device-names-using-a-monotonically-increasing-integer.patch
deleted file mode 100644
index 1a1e009..0000000
--- a/SOURCES/libvirt-util-assign-tap-device-names-using-a-monotonically-increasing-integer.patch
+++ /dev/null
@@ -1,280 +0,0 @@
-From 37b1acb1c820421d62b1416d90138bae7961bfb7 Mon Sep 17 00:00:00 2001
-Message-Id: <37b1acb1c820421d62b1416d90138bae7961bfb7@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sat, 12 Dec 2020 22:04:52 -0500
-Subject: [PATCH] util: assign tap device names using a monotonically
- increasing integer
-
-When creating a standard tap device, if provided with an ifname that
-contains "%d", rather than taking that literally as the name to use
-for the new device, the kernel will instead use that string as a
-template, and search for the lowest number that could be put in place
-of %d and produce an otherwise unused and unique name for the new
-device. For example, if there is no tap device name given in the XML,
-libvirt will always send "vnet%d" as the device name, and the kernel
-will create new devices named "vnet0", "vnet1", etc. If one of those
-devices is deleted, creating a "hole" in the name list, the kernel
-will always attempt to reuse the name in the hole first before using a
-name with a higher number (i.e. it finds the lowest possible unused
-number).
-
-The problem with this, as described in the previous patch dealing with
-macvtap device naming, is that it makes "immediate reuse" of a newly
-freed tap device name *much* more common, and in the aftermath of
-deleting a tap device, there is some other necessary cleanup of things
-which are named based on the device name (nwfilter rules, bandwidth
-rules, OVS switch ports, to name a few) that could end up stomping
-over the top of the setup of a new device of the same name for a
-different guest.
-
-Since the kernel "create a name based on a template" functionality for
-tap devices doesn't exist for macvtap, this patch for standard tap
-devices is a bit different from the previous patch for macvtap - in
-particular there was no previous "bitmap ID reservation system" or
-overly-complex retry loop that needed to be removed. We simply find
-and unused name, and pass that name on to the kernel instead of
-"vnet%d".
-
-This counter is also wrapped when either it gets to INT_MAX or if the
-full name would overflow IFNAMSIZ-1 characters. In the case of
-"vnet%d" and a 32 bit int, we would reach INT_MAX first, but possibly
-someday someone will change the name from vnet to something else.
-
-(NB: It is still possible for a user to provide their own
-parameterized template name (e.g. "mytap%d") in the XML, and libvirt
-will just pass that through to the kernel as it always has.)
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 95089f481e003d971fe0a082018216c58c1b80e5)
-
-https://bugzilla.redhat.com/1874304
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20201213030453.48851-3-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/libvirt_private.syms |   1 +
- src/qemu/qemu_process.c  |  20 +++++++-
- src/util/virnetdevtap.c  | 108 ++++++++++++++++++++++++++++++++++++++-
- src/util/virnetdevtap.h  |   4 ++
- 4 files changed, 130 insertions(+), 3 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index 1c66c40f86..d6598c2514 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -2638,6 +2638,7 @@ virNetDevTapGetName;
- virNetDevTapGetRealDeviceName;
- virNetDevTapInterfaceStats;
- virNetDevTapReattachBridge;
-+virNetDevTapReserveName;
- 
- 
- # util/virnetdevveth.h
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index b49a463c02..f90096e68d 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -3287,8 +3287,26 @@ qemuProcessNotifyNets(virDomainDefPtr def)
-          * domain to be unceremoniously killed, which would be *very*
-          * impolite.
-          */
--        if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
-+        switch (virDomainNetGetActualType(net)) {
-+        case VIR_DOMAIN_NET_TYPE_DIRECT:
-             virNetDevMacVLanReserveName(net->ifname);
-+            break;
-+        case VIR_DOMAIN_NET_TYPE_BRIDGE:
-+        case VIR_DOMAIN_NET_TYPE_NETWORK:
-+        case VIR_DOMAIN_NET_TYPE_ETHERNET:
-+            virNetDevTapReserveName(net->ifname);
-+            break;
-+        case VIR_DOMAIN_NET_TYPE_USER:
-+        case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
-+        case VIR_DOMAIN_NET_TYPE_SERVER:
-+        case VIR_DOMAIN_NET_TYPE_CLIENT:
-+        case VIR_DOMAIN_NET_TYPE_MCAST:
-+        case VIR_DOMAIN_NET_TYPE_INTERNAL:
-+        case VIR_DOMAIN_NET_TYPE_HOSTDEV:
-+        case VIR_DOMAIN_NET_TYPE_UDP:
-+        case VIR_DOMAIN_NET_TYPE_LAST:
-+            break;
-+        }
- 
-         if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
-             if (!conn && !(conn = virGetConnectNetwork()))
-diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
-index 6a16b58d60..fd4b70df30 100644
---- a/src/util/virnetdevtap.c
-+++ b/src/util/virnetdevtap.c
-@@ -45,11 +45,51 @@
- #if defined(HAVE_GETIFADDRS) && defined(AF_LINK)
- # include <ifaddrs.h>
- #endif
-+#include <math.h>
- 
- #define VIR_FROM_THIS VIR_FROM_NONE
- 
- VIR_LOG_INIT("util.netdevtap");
- 
-+virMutex virNetDevTapCreateMutex = VIR_MUTEX_INITIALIZER;
-+static int virNetDevTapLastID = -1; /* not "unsigned" because callers use %d */
-+
-+
-+/**
-+ * virNetDevTapReserveName:
-+ * @name: name of an existing tap device
-+ *
-+ * Set the value of virNetDevTapLastID to assure that any new tap
-+ * device created with an autogenerated name will use a number higher
-+ * than the number in the given tap device name.
-+ *
-+ * Returns nothing.
-+ */
-+void
-+virNetDevTapReserveName(const char *name)
-+{
-+    unsigned int id;
-+    const char *idstr = NULL;
-+
-+
-+    if (STRPREFIX(name, VIR_NET_GENERATED_TAP_PREFIX)) {
-+
-+        VIR_INFO("marking device in use: '%s'", name);
-+
-+        idstr = name + strlen(VIR_NET_GENERATED_TAP_PREFIX);
-+
-+        if (virStrToLong_ui(idstr, NULL, 10, &id) >= 0) {
-+            virMutexLock(&virNetDevTapCreateMutex);
-+
-+            if (virNetDevTapLastID < (int)id)
-+                virNetDevTapLastID = id;
-+
-+            virMutexUnlock(&virNetDevTapCreateMutex);
-+        }
-+    }
-+}
-+
-+
- /**
-  * virNetDevTapGetName:
-  * @tapfd: a tun/tap file descriptor
-@@ -200,6 +240,55 @@ virNetDevProbeVnetHdr(int tapfd)
- 
- 
- #ifdef TUNSETIFF
-+/**
-+ * virNetDevTapGenerateName:
-+ * @ifname: pointer to pointer to string containing template
-+ *
-+ * generate a new (currently unused) name for a new tap device based
-+ * on the templace string in @ifname - replace %d with
-+ * ++virNetDevTapLastID, and keep trying new values until one is found
-+ * that doesn't already exist, or we've tried 10000 different
-+ * names. Once a usable name is found, replace the template with the
-+ * actual name.
-+ *
-+ * Returns 0 on success, -1 on failure.
-+ */
-+static int
-+virNetDevTapGenerateName(char **ifname)
-+{
-+    int id;
-+    double maxIDd = pow(10, IFNAMSIZ - 1 - strlen(VIR_NET_GENERATED_TAP_PREFIX));
-+    int maxID = INT_MAX;
-+    int attempts = 0;
-+
-+    if (maxIDd <= (double)INT_MAX)
-+        maxID = (int)maxIDd;
-+
-+    do {
-+        g_autofree char *try = NULL;
-+
-+        id = ++virNetDevTapLastID;
-+
-+        /* reset before overflow */
-+        if (virNetDevTapLastID >= maxID)
-+            virNetDevTapLastID = -1;
-+
-+        try = g_strdup_printf(*ifname, id);
-+
-+        if (!virNetDevExists(try)) {
-+            g_free(*ifname);
-+            *ifname = g_steal_pointer(&try);
-+            return 0;
-+        }
-+    } while (++attempts < 10000);
-+
-+    virReportError(VIR_ERR_INTERNAL_ERROR,
-+                   _("no unused %s names available"),
-+                   VIR_NET_GENERATED_TAP_PREFIX);
-+    return -1;
-+}
-+
-+
- /**
-  * virNetDevTapCreate:
-  * @ifname: the interface name
-@@ -226,10 +315,22 @@ int virNetDevTapCreate(char **ifname,
-                        size_t tapfdSize,
-                        unsigned int flags)
- {
--    size_t i;
-+    size_t i = 0;
-     struct ifreq ifr;
-     int ret = -1;
--    int fd;
-+    int fd = 0;
-+
-+    virMutexLock(&virNetDevTapCreateMutex);
-+
-+    /* if ifname is "vnet%d", then auto-generate a name for the new
-+     * device (the kernel could do this for us, but has a bad habit of
-+     * immediately re-using names that have just been released, which
-+     * can lead to race conditions).
-+     */
-+    if (STREQ(*ifname, VIR_NET_GENERATED_TAP_PREFIX "%d") &&
-+        virNetDevTapGenerateName(ifname) < 0) {
-+        goto cleanup;
-+    }
- 
-     if (!tunpath)
-         tunpath = "/dev/net/tun";
-@@ -295,9 +396,11 @@ int virNetDevTapCreate(char **ifname,
-         tapfd[i] = fd;
-     }
- 
-+    VIR_INFO("created device: '%s'", *ifname);
-     ret = 0;
- 
-  cleanup:
-+    virMutexUnlock(&virNetDevTapCreateMutex);
-     if (ret < 0) {
-         VIR_FORCE_CLOSE(fd);
-         while (i--)
-@@ -347,6 +450,7 @@ int virNetDevTapDelete(const char *ifname,
-         goto cleanup;
-     }
- 
-+    VIR_INFO("delete device: '%s'", ifname);
-     ret = 0;
- 
-  cleanup:
-diff --git a/src/util/virnetdevtap.h b/src/util/virnetdevtap.h
-index cae8e61861..2994c9ca71 100644
---- a/src/util/virnetdevtap.h
-+++ b/src/util/virnetdevtap.h
-@@ -29,6 +29,10 @@
- # define VIR_NETDEV_TAP_REQUIRE_MANUAL_CLEANUP 1
- #endif
- 
-+void
-+virNetDevTapReserveName(const char *name)
-+    ATTRIBUTE_NONNULL(1);
-+
- int virNetDevTapCreate(char **ifname,
-                        const char *tunpath,
-                        int *tapfd,
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-util-avoid-manual-VIR_FREE-of-a-g_autofree-pointer-in-virPCIGetName.patch b/SOURCES/libvirt-util-avoid-manual-VIR_FREE-of-a-g_autofree-pointer-in-virPCIGetName.patch
deleted file mode 100644
index bb987c0..0000000
--- a/SOURCES/libvirt-util-avoid-manual-VIR_FREE-of-a-g_autofree-pointer-in-virPCIGetName.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 4eed301c16a93fdcc6867823a88406e9578c1da7 Mon Sep 17 00:00:00 2001
-Message-Id: <4eed301c16a93fdcc6867823a88406e9578c1da7@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Thu, 28 Jan 2021 23:17:28 -0500
-Subject: [PATCH] util: avoid manual VIR_FREE of a g_autofree pointer in
- virPCIGetName()
-
-thisPhysPortID is only used inside a conditional, so reduce its scope
-to just the body of that conditional, which will eliminate the need
-for the undesirable manual VIR_FREE().
-
-https://bugzilla.redhat.com/1918708
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit fefd478644a2ad2951491552081cd53b6ecd4223)
-Message-Id: <20210129041729.1076345-3-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virpci.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/util/virpci.c b/src/util/virpci.c
-index 0b1222373e..00377eed31 100644
---- a/src/util/virpci.c
-+++ b/src/util/virpci.c
-@@ -2440,7 +2440,6 @@ virPCIGetNetName(const char *device_link_sysfs_path,
- {
-     g_autofree char *pcidev_sysfs_net_path = NULL;
-     g_autofree char *firstEntryName = NULL;
--    g_autofree char *thisPhysPortID = NULL;
-     int ret = -1;
-     DIR *dir = NULL;
-     struct dirent *entry = NULL;
-@@ -2465,12 +2464,13 @@ virPCIGetNetName(const char *device_link_sysfs_path,
-          * physportID of this netdev. If not, look for entry[idx].
-          */
-         if (physPortID) {
-+            g_autofree char *thisPhysPortID = NULL;
-+
-             if (virNetDevGetPhysPortID(entry->d_name, &thisPhysPortID) < 0)
-                 goto cleanup;
- 
-             /* if this one doesn't match, keep looking */
-             if (STRNEQ_NULLABLE(physPortID, thisPhysPortID)) {
--                VIR_FREE(thisPhysPortID);
-                 /* save the first entry we find to use as a failsafe
-                  * in case we don't match the phys_port_id. This is
-                  * needed because some NIC drivers (e.g. i40e)
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-call-iptables-directly-rather-than-via-firewalld.patch b/SOURCES/libvirt-util-call-iptables-directly-rather-than-via-firewalld.patch
deleted file mode 100644
index 3ec098c..0000000
--- a/SOURCES/libvirt-util-call-iptables-directly-rather-than-via-firewalld.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From 4d8a10886f4dffd08fcf6a93694e12f76a2afd66 Mon Sep 17 00:00:00 2001
-Message-Id: <4d8a10886f4dffd08fcf6a93694e12f76a2afd66@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:51 -0500
-Subject: [PATCH] util: call iptables directly rather than via firewalld
-
-When libvirt added support for firewalld, we were unable to use
-firewalld's higher level rules, because they weren't detailed enough
-and could not be applied to the iptables FORWARD or OUTPUT chains
-(only to the INPUT chain). Instead we changed our code so that rather
-than running the iptables/ip6tables/ebtables binaries ourselves, we
-would send these commands to firewalld as "passthrough commands", and
-firewalld would run the appropriate program on our behalf.
-
-This was done under the assumption that firewalld was somehow tracking
-all these rules, and that this tracking was benefitting proper
-operation of firewalld and the system in general.
-
-Several years later this came up in a discussion on IRC, and we
-learned from the firewalld developers that, in fact, adding iptables
-and ebtables rules with firewalld's passthrough commands actually has
-*no* advantage; firewalld doesn't keep track of these rules in any
-way, and doesn't use them to tailor the construction of its own rules.
-
-Meanwhile, users have been complaining for some time that whenever
-firewalld is restarted on a system with libvirt virtual networks
-and/or nwfilter rules active, the system logs would be flooded with
-warning messages whining that [lots of different rules] could not be
-deleted because they didn't exist. For example:
-
-firewalld[3536040]: WARNING: COMMAND_FAILED:
-  '/usr/sbin/iptables -w10 -w --table filter --delete LIBVIRT_OUT
-  --out-interface virbr4 --protocol udp --destination-port 68
-  --jump ACCEPT' failed: iptables: Bad rule
-  (does a matching rule exist in that chain?).
-
-See:
-
-  https://bugzilla.redhat.com/1607929 (RHEL8)
-  https://bugzilla.redhat.com/1790837 (RHEL8-AV)
-
-for many more examples and a discussion)
-
-Note that these messages are created by iptables, but are logged by
-firewalld - when an iptables/ebtables command fails, firewalld grabs
-whatever is in stderr of the program, and spits it out to the system
-log as a warning. We've requested that firewalld not do this (and
-instead leave it up to the calling application to do the appropriate
-logging), but this request has been respectfully denied.
-
-But combining the two problems above ( 1) firewalld doesn't do
-anything useful when you use it as a proxy to add/remove iptables
-rules, 2) firewalld often insists on logging lots of
-annoying/misleading/useless "error" messages when you use it as a
-proxy to remove iptables rules that don't already exist), leads to a
-solution - simply stop using firewalld to add and remove iptables
-rules. Instead, exec iptables/ip6tables/ebtables directly in the same
-way we do when firewalld isn't active.
-
-We still need to keep track of whether or not firewalld is active, as
-there are some things that must be done, e.g. we need to add some
-actual firewalld rules in the firewalld "libvirt" zone, and we need to
-take notice when firewalld restarts, so that we can reload all our
-rules.
-
-This patch doesn't remove the infrastructure that allows having
-different firewall backends that perform their functions in different
-ways, as that will very possibly come in handy in the future when we
-want to have an nftables direct backend, and possibly a "pure"
-firewalld backend (now that firewalld supports more complex rules, and
-can add those rules to the FORWARD and OUTPUT chains). Instead, it
-just changes the action when the selected backend is "firewalld" so
-that it adds rules directly rather than through firewalld, while
-leaving as much of the existing code intact as possible.
-
-In order for tests to still pass, virfirewalltest also had to be
-modified to behave in a different way (i.e. by capturing the generated
-commandline as it does for the DIRECT backend, rather than capturing
-dbus messages using a mocked dbus API).
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit b19863640d10b47b7c4a7cbadb21f196d61d96a2)
-Message-Id: <20210116035151.1066734-9-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virfirewall.c  | 13 +++++++++++--
- tests/virfirewalltest.c | 30 ++++++++++++++++++++----------
- 2 files changed, 31 insertions(+), 12 deletions(-)
-
-diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
-index 66d20d3f17..2ea821ec17 100644
---- a/src/util/virfirewall.c
-+++ b/src/util/virfirewall.c
-@@ -644,7 +644,7 @@ virFirewallApplyRuleDirect(virFirewallRulePtr rule,
- }
- 
- 
--static int
-+static int G_GNUC_UNUSED
- virFirewallApplyRuleFirewallD(virFirewallRulePtr rule,
-                               bool ignoreErrors,
-                               char **output)
-@@ -702,7 +702,16 @@ virFirewallApplyRule(virFirewallPtr firewall,
-             return -1;
-         break;
-     case VIR_FIREWALL_BACKEND_FIREWALLD:
--        if (virFirewallApplyRuleFirewallD(rule, ignoreErrors, &output) < 0)
-+        /* Since we are using raw iptables rules, there is no
-+         * advantage to going through firewalld, so instead just add
-+         * them directly rather that via dbus calls to firewalld. This
-+         * has the useful side effect of eliminating extra unwanted
-+         * warning messages in the system logs when trying to delete
-+         * rules that don't exist (which is something that happens
-+         * often when libvirtd is started, and *always* when firewalld
-+         * is restarted)
-+         */
-+        if (virFirewallApplyRuleDirect(rule, ignoreErrors, &output) < 0)
-             return -1;
-         break;
- 
-diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
-index 40e7f4f00b..1036353579 100644
---- a/tests/virfirewalltest.c
-+++ b/tests/virfirewalltest.c
-@@ -214,7 +214,8 @@ testFirewallSingleGroup(const void *opaque)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT)
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD)
-         virCommandSetDryRun(&cmdbuf, NULL, NULL);
-     else
-         fwBuf = &cmdbuf;
-@@ -271,7 +272,8 @@ testFirewallRemoveRule(const void *opaque)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT)
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD)
-         virCommandSetDryRun(&cmdbuf, NULL, NULL);
-     else
-         fwBuf = &cmdbuf;
-@@ -335,7 +337,8 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT)
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD)
-         virCommandSetDryRun(&cmdbuf, NULL, NULL);
-     else
-         fwBuf = &cmdbuf;
-@@ -426,7 +429,8 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
-     } else {
-         fwBuf = &cmdbuf;
-@@ -498,7 +502,8 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
-     } else {
-         fwBuf = &cmdbuf;
-@@ -567,7 +572,8 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
-     } else {
-         fwBuf = &cmdbuf;
-@@ -634,7 +640,8 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
-     } else {
-         fwError = true;
-@@ -717,7 +724,8 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
-     } else {
-         fwBuf = &cmdbuf;
-@@ -808,7 +816,8 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallRollbackHook, NULL);
-     } else {
-         fwBuf = &cmdbuf;
-@@ -1007,7 +1016,8 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
-     if (virFirewallSetBackend(data->tryBackend) < 0)
-         goto cleanup;
- 
--    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT) {
-+    if (data->expectBackend == VIR_FIREWALL_BACKEND_DIRECT ||
-+        data->expectBackend == VIR_FIREWALL_BACKEND_FIREWALLD) {
-         virCommandSetDryRun(&cmdbuf, testFirewallQueryHook, NULL);
-     } else {
-         fwBuf = &cmdbuf;
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-fix-typo-in-VIR_MOCK_WRAP_RET_ARGS.patch b/SOURCES/libvirt-util-fix-typo-in-VIR_MOCK_WRAP_RET_ARGS.patch
deleted file mode 100644
index 6a8ab2d..0000000
--- a/SOURCES/libvirt-util-fix-typo-in-VIR_MOCK_WRAP_RET_ARGS.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 15b1f63574db2100d433d283a975928f83bb0ecb Mon Sep 17 00:00:00 2001
-Message-Id: <15b1f63574db2100d433d283a975928f83bb0ecb@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:44 -0500
-Subject: [PATCH] util: fix typo in VIR_MOCK_WRAP_RET_ARGS()
-
-When virfirewalltest.c was first written in commit 3a0ca7de51 (March
-2013), a conditional accidentally tested for "ipv4" instead of
-"ipv6". Since the file ended up only testing ipv4 rules, this has
-never made any difference in practice, but I'm making some other
-changes in this file and just couldn't let it stand :-)
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 28a3deddddfe102b37f2e373bf4581c2ce8d2050)
-Message-Id: <20210116035151.1066734-2-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- tests/virfirewalltest.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
-index c4827918c3..8aba127610 100644
---- a/tests/virfirewalltest.c
-+++ b/tests/virfirewalltest.c
-@@ -129,7 +129,7 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
-         if (fwBuf) {
-             if (STREQ(type, "ipv4"))
-                 virBufferAddLit(fwBuf, IPTABLES_PATH);
--            else if (STREQ(type, "ipv4"))
-+            else if (STREQ(type, "ipv6"))
-                 virBufferAddLit(fwBuf, IP6TABLES_PATH);
-             else
-                 virBufferAddLit(fwBuf, EBTABLES_PATH);
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-hash-Improve-debugability-of-Duplicate-key-error-message.patch b/SOURCES/libvirt-util-hash-Improve-debugability-of-Duplicate-key-error-message.patch
deleted file mode 100644
index 9771afb..0000000
--- a/SOURCES/libvirt-util-hash-Improve-debugability-of-Duplicate-key-error-message.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-From 14d881a9ddd3820be9518cc38e5504f26bf5fd56 Mon Sep 17 00:00:00 2001
-Message-Id: <14d881a9ddd3820be9518cc38e5504f26bf5fd56@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:43 +0100
-Subject: [PATCH] util: hash: Improve debugability of "Duplicate key" error
- message
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If we get a user reporting this error message being shown it's pretty
-useless in terms of actually debugging it since we don't know which hash
-and which key are actually subject to the error.
-
-This patch adds a new hash table callback which formats the
-user-readable version of the hash key and reports it in the new message
-which will look like:
-
-"Duplicate hash table key 'blah'"
-
-That way we will at least have an anchor point where to start the
-search.
-
-There are two special implementations of keys which are numeric so we
-add specific printer functions for them.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit ae60e05817d6ea2d47533051c31e16b430453d62)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <214b5e7934db2f3d3b097c9e19f4e89de4912b6d.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_addr.c |  9 +++++++++
- src/util/vircgroup.c   |  8 ++++++++
- src/util/virhash.c     | 22 ++++++++++++++++++++--
- src/util/virhash.h     | 13 +++++++++++++
- 4 files changed, 50 insertions(+), 2 deletions(-)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index ef7ee80e6a..607ba56efd 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -1007,6 +1007,13 @@ virZPCIAddrKeyCopy(const void *name)
- }
- 
- 
-+static char *
-+virZPCIAddrKeyPrintHuman(const void *name)
-+{
-+    return g_strdup_printf("%u", *((unsigned int *)name));
-+}
-+
-+
- static void
- virZPCIAddrKeyFree(void *name)
- {
-@@ -1041,6 +1048,7 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs,
-                                                        virZPCIAddrKeyCode,
-                                                        virZPCIAddrKeyEqual,
-                                                        virZPCIAddrKeyCopy,
-+                                                       virZPCIAddrKeyPrintHuman,
-                                                        virZPCIAddrKeyFree)))
-             goto error;
- 
-@@ -1048,6 +1056,7 @@ virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs,
-                                                        virZPCIAddrKeyCode,
-                                                        virZPCIAddrKeyEqual,
-                                                        virZPCIAddrKeyCopy,
-+                                                       virZPCIAddrKeyPrintHuman,
-                                                        virZPCIAddrKeyFree)))
-             goto error;
-     }
-diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
-index 87ed9f4565..dff2f6fd3a 100644
---- a/src/util/vircgroup.c
-+++ b/src/util/vircgroup.c
-@@ -2502,6 +2502,13 @@ virCgroupPidCopy(const void *name)
- }
- 
- 
-+static char *
-+virCgroupPidPrintHuman(const void *name)
-+{
-+    return g_strdup_printf("%ld", (const long)name);
-+}
-+
-+
- int
- virCgroupKillRecursiveInternal(virCgroupPtr group,
-                                int signum,
-@@ -2587,6 +2594,7 @@ virCgroupKillRecursive(virCgroupPtr group, int signum)
-                                              virCgroupPidCode,
-                                              virCgroupPidEqual,
-                                              virCgroupPidCopy,
-+                                             virCgroupPidPrintHuman,
-                                              NULL);
- 
-     VIR_DEBUG("group=%p path=%s signum=%d", group, group->path, signum);
-diff --git a/src/util/virhash.c b/src/util/virhash.c
-index 313ca57a54..edf11e8b7a 100644
---- a/src/util/virhash.c
-+++ b/src/util/virhash.c
-@@ -59,6 +59,7 @@ struct _virHashTable {
-     virHashKeyCode keyCode;
-     virHashKeyEqual keyEqual;
-     virHashKeyCopy keyCopy;
-+    virHashKeyPrintHuman keyPrint;
-     virHashKeyFree keyFree;
- };
- 
-@@ -98,6 +99,14 @@ static void *virHashStrCopy(const void *name)
-     return ret;
- }
- 
-+
-+static char *
-+virHashStrPrintHuman(const void *name)
-+{
-+    return g_strdup(name);
-+}
-+
-+
- static void virHashStrFree(void *name)
- {
-     VIR_FREE(name);
-@@ -136,6 +145,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
-                                   virHashKeyCode keyCode,
-                                   virHashKeyEqual keyEqual,
-                                   virHashKeyCopy keyCopy,
-+                                  virHashKeyPrintHuman keyPrint,
-                                   virHashKeyFree keyFree)
- {
-     virHashTablePtr table = NULL;
-@@ -153,6 +163,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
-     table->keyCode = keyCode;
-     table->keyEqual = keyEqual;
-     table->keyCopy = keyCopy;
-+    table->keyPrint = keyPrint;
-     table->keyFree = keyFree;
- 
-     if (VIR_ALLOC_N(table->table, size) < 0) {
-@@ -180,6 +191,7 @@ virHashNew(virHashDataFree dataFree)
-                              virHashStrCode,
-                              virHashStrEqual,
-                              virHashStrCopy,
-+                             virHashStrPrintHuman,
-                              virHashStrFree);
- }
- 
-@@ -200,6 +212,7 @@ virHashTablePtr virHashCreate(ssize_t size, virHashDataFree dataFree)
-                              virHashStrCode,
-                              virHashStrEqual,
-                              virHashStrCopy,
-+                             virHashStrPrintHuman,
-                              virHashStrFree);
- }
- 
-@@ -353,8 +366,13 @@ virHashAddOrUpdateEntry(virHashTablePtr table, const void *name,
-                 entry->payload = userdata;
-                 return 0;
-             } else {
--                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
--                               _("Duplicate key"));
-+                g_autofree char *keystr = NULL;
-+
-+                if (table->keyPrint)
-+                    keystr = table->keyPrint(name);
-+
-+                virReportError(VIR_ERR_INTERNAL_ERROR,
-+                               _("Duplicate hash table key '%s'"), NULLSTR(keystr));
-                 return -1;
-             }
-         }
-diff --git a/src/util/virhash.h b/src/util/virhash.h
-index 6318c0b3cd..08f99d8a3d 100644
---- a/src/util/virhash.h
-+++ b/src/util/virhash.h
-@@ -86,6 +86,18 @@ typedef bool (*virHashKeyEqual)(const void *namea, const void *nameb);
-  * Returns a newly allocated copy of @name
-  */
- typedef void *(*virHashKeyCopy)(const void *name);
-+/**
-+ * virHashKeyPrintHuman:
-+ * @name: the hash key
-+ *
-+ * Get a human readable version of the key for error messages. Caller
-+ * will free the returned string.
-+ *
-+ * Returns a string representation of the key for use in error messages. Caller
-+ * promises to always free the returned string.
-+ */
-+typedef char *(*virHashKeyPrintHuman) (const void *name);
-+
- /**
-  * virHashKeyFree:
-  * @name: the hash key
-@@ -108,6 +120,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
-                                   virHashKeyCode keyCode,
-                                   virHashKeyEqual keyEqual,
-                                   virHashKeyCopy keyCopy,
-+                                  virHashKeyPrintHuman keyPrint,
-                                   virHashKeyFree keyFree);
- void virHashFree(virHashTablePtr table);
- ssize_t virHashSize(const virHashTable *table);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-util-hash-Use-g_new0-for-allocating-hash-internals.patch b/SOURCES/libvirt-util-hash-Use-g_new0-for-allocating-hash-internals.patch
deleted file mode 100644
index 5a2bc01..0000000
--- a/SOURCES/libvirt-util-hash-Use-g_new0-for-allocating-hash-internals.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From 976fe48829d9dcee11ca33d9fcfdf013f3ad524e Mon Sep 17 00:00:00 2001
-Message-Id: <976fe48829d9dcee11ca33d9fcfdf013f3ad524e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:07:59 +0100
-Subject: [PATCH] util: hash: Use g_new0 for allocating hash internals
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the glib helpers and remove the mention of returning NULL on failure
-of virHashNew, virHashCreate and virHashCreateFull.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 50f7483a0d69906e90849f7f0a30f3f535021852)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1793263
-Message-Id: <c80f6e73321ef7a1d5db60fa56fcadaac63c199b.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virhash.c | 14 +++++---------
- 1 file changed, 5 insertions(+), 9 deletions(-)
-
-diff --git a/src/util/virhash.c b/src/util/virhash.c
-index edf11e8b7a..d5c5e017a1 100644
---- a/src/util/virhash.c
-+++ b/src/util/virhash.c
-@@ -138,7 +138,7 @@ virHashComputeKey(const virHashTable *table, const void *name)
-  *
-  * Create a new virHashTablePtr.
-  *
-- * Returns the newly created object, or NULL if an error occurred.
-+ * Returns the newly created object.
-  */
- virHashTablePtr virHashCreateFull(ssize_t size,
-                                   virHashDataFree dataFree,
-@@ -153,8 +153,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
-     if (size <= 0)
-         size = 256;
- 
--    if (VIR_ALLOC(table) < 0)
--        return NULL;
-+    table = g_new0(virHashTable, 1);
- 
-     table->seed = virRandomBits(32);
-     table->size = size;
-@@ -166,10 +165,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
-     table->keyPrint = keyPrint;
-     table->keyFree = keyFree;
- 
--    if (VIR_ALLOC_N(table->table, size) < 0) {
--        VIR_FREE(table);
--        return NULL;
--    }
-+    table->table = g_new0(virHashEntryPtr, table->size);
- 
-     return table;
- }
-@@ -181,7 +177,7 @@ virHashTablePtr virHashCreateFull(ssize_t size,
-  *
-  * Create a new virHashTablePtr.
-  *
-- * Returns the newly created object, or NULL if an error occurred.
-+ * Returns the newly created object.
-  */
- virHashTablePtr
- virHashNew(virHashDataFree dataFree)
-@@ -203,7 +199,7 @@ virHashNew(virHashDataFree dataFree)
-  *
-  * Create a new virHashTablePtr.
-  *
-- * Returns the newly created object, or NULL if an error occurred.
-+ * Returns the newly created object.
-  */
- virHashTablePtr virHashCreate(ssize_t size, virHashDataFree dataFree)
- {
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-util-json-Introduce-virJSONValueArrayConcat.patch b/SOURCES/libvirt-util-json-Introduce-virJSONValueArrayConcat.patch
deleted file mode 100644
index f228f9d..0000000
--- a/SOURCES/libvirt-util-json-Introduce-virJSONValueArrayConcat.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 28699a44646cf4a754808fb2c815c741343264cd Mon Sep 17 00:00:00 2001
-Message-Id: <28699a44646cf4a754808fb2c815c741343264cd@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:17 +0100
-Subject: [PATCH] util: json: Introduce virJSONValueArrayConcat
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add a helper that concatenates the second array into the first.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 3b60a0c0276ae7200b0bff7394e0d1e00706a1dd)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <d7f92bced2f95d7802dd3a823b7c6b966e454a7e.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt_private.syms |  1 +
- src/util/virjson.c       | 31 +++++++++++++++++++++++++++++++
- src/util/virjson.h       |  2 ++
- 3 files changed, 34 insertions(+)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index afa7d4fcae..bc2858fc00 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -2279,6 +2279,7 @@ virISCSIScanTargets;
- virJSONStringReformat;
- virJSONValueArrayAppend;
- virJSONValueArrayAppendString;
-+virJSONValueArrayConcat;
- virJSONValueArrayForeachSteal;
- virJSONValueArrayGet;
- virJSONValueArraySize;
-diff --git a/src/util/virjson.c b/src/util/virjson.c
-index 988a09e956..50993648eb 100644
---- a/src/util/virjson.c
-+++ b/src/util/virjson.c
-@@ -811,6 +811,37 @@ virJSONValueArrayAppendString(virJSONValuePtr object,
- }
- 
- 
-+/**
-+ * virJSONValueArrayConcat:
-+ * @a: JSON value array (destination)
-+ * @c: JSON value array (source)
-+ *
-+ * Merges the members of @c array into @a. The values are stolen from @c.
-+ */
-+int
-+virJSONValueArrayConcat(virJSONValuePtr a,
-+                        virJSONValuePtr c)
-+{
-+    size_t i;
-+
-+    if (a->type != VIR_JSON_TYPE_ARRAY ||
-+        c->type != VIR_JSON_TYPE_ARRAY) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("expecting JSON array"));
-+        return -1;
-+    }
-+
-+    a->data.array.values = g_renew(virJSONValuePtr, a->data.array.values,
-+                                   a->data.array.nvalues + c->data.array.nvalues);
-+
-+    for (i = 0; i < c->data.array.nvalues; i++)
-+        a->data.array.values[a->data.array.nvalues++] = g_steal_pointer(&c->data.array.values[i]);
-+
-+    c->data.array.nvalues = 0;
-+
-+    return 0;
-+}
-+
-+
- int
- virJSONValueObjectHasKey(virJSONValuePtr object,
-                          const char *key)
-diff --git a/src/util/virjson.h b/src/util/virjson.h
-index 7a6b063b17..0894e91b59 100644
---- a/src/util/virjson.h
-+++ b/src/util/virjson.h
-@@ -71,6 +71,8 @@ virJSONValuePtr virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap);
- 
- int virJSONValueObjectAppend(virJSONValuePtr object, const char *key, virJSONValuePtr value);
- int virJSONValueArrayAppend(virJSONValuePtr object, virJSONValuePtr value);
-+int virJSONValueArrayConcat(virJSONValuePtr a,
-+                            virJSONValuePtr c);
- 
- int virJSONValueObjectHasKey(virJSONValuePtr object, const char *key);
- virJSONValuePtr virJSONValueObjectGet(virJSONValuePtr object, const char *key);
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-util-replace-macvtap-name-reservation-bitmap-with-a-simple-counter.patch b/SOURCES/libvirt-util-replace-macvtap-name-reservation-bitmap-with-a-simple-counter.patch
deleted file mode 100644
index 34969d8..0000000
--- a/SOURCES/libvirt-util-replace-macvtap-name-reservation-bitmap-with-a-simple-counter.patch
+++ /dev/null
@@ -1,736 +0,0 @@
-From 4238e5f0783c63802de79bc5ed2a1f49673ef2a3 Mon Sep 17 00:00:00 2001
-Message-Id: <4238e5f0783c63802de79bc5ed2a1f49673ef2a3@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Sat, 12 Dec 2020 22:04:51 -0500
-Subject: [PATCH] util: replace macvtap name reservation bitmap with a simple
- counter
-
-There have been some reports that, due to libvirt always trying to
-assign the lowest numbered macvtap / tap device name possible, a new
-guest would sometimes be started using the same tap device name as
-previously used by another guest that is in the process of being
-destroyed *as the new guest is starting.
-
-In some cases this has led to, for example, the old guest's
-qemuProcessStop() code deleting a port from an OVS switch that had
-just been re-added by the new guest (because the port name is based on
-only the device name using the port). Similar problems can happen (and
-I believe have) with nwfilter rules and bandwidth rules (which are
-both instantiated based on the name of the tap device).
-
-A couple patches have been previously proposed to change the ordering
-of startup and shutdown processing, or to put a mutex around
-everything related to the tap/macvtap device name usage, but in the
-end no matter what you do there will still be possible holes, because
-the device could be deleted outside libvirt's control (for example,
-regular tap devices are automatically deleted when the qemu process
-terminates, and that isn't always initiated by libvirt but could
-instead happen completely asynchronously - libvirt then has no control
-over the ordering of shutdown operations, and no opportunity to
-protect it with a mutex.)
-
-But this only happens if a new device is created at the same time as
-one is being deleted. We can effectively eliminate the chance of this
-happening if we end the practice of always looking for the lowest
-numbered available device name, and instead just keep an integer that
-is incremented each time we need a new device name. At some point it
-will need to wrap back around to 0 (in order to avoid the IFNAMSIZ 15
-character limit if nothing else), and we can't guarantee that the new
-name really will be the *least* recently used name, but "math"
-suggests that it will be *much* less common that we'll try to re-use
-the *most* recently used name.
-
-This patch implements such a counter for macvtap/macvlan, replacing
-the existing, and much more complicated, "ID reservation" system. The
-counter is set according to whatever macvtap/macvlan devices are
-already in use by guests when libvirtd is started, incremented each
-time a new device name is needed, and wraps back to 0 when either
-INT_MAX is reached, or when the resulting device name would be longer
-than IFNAMSIZ-1 characters (which actually is what happens when the
-template for the device name is "maccvtap%d"). The result is that no
-macvtap name will be re-used until the host has created (and possibly
-destroyed) 99,999,999 devices.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit d7f38beb2ee072f1f19bb91fbafc9182ce9b069e)
-
-https://bugzilla.redhat.com/1874304
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20201213030453.48851-2-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/libvirt_private.syms    |   1 -
- src/libxl/libxl_driver.c    |   2 +-
- src/lxc/lxc_process.c       |   2 +-
- src/qemu/qemu_process.c     |   2 +-
- src/util/virnetdevmacvlan.c | 403 +++++++++++++-----------------------
- src/util/virnetdevmacvlan.h |   6 +-
- 6 files changed, 145 insertions(+), 271 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index fdd104cd25..1c66c40f86 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -2604,7 +2604,6 @@ virNetDevMacVLanDelete;
- virNetDevMacVLanDeleteWithVPortProfile;
- virNetDevMacVLanIsMacvtap;
- virNetDevMacVLanModeTypeFromString;
--virNetDevMacVLanReleaseName;
- virNetDevMacVLanReserveName;
- virNetDevMacVLanRestartWithVPortProfile;
- virNetDevMacVLanTapOpen;
-diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
-index 1449795494..9269e9b475 100644
---- a/src/libxl/libxl_driver.c
-+++ b/src/libxl/libxl_driver.c
-@@ -367,7 +367,7 @@ libxlReconnectNotifyNets(virDomainDefPtr def)
-          * impolite.
-          */
-         if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
--           ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
-+            virNetDevMacVLanReserveName(net->ifname);
- 
-         if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
-             if (!conn && !(conn = virGetConnectNetwork()))
-diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
-index 0a9ccdf9ec..114c40b0ea 100644
---- a/src/lxc/lxc_process.c
-+++ b/src/lxc/lxc_process.c
-@@ -1638,7 +1638,7 @@ virLXCProcessReconnectNotifyNets(virDomainDefPtr def)
-          * impolite.
-          */
-         if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
--           ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
-+            virNetDevMacVLanReserveName(net->ifname);
- 
-         if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
-             if (!conn && !(conn = virGetConnectNetwork()))
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index 95c0315e53..b49a463c02 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -3288,7 +3288,7 @@ qemuProcessNotifyNets(virDomainDefPtr def)
-          * impolite.
-          */
-         if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT)
--           ignore_value(virNetDevMacVLanReserveName(net->ifname, false));
-+            virNetDevMacVLanReserveName(net->ifname);
- 
-         if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
-             if (!conn && !(conn = virGetConnectNetwork()))
-diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c
-index 3ca568fb44..7046cbb04e 100644
---- a/src/util/virnetdevmacvlan.c
-+++ b/src/util/virnetdevmacvlan.c
-@@ -47,6 +47,7 @@ VIR_ENUM_IMPL(virNetDevMacVLanMode,
- 
- # include <net/if.h>
- # include <linux/if_tun.h>
-+# include <math.h>
- 
- /* Older kernels lacked this enum value.  */
- # if !HAVE_DECL_MACVLAN_MODE_PASSTHRU
-@@ -70,211 +71,121 @@ VIR_LOG_INIT("util.netdevmacvlan");
-     ((flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ? \
-      VIR_NET_GENERATED_MACVTAP_PREFIX : VIR_NET_GENERATED_MACVLAN_PREFIX)
- 
--# define MACVLAN_MAX_ID 8191
- 
- virMutex virNetDevMacVLanCreateMutex = VIR_MUTEX_INITIALIZER;
--virBitmapPtr macvtapIDs = NULL;
--virBitmapPtr macvlanIDs = NULL;
--
--static int
--virNetDevMacVLanOnceInit(void)
--{
--    if (!macvtapIDs &&
--        !(macvtapIDs = virBitmapNew(MACVLAN_MAX_ID + 1)))
--        return -1;
--    if (!macvlanIDs &&
--        !(macvlanIDs = virBitmapNew(MACVLAN_MAX_ID + 1)))
--        return -1;
--    return 0;
--}
--
--VIR_ONCE_GLOBAL_INIT(virNetDevMacVLan);
-+static int virNetDevMacVTapLastID = -1;
-+static int virNetDevMacVLanLastID = -1;
- 
- 
--/**
-- * virNetDevMacVLanReserveID:
-- *
-- *  @id: id 0 - MACVLAN_MAX_ID+1 to reserve (or -1 for "first free")
-- *  @flags: set VIR_NETDEV_MACVLAN_CREATE_WITH_TAP for macvtapN else macvlanN
-- *  @quietFail: don't log an error if this name is already in-use
-- *  @nextFree: reserve the next free ID *after* @id rather than @id itself
-- *
-- *  Reserve the indicated ID in the appropriate bitmap, or find the
-- *  first free ID if @id is -1.
-- *
-- *  Returns newly reserved ID# on success, or -1 to indicate failure.
-- */
--static int
--virNetDevMacVLanReserveID(int id, unsigned int flags,
--                          bool quietFail, bool nextFree)
-+static void
-+virNetDevMacVLanReserveNameInternal(const char *name)
- {
--    virBitmapPtr bitmap;
--
--    if (virNetDevMacVLanInitialize() < 0)
--       return -1;
--
--    bitmap = (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ?
--        macvtapIDs :  macvlanIDs;
-+    unsigned int id;
-+    const char *idstr = NULL;
-+    int *lastID = NULL;
-+    int len;
- 
--    if (id > MACVLAN_MAX_ID) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("can't use name %s%d - out of range 0-%d"),
--                       VIR_NET_GENERATED_PREFIX, id, MACVLAN_MAX_ID);
--        return -1;
-+    if (STRPREFIX(name, VIR_NET_GENERATED_MACVTAP_PREFIX)) {
-+        lastID = &virNetDevMacVTapLastID;
-+        len = strlen(VIR_NET_GENERATED_MACVTAP_PREFIX);
-+    } else if (STRPREFIX(name, VIR_NET_GENERATED_MACVLAN_PREFIX)) {
-+        lastID = &virNetDevMacVTapLastID;
-+        len = strlen(VIR_NET_GENERATED_MACVLAN_PREFIX);
-+    } else {
-+        return;
-     }
- 
--    if ((id < 0 || nextFree) &&
--        (id = virBitmapNextClearBit(bitmap, id)) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("no unused %s names available"),
--                       VIR_NET_GENERATED_PREFIX);
--        return -1;
--    }
-+    VIR_INFO("marking device in use: '%s'", name);
- 
--    if (virBitmapIsBitSet(bitmap, id)) {
--        if (quietFail) {
--            VIR_INFO("couldn't reserve name %s%d - already in use",
--                     VIR_NET_GENERATED_PREFIX, id);
--        } else {
--            virReportError(VIR_ERR_INTERNAL_ERROR,
--                           _("couldn't reserve name %s%d - already in use"),
--                           VIR_NET_GENERATED_PREFIX, id);
--        }
--        return -1;
--    }
-+    idstr = name + len;
- 
--    if (virBitmapSetBit(bitmap, id) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("couldn't mark %s%d as used"),
--                       VIR_NET_GENERATED_PREFIX, id);
--        return -1;
-+    if (virStrToLong_ui(idstr, NULL, 10, &id) >= 0) {
-+        if (*lastID < (int)id)
-+            *lastID = id;
-     }
--
--    VIR_INFO("reserving device %s%d", VIR_NET_GENERATED_PREFIX, id);
--    return id;
- }
- 
- 
- /**
-- * virNetDevMacVLanReleaseID:
-- *  @id: id 0 - MACVLAN_MAX_ID+1 to release
-+ * virNetDevMacVLanReserveName:
-+ * @name: name of an existing macvtap/macvlan device
-  *
-- *  Returns 0 for success or -1 for failure.
-+ * Set the value of virNetDevMacV(Lan|Tap)LastID to assure that any
-+ * new device created with an autogenerated name will use a number
-+ * higher than the number in the given device name.
-+ *
-+ * Returns nothing.
-  */
--static int
--virNetDevMacVLanReleaseID(int id, unsigned int flags)
-+void
-+virNetDevMacVLanReserveName(const char *name)
- {
--    virBitmapPtr bitmap;
--
--    if (virNetDevMacVLanInitialize() < 0)
--        return 0;
--
--    bitmap = (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ?
--        macvtapIDs :  macvlanIDs;
--
--    if (id > MACVLAN_MAX_ID) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("can't free name %s%d - out of range 0-%d"),
--                       VIR_NET_GENERATED_PREFIX, id, MACVLAN_MAX_ID);
--        return -1;
--    }
--
--    if (id < 0)
--        return 0;
--
--    VIR_INFO("releasing %sdevice %s%d",
--             virBitmapIsBitSet(bitmap, id) ? "" : "unreserved",
--             VIR_NET_GENERATED_PREFIX, id);
--
--    if (virBitmapClearBit(bitmap, id) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("couldn't mark %s%d as unused"),
--                       VIR_NET_GENERATED_PREFIX, id);
--        return -1;
--    }
--    return 0;
-+    virMutexLock(&virNetDevMacVLanCreateMutex);
-+    virNetDevMacVLanReserveNameInternal(name);
-+    virMutexUnlock(&virNetDevMacVLanCreateMutex);
- }
- 
- 
- /**
-- * virNetDevMacVLanReserveName:
-- *
-- *  @name: already-known name of device
-- *  @quietFail: don't log an error if this name is already in-use
-+ * virNetDevMacVLanGenerateName:
-+ * @ifname: pointer to pointer to string containing template
-+ * @lastID: counter to add to the template to form the name
-  *
-- *  Extract the device type and id from a macvtap/macvlan device name
-- *  and mark the appropriate position as in-use in the appropriate
-- *  bitmap.
-+ * generate a new (currently unused) name for a new macvtap/macvlan
-+ * device based on the template string in @ifname - replace %d with
-+ * ++(*counter), and keep trying new values until one is found
-+ * that doesn't already exist, or we've tried 10000 different
-+ * names. Once a usable name is found, replace the template with the
-+ * actual name.
-  *
-- *  Returns reserved ID# on success, -1 on failure, -2 if the name
-- *  doesn't fit the auto-pattern (so not reserveable).
-+ * Returns 0 on success, -1 on failure.
-  */
--int
--virNetDevMacVLanReserveName(const char *name, bool quietFail)
-+static int
-+virNetDevMacVLanGenerateName(char **ifname, unsigned int flags)
- {
--    unsigned int id;
--    unsigned int flags = 0;
--    const char *idstr = NULL;
-+    const char *prefix;
-+    const char *iftemplate;
-+    int *lastID;
-+    int id;
-+    double maxIDd;
-+    int maxID = INT_MAX;
-+    int attempts = 0;
- 
--    if (virNetDevMacVLanInitialize() < 0)
--       return -1;
--
--    if (STRPREFIX(name, VIR_NET_GENERATED_MACVTAP_PREFIX)) {
--        idstr = name + strlen(VIR_NET_GENERATED_MACVTAP_PREFIX);
--        flags |= VIR_NETDEV_MACVLAN_CREATE_WITH_TAP;
--    } else if (STRPREFIX(name, VIR_NET_GENERATED_MACVLAN_PREFIX)) {
--        idstr = name + strlen(VIR_NET_GENERATED_MACVLAN_PREFIX);
-+    if (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) {
-+        prefix = VIR_NET_GENERATED_MACVTAP_PREFIX;
-+        iftemplate = VIR_NET_GENERATED_MACVTAP_PREFIX "%d";
-+        lastID = &virNetDevMacVTapLastID;
-     } else {
--        return -2;
-+        prefix = VIR_NET_GENERATED_MACVLAN_PREFIX;
-+        iftemplate = VIR_NET_GENERATED_MACVLAN_PREFIX "%d";
-+        lastID = &virNetDevMacVLanLastID;
-     }
- 
--    if (virStrToLong_ui(idstr, NULL, 10, &id) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("couldn't get id value from macvtap device name %s"),
--                       name);
--        return -1;
--    }
--    return virNetDevMacVLanReserveID(id, flags, quietFail, false);
--}
-+    maxIDd = pow(10, IFNAMSIZ - 1 - strlen(prefix));
-+    if (maxIDd <= (double)INT_MAX)
-+        maxID = (int)maxIDd;
- 
-+    do {
-+        g_autofree char *try = NULL;
- 
--/**
-- * virNetDevMacVLanReleaseName:
-- *
-- *  @name: already-known name of device
-- *
-- *  Extract the device type and id from a macvtap/macvlan device name
-- *  and mark the appropriate position as in-use in the appropriate
-- *  bitmap.
-- *
-- *  returns 0 on success, -1 on failure
-- */
--int
--virNetDevMacVLanReleaseName(const char *name)
--{
--    unsigned int id;
--    unsigned int flags = 0;
--    const char *idstr = NULL;
-+        id = ++(*lastID);
- 
--    if (virNetDevMacVLanInitialize() < 0)
--       return -1;
-+        /* reset before overflow */
-+        if (*lastID == maxID)
-+            *lastID = -1;
- 
--    if (STRPREFIX(name, VIR_NET_GENERATED_MACVTAP_PREFIX)) {
--        idstr = name + strlen(VIR_NET_GENERATED_MACVTAP_PREFIX);
--        flags |= VIR_NETDEV_MACVLAN_CREATE_WITH_TAP;
--    } else if (STRPREFIX(name, VIR_NET_GENERATED_MACVLAN_PREFIX)) {
--        idstr = name + strlen(VIR_NET_GENERATED_MACVLAN_PREFIX);
--    } else {
--        return 0;
--    }
-+        try = g_strdup_printf(iftemplate, id);
- 
--    if (virStrToLong_ui(idstr, NULL, 10, &id) < 0) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("couldn't get id value from macvtap device name %s"),
--                       name);
--        return -1;
--    }
--    return virNetDevMacVLanReleaseID(id, flags);
-+        if (!virNetDevExists(try)) {
-+            g_free(*ifname);
-+            *ifname = g_steal_pointer(&try);
-+            return 0;
-+        }
-+    } while (++attempts < 10000);
-+
-+    virReportError(VIR_ERR_INTERNAL_ERROR,
-+                   _("no unused %s names available"),
-+                   *ifname);
-+    return -1;
- }
- 
- 
-@@ -321,8 +232,7 @@ virNetDevMacVLanCreate(const char *ifname,
-                        const char *type,
-                        const virMacAddr *macaddress,
-                        const char *srcdev,
--                       uint32_t macvlan_mode,
--                       int *retry)
-+                       uint32_t macvlan_mode)
- {
-     int error = 0;
-     int ifindex = 0;
-@@ -331,7 +241,6 @@ virNetDevMacVLanCreate(const char *ifname,
-         .mac = macaddress,
-     };
- 
--    *retry = 0;
- 
-     if (virNetDevGetIndex(srcdev, &ifindex) < 0)
-         return -1;
-@@ -339,17 +248,15 @@ virNetDevMacVLanCreate(const char *ifname,
-     data.ifindex = &ifindex;
-     if (virNetlinkNewLink(ifname, type, &data, &error) < 0) {
-         char macstr[VIR_MAC_STRING_BUFLEN];
--        if (error == -EEXIST)
--            *retry = 1;
--        else if (error < 0)
--            virReportSystemError(-error,
--                                 _("error creating %s interface %s@%s (%s)"),
--                                 type, ifname, srcdev,
--                                 virMacAddrFormat(macaddress, macstr));
- 
-+        virReportSystemError(-error,
-+                             _("error creating %s interface %s@%s (%s)"),
-+                             type, ifname, srcdev,
-+                             virMacAddrFormat(macaddress, macstr));
-         return -1;
-     }
- 
-+    VIR_INFO("created device: '%s'", ifname);
-     return 0;
- }
- 
-@@ -364,6 +271,7 @@ virNetDevMacVLanCreate(const char *ifname,
-  */
- int virNetDevMacVLanDelete(const char *ifname)
- {
-+    VIR_INFO("delete device: '%s'", ifname);
-     return virNetlinkDelLink(ifname, NULL);
- }
- 
-@@ -904,13 +812,8 @@ virNetDevMacVLanCreateWithVPortProfile(const char *ifnameRequested,
-                                        unsigned int flags)
- {
-     const char *type = VIR_NET_GENERATED_PREFIX;
--    const char *pattern = (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ?
--        VIR_NET_GENERATED_MACVTAP_PATTERN : VIR_NET_GENERATED_MACVLAN_PATTERN;
--    int reservedID = -1;
--    char ifname[IFNAMSIZ];
--    int retries, do_retry = 0;
-+    g_autofree char *ifname = NULL;
-     uint32_t macvtapMode;
--    const char *ifnameCreated = NULL;
-     int vf = -1;
-     bool vnet_hdr = flags & VIR_NETDEV_MACVLAN_VNET_HDR;
- 
-@@ -945,6 +848,8 @@ virNetDevMacVLanCreateWithVPortProfile(const char *ifnameRequested,
-            return -1;
-     }
- 
-+    virMutexLock(&virNetDevMacVLanCreateMutex);
-+
-     if (ifnameRequested) {
-         int rc;
-         bool isAutoName
-@@ -952,97 +857,81 @@ virNetDevMacVLanCreateWithVPortProfile(const char *ifnameRequested,
-                STRPREFIX(ifnameRequested, VIR_NET_GENERATED_MACVLAN_PREFIX));
- 
-         VIR_INFO("Requested macvtap device name: %s", ifnameRequested);
--        virMutexLock(&virNetDevMacVLanCreateMutex);
- 
-         if ((rc = virNetDevExists(ifnameRequested)) < 0) {
-             virMutexUnlock(&virNetDevMacVLanCreateMutex);
-             return -1;
-         }
-+
-         if (rc) {
--            if (isAutoName)
--                goto create_name;
--            virReportSystemError(EEXIST,
--                                 _("Unable to create %s device %s"),
--                                 type, ifnameRequested);
--            virMutexUnlock(&virNetDevMacVLanCreateMutex);
--            return -1;
--        }
--        if (isAutoName &&
--            (reservedID = virNetDevMacVLanReserveName(ifnameRequested, true)) < 0) {
--            reservedID = -1;
--            goto create_name;
--        }
-+            /* ifnameRequested is already being used */
- 
--        if (virNetDevMacVLanCreate(ifnameRequested, type, macaddress,
--                                   linkdev, macvtapMode, &do_retry) < 0) {
--            if (isAutoName) {
--                virNetDevMacVLanReleaseName(ifnameRequested);
--                reservedID = -1;
--                goto create_name;
-+            if (!isAutoName) {
-+                virReportSystemError(EEXIST,
-+                                     _("Unable to create device '%s'"),
-+                                     ifnameRequested);
-+                virMutexUnlock(&virNetDevMacVLanCreateMutex);
-+                return -1;
-+            }
-+        } else {
-+
-+            /* ifnameRequested is available. try to open it */
-+
-+            virNetDevMacVLanReserveNameInternal(ifnameRequested);
-+
-+            if (virNetDevMacVLanCreate(ifnameRequested, type, macaddress,
-+                                       linkdev, macvtapMode) == 0) {
-+
-+                /* virNetDevMacVLanCreate() was successful - use this name */
-+                ifname = g_strdup(ifnameRequested);
-+
-+            } else if (!isAutoName) {
-+                /* coudn't open ifnameRequested, but it wasn't an
-+                 * autogenerated named, so there is nothing else to
-+                 * try - fail and return.
-+                 */
-+                virMutexUnlock(&virNetDevMacVLanCreateMutex);
-+                return -1;
-             }
--            virMutexUnlock(&virNetDevMacVLanCreateMutex);
--            return -1;
-         }
--        /* virNetDevMacVLanCreate() was successful - use this name */
--        ifnameCreated = ifnameRequested;
-- create_name:
--        virMutexUnlock(&virNetDevMacVLanCreateMutex);
-     }
- 
--    retries = MACVLAN_MAX_ID;
--    while (!ifnameCreated && retries) {
--        virMutexLock(&virNetDevMacVLanCreateMutex);
--        reservedID = virNetDevMacVLanReserveID(reservedID, flags, false, true);
--        if (reservedID < 0) {
-+    if (!ifname) {
-+        /* ifnameRequested was NULL, or it was an already in use
-+         * autogenerated name, so now we look for an unused
-+         * autogenerated name.
-+         */
-+        if (virNetDevMacVLanGenerateName(&ifname, flags) < 0 ||
-+            virNetDevMacVLanCreate(ifname, type, macaddress,
-+                                   linkdev, macvtapMode) < 0) {
-             virMutexUnlock(&virNetDevMacVLanCreateMutex);
-             return -1;
-         }
--        g_snprintf(ifname, sizeof(ifname), pattern, reservedID);
--        if (virNetDevMacVLanCreate(ifname, type, macaddress, linkdev,
--                                   macvtapMode, &do_retry) < 0) {
--            virNetDevMacVLanReleaseID(reservedID, flags);
--            virMutexUnlock(&virNetDevMacVLanCreateMutex);
--            if (!do_retry)
--                return -1;
--            VIR_INFO("Device %s wasn't reserved but already existed, skipping",
--                     ifname);
--            retries--;
--            continue;
--        }
--        ifnameCreated = ifname;
--        virMutexUnlock(&virNetDevMacVLanCreateMutex);
-     }
- 
--    if (!ifnameCreated) {
--        virReportError(VIR_ERR_INTERNAL_ERROR,
--                       _("Too many unreserved %s devices in use"),
--                       type);
--        return -1;
--    }
-+    /* all done creating the device */
-+    virMutexUnlock(&virNetDevMacVLanCreateMutex);
- 
--    if (virNetDevVPortProfileAssociate(ifnameCreated,
-+    if (virNetDevVPortProfileAssociate(ifname,
-                                        virtPortProfile,
-                                        macaddress,
-                                        linkdev,
-                                        vf,
--                                       vmuuid, vmOp, false) < 0)
-+                                       vmuuid, vmOp, false) < 0) {
-         goto link_del_exit;
-+    }
- 
-     if (flags & VIR_NETDEV_MACVLAN_CREATE_IFUP) {
--        if (virNetDevSetOnline(ifnameCreated, true) < 0)
-+        if (virNetDevSetOnline(ifname, true) < 0)
-             goto disassociate_exit;
-     }
- 
-     if (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) {
--        if (virNetDevMacVLanTapOpen(ifnameCreated, tapfd, tapfdSize) < 0)
-+        if (virNetDevMacVLanTapOpen(ifname, tapfd, tapfdSize) < 0)
-             goto disassociate_exit;
- 
-         if (virNetDevMacVLanTapSetup(tapfd, tapfdSize, vnet_hdr) < 0)
-             goto disassociate_exit;
--
--        *ifnameResult = g_strdup(ifnameCreated);
--    } else {
--        *ifnameResult = g_strdup(ifnameCreated);
-     }
- 
-     if (vmOp == VIR_NETDEV_VPORT_PROFILE_OP_CREATE ||
-@@ -1051,17 +940,18 @@ virNetDevMacVLanCreateWithVPortProfile(const char *ifnameRequested,
-          * a saved image) - migration and libvirtd restart are handled
-          * elsewhere.
-          */
--        if (virNetDevMacVLanVPortProfileRegisterCallback(ifnameCreated, macaddress,
-+        if (virNetDevMacVLanVPortProfileRegisterCallback(ifname, macaddress,
-                                                          linkdev, vmuuid,
-                                                          virtPortProfile,
-                                                          vmOp) < 0)
-             goto disassociate_exit;
-     }
- 
-+    *ifnameResult = g_steal_pointer(&ifname);
-     return 0;
- 
-  disassociate_exit:
--    ignore_value(virNetDevVPortProfileDisassociate(ifnameCreated,
-+    ignore_value(virNetDevVPortProfileDisassociate(ifname,
-                                                    virtPortProfile,
-                                                    macaddress,
-                                                    linkdev,
-@@ -1071,9 +961,7 @@ virNetDevMacVLanCreateWithVPortProfile(const char *ifnameRequested,
-         VIR_FORCE_CLOSE(tapfd[tapfdSize]);
- 
-  link_del_exit:
--    ignore_value(virNetDevMacVLanDelete(ifnameCreated));
--    virNetDevMacVLanReleaseName(ifnameCreated);
--
-+    ignore_value(virNetDevMacVLanDelete(ifname));
-     return -1;
- }
- 
-@@ -1107,7 +995,6 @@ int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname,
-             ret = -1;
-         if (virNetDevMacVLanDelete(ifname) < 0)
-             ret = -1;
--        virNetDevMacVLanReleaseName(ifname);
-     }
- 
-     if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) {
-@@ -1182,8 +1069,7 @@ int virNetDevMacVLanCreate(const char *ifname G_GNUC_UNUSED,
-                            const char *type G_GNUC_UNUSED,
-                            const virMacAddr *macaddress G_GNUC_UNUSED,
-                            const char *srcdev G_GNUC_UNUSED,
--                           uint32_t macvlan_mode G_GNUC_UNUSED,
--                           int *retry G_GNUC_UNUSED)
-+                           uint32_t macvlan_mode G_GNUC_UNUSED)
- {
-     virReportSystemError(ENOSYS, "%s",
-                          _("Cannot create macvlan devices on this platform"));
-@@ -1272,18 +1158,9 @@ int virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname G_GNUC_UNUSE
-     return -1;
- }
- 
--int virNetDevMacVLanReleaseName(const char *name G_GNUC_UNUSED)
-+void virNetDevMacVLanReserveName(const char *name G_GNUC_UNUSED)
- {
-     virReportSystemError(ENOSYS, "%s",
-                          _("Cannot create macvlan devices on this platform"));
--    return -1;
--}
--
--int virNetDevMacVLanReserveName(const char *name G_GNUC_UNUSED,
--                                bool quietFail G_GNUC_UNUSED)
--{
--    virReportSystemError(ENOSYS, "%s",
--                         _("Cannot create macvlan devices on this platform"));
--    return -1;
- }
- #endif /* ! WITH_MACVTAP */
-diff --git a/src/util/virnetdevmacvlan.h b/src/util/virnetdevmacvlan.h
-index fc1bb018a2..48800a8fcf 100644
---- a/src/util/virnetdevmacvlan.h
-+++ b/src/util/virnetdevmacvlan.h
-@@ -54,8 +54,7 @@ typedef enum {
- #define VIR_NET_GENERATED_MACVTAP_PREFIX "macvtap"
- #define VIR_NET_GENERATED_MACVLAN_PREFIX "macvlan"
- 
--int virNetDevMacVLanReserveName(const char *name, bool quietfail);
--int virNetDevMacVLanReleaseName(const char *name);
-+void virNetDevMacVLanReserveName(const char *name);
- 
- bool virNetDevMacVLanIsMacvtap(const char *ifname)
-    ATTRIBUTE_NONNULL(1) G_GNUC_WARN_UNUSED_RESULT G_GNUC_NO_INLINE;
-@@ -64,8 +63,7 @@ int virNetDevMacVLanCreate(const char *ifname,
-                            const char *type,
-                            const virMacAddr *macaddress,
-                            const char *srcdev,
--                           uint32_t macvlan_mode,
--                           int *retry)
-+                           uint32_t macvlan_mode)
-     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
-     G_GNUC_WARN_UNUSED_RESULT;
- 
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-util-storage-Store-backing-store-format-in-virStorageSource.patch b/SOURCES/libvirt-util-storage-Store-backing-store-format-in-virStorageSource.patch
deleted file mode 100644
index 70ee8a9..0000000
--- a/SOURCES/libvirt-util-storage-Store-backing-store-format-in-virStorageSource.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-From 80cb87e61c8e48d2714c9369c14a880352114d20 Mon Sep 17 00:00:00 2001
-Message-Id: <80cb87e61c8e48d2714c9369c14a880352114d20@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:37 +0100
-Subject: [PATCH] util: storage: Store backing store format in virStorageSource
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We store the backing file string in the structure so we should also
-store the format so that callers can be simplified.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 62539c5f7d6a994b9cbd677564e7206cab1c5a45)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <6f884591ac16f32370925bdb7746c655c7c87302.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 35 +++++++++++++++++------------------
- src/util/virstoragefile.h |  1 +
- 2 files changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 391e2ce86f..d594ee3695 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -935,15 +935,11 @@ virStorageFileGetEncryptionPayloadOffset(const struct FileEncryptionInfo *info,
- static int
- virStorageFileGetMetadataInternal(virStorageSourcePtr meta,
-                                   char *buf,
--                                  size_t len,
--                                  int *backingFormat)
-+                                  size_t len)
- {
--    int dummy;
-+    int format;
-     size_t i;
- 
--    if (!backingFormat)
--        backingFormat = &dummy;
--
-     VIR_DEBUG("path=%s, buf=%p, len=%zu, meta->format=%d",
-               meta->path, buf, len, meta->format);
- 
-@@ -1009,8 +1005,10 @@ virStorageFileGetMetadataInternal(virStorageSourcePtr meta,
-     VIR_FREE(meta->backingStoreRaw);
-     if (fileTypeInfo[meta->format].getBackingStore != NULL) {
-         int store = fileTypeInfo[meta->format].getBackingStore(&meta->backingStoreRaw,
--                                                               backingFormat,
-+                                                               &format,
-                                                                buf, len);
-+        meta->backingStoreRawFormat = format;
-+
-         if (store == BACKING_STORE_INVALID)
-             return 0;
- 
-@@ -1135,20 +1133,18 @@ virStorageFileGetMetadataFromBuf(const char *path,
-                                  int *backingFormat)
- {
-     virStorageSourcePtr ret = NULL;
--    int dummy;
--
--    if (!backingFormat)
--        backingFormat = &dummy;
- 
-     if (!(ret = virStorageFileMetadataNew(path, format)))
-         return NULL;
- 
--    if (virStorageFileGetMetadataInternal(ret, buf, len,
--                                          backingFormat) < 0) {
-+    if (virStorageFileGetMetadataInternal(ret, buf, len) < 0) {
-         virObjectUnref(ret);
-         return NULL;
-     }
- 
-+    if (backingFormat)
-+        *backingFormat = ret->backingStoreRawFormat;
-+
-     return ret;
- }
- 
-@@ -1211,9 +1207,12 @@ virStorageFileGetMetadataFromFD(const char *path,
-         return NULL;
-     }
- 
--    if (virStorageFileGetMetadataInternal(meta, buf, len, backingFormat) < 0)
-+    if (virStorageFileGetMetadataInternal(meta, buf, len) < 0)
-         return NULL;
- 
-+    if (backingFormat)
-+        *backingFormat = meta->backingStoreRawFormat;
-+
-     if (S_ISREG(sb.st_mode))
-         meta->type = VIR_STORAGE_TYPE_FILE;
-     else if (S_ISBLK(sb.st_mode))
-@@ -2293,6 +2292,7 @@ virStorageSourceCopy(const virStorageSource *src,
-     def->volume = g_strdup(src->volume);
-     def->relPath = g_strdup(src->relPath);
-     def->backingStoreRaw = g_strdup(src->backingStoreRaw);
-+    def->backingStoreRawFormat = src->backingStoreRawFormat;
-     def->externalDataStoreRaw = g_strdup(src->externalDataStoreRaw);
-     def->snapshot = g_strdup(src->snapshot);
-     def->configFile = g_strdup(src->configFile);
-@@ -5000,7 +5000,6 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-                                  unsigned int depth)
- {
-     size_t headerLen;
--    int backingFormat;
-     int rv;
-     g_autofree char *buf = NULL;
-     g_autoptr(virStorageSource) backingStore = NULL;
-@@ -5018,7 +5017,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-                                                    &buf, &headerLen, cycle) < 0)
-         return -1;
- 
--    if (virStorageFileGetMetadataInternal(src, buf, headerLen, &backingFormat) < 0)
-+    if (virStorageFileGetMetadataInternal(src, buf, headerLen) < 0)
-         return -1;
- 
-     if (src->backingStoreRaw) {
-@@ -5029,7 +5028,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-         if (rv == 1)
-             return 0;
- 
--        backingStore->format = backingFormat;
-+        backingStore->format = src->backingStoreRawFormat;
- 
-         if (backingStore->format == VIR_STORAGE_FILE_AUTO) {
-             /* Assuming the backing store to be raw can lead to failures. We do
-@@ -5180,7 +5179,7 @@ virStorageFileGetBackingStoreStr(virStorageSourcePtr src,
-     if (!(tmp = virStorageSourceCopy(src, false)))
-         return -1;
- 
--    if (virStorageFileGetMetadataInternal(tmp, buf, headerLen, NULL) < 0)
-+    if (virStorageFileGetMetadataInternal(tmp, buf, headerLen) < 0)
-         return -1;
- 
-     *backing = g_steal_pointer(&tmp->backingStoreRaw);
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 2a684fd746..ecba418bb3 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -330,6 +330,7 @@ struct _virStorageSource {
-     /* Name of the child backing store recorded in metadata of the
-      * current file.  */
-     char *backingStoreRaw;
-+    virStorageFileFormat backingStoreRawFormat;
-     /* Name of the child data file recorded in metadata of the current file. */
-     char *externalDataStoreRaw;
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-util-storagefile-Drop-image-format-probing-by-file-suffix.patch b/SOURCES/libvirt-util-storagefile-Drop-image-format-probing-by-file-suffix.patch
deleted file mode 100644
index ed14789..0000000
--- a/SOURCES/libvirt-util-storagefile-Drop-image-format-probing-by-file-suffix.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-From d926f32560cb7996b6a5ec08545d946bf0594fe8 Mon Sep 17 00:00:00 2001
-Message-Id: <d926f32560cb7996b6a5ec08545d946bf0594fe8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:28 +0100
-Subject: [PATCH] util: storagefile: Drop image format probing by file suffix
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Probing by file suffix was meant to be a last resort if probing by
-contents fails or is not supported. For most formats we never specified
-any suffix. There's a few formats implementing both magic bytes and
-suffix and finally DMG which had only suffix probing. Since suffix
-probing is nowhere reliable and only one format depends on in which has a
-comment that qemu doesn't do the probing either drop the whole
-infrastructure.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 181fccc2ed67a79d462dfcf5b6fcfd2fbb1702b9)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <113e583f0c032b616ea5c691fe36540ebb8e7c8f.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 58 ++++++++++++---------------------------
- 1 file changed, 17 insertions(+), 41 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index fcbc97d96a..6b83fc0e24 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -146,12 +146,10 @@ struct FileEncryptionInfo {
-     int payloadOffset; /* start offset of the volume data (in 512 byte sectors) */
- };
- 
--/* Either 'magic' or 'extension' *must* be provided */
- struct FileTypeInfo {
-     int magicOffset;    /* Byte offset of the magic */
-     const char *magic;  /* Optional string of file magic
-                          * to check at head of file */
--    const char *extension; /* Optional file extension to check */
-     enum lv_endian endian; /* Endianness of file format */
- 
-     int versionOffset;    /* Byte offset from start of file
-@@ -297,17 +295,17 @@ static struct FileEncryptionInfo const qcow2EncryptionInfo[] = {
- };
- 
- static struct FileTypeInfo const fileTypeInfo[] = {
--    [VIR_STORAGE_FILE_NONE] = { 0, NULL, NULL, LV_LITTLE_ENDIAN,
-+    [VIR_STORAGE_FILE_NONE] = { 0, NULL, LV_LITTLE_ENDIAN,
-                                 -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL },
--    [VIR_STORAGE_FILE_RAW] = { 0, NULL, NULL, LV_LITTLE_ENDIAN,
-+    [VIR_STORAGE_FILE_RAW] = { 0, NULL, LV_LITTLE_ENDIAN,
-                                -1, 0, {0}, 0, 0, 0,
-                                luksEncryptionInfo,
-                                NULL, NULL },
--    [VIR_STORAGE_FILE_DIR] = { 0, NULL, NULL, LV_LITTLE_ENDIAN,
-+    [VIR_STORAGE_FILE_DIR] = { 0, NULL, LV_LITTLE_ENDIAN,
-                                -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL },
-     [VIR_STORAGE_FILE_BOCHS] = {
-         /*"Bochs Virtual HD Image", */ /* Untested */
--        0, NULL, NULL,
-+        0, NULL,
-         LV_LITTLE_ENDIAN, 64, 4, {0x20000},
-         32+16+16+4+4+4+4+4, 8, 1, NULL, NULL, NULL
-     },
-@@ -316,7 +314,7 @@ static struct FileTypeInfo const fileTypeInfo[] = {
-            #V2.0 Format
-            modprobe cloop file=$0 && mount -r -t iso9660 /dev/cloop $1
-         */ /* Untested */
--        0, NULL, NULL,
-+        0, NULL,
-         LV_LITTLE_ENDIAN, -1, 0, {0},
-         -1, 0, 0, NULL, NULL, NULL
-     },
-@@ -324,50 +322,50 @@ static struct FileTypeInfo const fileTypeInfo[] = {
-         /* XXX QEMU says there's no magic for dmg,
-          * /usr/share/misc/magic lists double magic (both offsets
-          * would have to match) but then disables that check. */
--        0, NULL, ".dmg",
-+        0, NULL,
-         0, -1, 0, {0},
-         -1, 0, 0, NULL, NULL, NULL
-     },
-     [VIR_STORAGE_FILE_ISO] = {
--        32769, "CD001", ".iso",
-+        32769, "CD001",
-         LV_LITTLE_ENDIAN, -2, 0, {0},
-         -1, 0, 0, NULL, NULL, NULL
-     },
-     [VIR_STORAGE_FILE_VPC] = {
--        0, "conectix", NULL,
-+        0, "conectix",
-         LV_BIG_ENDIAN, 12, 4, {0x10000},
-         8 + 4 + 4 + 8 + 4 + 4 + 2 + 2 + 4, 8, 1, NULL, NULL, NULL
-     },
-     /* TODO: add getBackingStore function */
-     [VIR_STORAGE_FILE_VDI] = {
--        64, "\x7f\x10\xda\xbe", ".vdi",
-+        64, "\x7f\x10\xda\xbe",
-         LV_LITTLE_ENDIAN, 68, 4, {0x00010001},
-         64 + 5 * 4 + 256 + 7 * 4, 8, 1, NULL, NULL, NULL},
- 
-     /* Not direct file formats, but used for various drivers */
--    [VIR_STORAGE_FILE_FAT] = { 0, NULL, NULL, LV_LITTLE_ENDIAN,
-+    [VIR_STORAGE_FILE_FAT] = { 0, NULL, LV_LITTLE_ENDIAN,
-                                -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL },
--    [VIR_STORAGE_FILE_VHD] = { 0, NULL, NULL, LV_LITTLE_ENDIAN,
-+    [VIR_STORAGE_FILE_VHD] = { 0, NULL, LV_LITTLE_ENDIAN,
-                                -1, 0, {0}, 0, 0, 0, NULL, NULL, NULL },
--    [VIR_STORAGE_FILE_PLOOP] = { 0, "WithouFreSpacExt", NULL, LV_LITTLE_ENDIAN,
-+    [VIR_STORAGE_FILE_PLOOP] = { 0, "WithouFreSpacExt", LV_LITTLE_ENDIAN,
-                                  -2, 0, {0}, PLOOP_IMAGE_SIZE_OFFSET, 0,
-                                  PLOOP_SIZE_MULTIPLIER, NULL, NULL, NULL },
- 
-     /* All formats with a backing store probe below here */
-     [VIR_STORAGE_FILE_COW] = {
--        0, "OOOM", NULL,
-+        0, "OOOM",
-         LV_BIG_ENDIAN, 4, 4, {2},
-         4+4+1024+4, 8, 1, NULL, cowGetBackingStore, NULL
-     },
-     [VIR_STORAGE_FILE_QCOW] = {
--        0, "QFI", NULL,
-+        0, "QFI",
-         LV_BIG_ENDIAN, 4, 4, {1},
-         QCOWX_HDR_IMAGE_SIZE, 8, 1,
-         qcow1EncryptionInfo,
-         qcowXGetBackingStore, NULL
-     },
-     [VIR_STORAGE_FILE_QCOW2] = {
--        0, "QFI", NULL,
-+        0, "QFI",
-         LV_BIG_ENDIAN, 4, 4, {2, 3},
-         QCOWX_HDR_IMAGE_SIZE, 8, 1,
-         qcow2EncryptionInfo,
-@@ -376,12 +374,12 @@ static struct FileTypeInfo const fileTypeInfo[] = {
-     },
-     [VIR_STORAGE_FILE_QED] = {
-         /* https://wiki.qemu.org/Features/QED */
--        0, "QED", NULL,
-+        0, "QED",
-         LV_LITTLE_ENDIAN, -2, 0, {0},
-         QED_HDR_IMAGE_SIZE, 8, 1, NULL, qedGetBackingStore, NULL
-     },
-     [VIR_STORAGE_FILE_VMDK] = {
--        0, "KDMV", NULL,
-+        0, "KDMV",
-         LV_LITTLE_ENDIAN, 4, 4, {1, 2, 3},
-         4+4+4, 8, 512, NULL, vmdk4GetBackingStore, NULL
-     },
-@@ -707,20 +705,6 @@ virStorageFileMatchesMagic(int magicOffset,
- }
- 
- 
--static bool
--virStorageFileMatchesExtension(const char *extension,
--                               const char *path)
--{
--    if (extension == NULL)
--        return false;
--
--    if (virStringHasCaseSuffix(path, extension))
--        return true;
--
--    return false;
--}
--
--
- static bool
- virStorageFileMatchesVersion(int versionOffset,
-                              int versionSize,
-@@ -842,14 +826,6 @@ virStorageFileProbeFormatFromBuf(const char *path,
-                  "Please report new version to libvir-list@redhat.com",
-                  path, virStorageFileFormatTypeToString(possibleFormat));
- 
--    /* No magic, so check file extension */
--    for (i = 0; i < VIR_STORAGE_FILE_LAST; i++) {
--        if (virStorageFileMatchesExtension(fileTypeInfo[i].extension, path)) {
--            format = i;
--            goto cleanup;
--        }
--    }
--
-  cleanup:
-     VIR_DEBUG("format=%d", format);
-     return format;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-util-storagefile-Properly-set-transport-type-when-parsing-NBD-strings.patch b/SOURCES/libvirt-util-storagefile-Properly-set-transport-type-when-parsing-NBD-strings.patch
deleted file mode 100644
index 7b9b4bc..0000000
--- a/SOURCES/libvirt-util-storagefile-Properly-set-transport-type-when-parsing-NBD-strings.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From c8d5d7684ae855f75e3bba3f72b5b3f973ccdea2 Mon Sep 17 00:00:00 2001
-Message-Id: <c8d5d7684ae855f75e3bba3f72b5b3f973ccdea2@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 17 Jan 2020 13:16:57 +0100
-Subject: [PATCH] util: storagefile: Properly set transport type when parsing
- NBD strings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When parsing legacy NBD backing file strings such as
-'nbd:unix:/tmp/sock:exportname=/' we'd fail to set the transport to
-VIR_STORAGE_NET_HOST_TRANS_UNIX. This started to be a problem once we
-actually started to generate config of the backing store on the command
-line with -blockdev as the JSON code would try to format it as TCP and
-fail with:
-
- internal error: argument key 'host' must not have null value
-
-Set the type properly and add a test.
-
-This bug was found by the libguestfs test suite in:
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791614
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reported-by: Ming Xie <mxie@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-Tested-by: Richard W.M. Jones <rjones@redhat.com>
-(cherry picked from commit 5f2fa393f721861132500f717ce509bb66afcdb7)
-Message-Id: <79e24a6416d5bfbba6cdb2764b29663c2f8ccd45.1579263320.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
----
- src/util/virstoragefile.c | 2 +-
- tests/virstoragetest.c    | 4 ++++
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 1397f532fd..7a2af0ad94 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2964,7 +2964,7 @@ virStorageSourceParseNBDColonString(const char *nbdstr,
-         }
- 
-         src->hosts->socket = g_strdup(backing[2]);
--
-+        src->hosts->transport = VIR_STORAGE_NET_HOST_TRANS_UNIX;
-    } else {
-         src->hosts->name = g_strdup(backing[1]);
- 
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 2862758752..370e19252b 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1258,6 +1258,10 @@ mymain(void)
-                        "<source protocol='nbd' name=':test'>\n"
-                        "  <host name='example.org' port='6000'/>\n"
-                        "</source>\n");
-+    TEST_BACKING_PARSE("nbd:unix:/tmp/sock:exportname=/",
-+                       "<source protocol='nbd' name='/'>\n"
-+                       "  <host transport='unix' socket='/tmp/sock'/>\n"
-+                       "</source>\n");
-     TEST_BACKING_PARSE("nbd://example.org:1234",
-                        "<source protocol='nbd'>\n"
-                        "  <host name='example.org' port='1234'/>\n"
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-util-synchronize-with-firewalld-before-we-start-calling-iptables-directly.patch b/SOURCES/libvirt-util-synchronize-with-firewalld-before-we-start-calling-iptables-directly.patch
deleted file mode 100644
index 63ca58b..0000000
--- a/SOURCES/libvirt-util-synchronize-with-firewalld-before-we-start-calling-iptables-directly.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-From dc8cf11686c075166a3029e974a6caeefe521d75 Mon Sep 17 00:00:00 2001
-Message-Id: <dc8cf11686c075166a3029e974a6caeefe521d75@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:50 -0500
-Subject: [PATCH] util: synchronize with firewalld before we start calling
- iptables directly
-
-When it is starting up, firewalld will delete all existing iptables
-rules and chains before adding its own rules. If libvirtd were to try
-to directly add iptables rules during the time before firewalld has
-finished initializing, firewalld would end up deleting the rules that
-libvirtd has just added.
-
-Currently this isn't a problem, since libvirtd only adds iptables
-rules via the firewalld "passthrough command" API, and so firewalld is
-able to properly serialize everything. However, we will soon be
-changing libvirtd to add its iptables and ebtables rules by directly
-calling iptables/ebtables rather than via firewalld, thus removing the
-serialization of libvirtd adding rules vs. firewalld deleting rules.
-
-This will especially apparent (if we don't fix it in advance, as this
-patch does) when libvirtd is responding to the dbus NameOwnerChanged
-event, which is used to learn when firewalld has been restarted. In
-that case, dbus sends the event before firewalld has been able to
-complete its initialization, so when libvirt responds to the event by
-adding back its iptables rules (with direct calls to
-/usr/bin/iptables), some of those rules are added before firewalld has
-a chance to do its "remove everything" startup protocol. The usual
-result of this is that libvirt will successfully add its private
-chains (e.g. LIBVIRT_INP, etc), but then fail when it tries to add a
-rule jumping to one of those chains (because in the interim, firewalld
-has deleted the new chains).
-
-The solution is for libvirt to preface it's direct calling to iptables
-with a iptables command sent via firewalld's passthrough command
-API. Since commands sent to firewalld are completed synchronously, and
-since firewalld won't service them until it has completed its own
-initialization, this will assure that by the time libvirt starts
-calling iptables to add rules, that firewalld will not be following up
-by deleting any of those rules.
-
-To minimize the amount of extra overhead, we request the simplest
-iptables command possible: "iptables -V" (and aside from logging a
-debug message, we ignore the result, for good measure).
-
-(This patch is being done *before* the patch that switches to calling
-iptables directly, so that everything will function properly with any
-fractional part of the series applied).
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 070690538a1ed301b004c542d94b13ee9bffc9d6)
-
-Conflicts: src/util/viriptables.c:
-    one line of code in context moved during g_autoptr conversion.
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20210116035151.1066734-8-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/libvirt_private.syms |  1 +
- src/util/virfirewall.c   | 30 ++++++++++++++++++++++++++++++
- src/util/virfirewall.h   |  2 ++
- src/util/viriptables.c   |  7 +++++++
- 4 files changed, 40 insertions(+)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index edc53ce899..9d87e2a27b 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -2080,6 +2080,7 @@ virFileCacheSetPriv;
- # util/virfirewall.h
- virFirewallAddRuleFull;
- virFirewallApply;
-+virFirewallBackendSynchronize;
- virFirewallFree;
- virFirewallNew;
- virFirewallRemoveRule;
-diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
-index 520d515c11..66d20d3f17 100644
---- a/src/util/virfirewall.c
-+++ b/src/util/virfirewall.c
-@@ -653,6 +653,36 @@ virFirewallApplyRuleFirewallD(virFirewallRulePtr rule,
-     return virFirewallDApplyRule(rule->layer, rule->args, rule->argsLen, ignoreErrors, output);
- }
- 
-+
-+void
-+virFirewallBackendSynchronize(void)
-+{
-+    const char *arg = "-V";
-+    g_autofree char *output = NULL;
-+
-+    switch (currentBackend) {
-+    case VIR_FIREWALL_BACKEND_DIRECT:
-+        /* nobody to synchronize with */
-+        break;
-+    case VIR_FIREWALL_BACKEND_FIREWALLD:
-+        /* Send a simple rule via firewalld's passthrough iptables
-+         * command so that we'll be sure firewalld has fully
-+         * initialized and caught up with its internal queue of
-+         * iptables commands. Waiting for this will prevent our own
-+         * directly-executed iptables commands from being run while
-+         * firewalld is still initializing.
-+         */
-+        ignore_value(virFirewallDApplyRule(VIR_FIREWALL_LAYER_IPV4,
-+                                           (char **)&arg, 1, true, &output));
-+        VIR_DEBUG("Result of 'iptables -V' via firewalld: %s", NULLSTR(output));
-+        break;
-+    case VIR_FIREWALL_BACKEND_AUTOMATIC:
-+    case VIR_FIREWALL_BACKEND_LAST:
-+        break;
-+    }
-+}
-+
-+
- static int
- virFirewallApplyRule(virFirewallPtr firewall,
-                      virFirewallRulePtr rule,
-diff --git a/src/util/virfirewall.h b/src/util/virfirewall.h
-index fda3cdec01..3db0864380 100644
---- a/src/util/virfirewall.h
-+++ b/src/util/virfirewall.h
-@@ -111,4 +111,6 @@ void virFirewallStartRollback(virFirewallPtr firewall,
- 
- int virFirewallApply(virFirewallPtr firewall);
- 
-+void virFirewallBackendSynchronize(void);
-+
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(virFirewall, virFirewallFree);
-diff --git a/src/util/viriptables.c b/src/util/viriptables.c
-index 6b3a025880..41544b7f36 100644
---- a/src/util/viriptables.c
-+++ b/src/util/viriptables.c
-@@ -154,6 +154,13 @@ iptablesSetupPrivateChains(virFirewallLayer layer)
- 
-     fw = virFirewallNew();
- 
-+    /* When the backend is firewalld, we need to make sure that
-+     * firewalld has been fully started and completed its
-+     * initialization, otherwise firewalld might delete our rules soon
-+     * after we add them!
-+     */
-+    virFirewallBackendSynchronize();
-+
-     virFirewallStartTransaction(fw, 0);
- 
-     for (i = 0; i < G_N_ELEMENTS(data); i++)
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-by-default.patch b/SOURCES/libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-by-default.patch
deleted file mode 100644
index 6446cf4..0000000
--- a/SOURCES/libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-by-default.patch
+++ /dev/null
@@ -1,225 +0,0 @@
-From d7703d11a44505d1a17001d8cfd36bf74d20b710 Mon Sep 17 00:00:00 2001
-Message-Id: <d7703d11a44505d1a17001d8cfd36bf74d20b710@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:46 -0500
-Subject: [PATCH] util/tests: enable locking on iptables/ebtables commandlines
- by default
-
-iptables and ip6tables have had a "-w" commandline option to grab a
-systemwide lock that prevents two iptables invocations from modifying
-the iptables chains since 2013 (upstream commit 93587a04 in
-iptables-1.4.20).  Similarly, ebtables has had a "--concurrent"
-commandline option for the same purpose since 2011 (in the upstream
-ebtables commit f9b4bcb93, which was present in ebtables-2.0.10.4).
-
-Libvirt added code to conditionally use the commandline option for
-iptables/ip6tables in upstream commit ba95426d6f (libvirt-1.2.0,
-November 2013), and for ebtables in upstream commit dc33e6e4a5
-(libvirt-1.2.11, November 2014) (the latter actually *re*-added the
-locking for iptables/ip6tables, as it had accidentally been removed
-during a refactor of firewall code in the interim).
-
-I say "conditionally" because a check was made during firewall module
-initialization that tried executing a test command with the
--w/--concurrent option, and only continued using it for actual
-commands if that test command completed successfully. At the time the
-code was added this was a reasonable thing to do, as it had been less
-than a year since introduction of -w to iptables, so many distros
-supported by libvirt were still using iptables (and possibly even
-ebtables) versions too old to have the new commandline options.
-
-It is now 2020, and as far as I can discern from repology.org (and
-manually examining a RHEL7.9 system), every version of every distro
-that is supported by libvirt now uses new enough versions of both
-iptables and ebtables that they all have support for -w/--concurrent.
-That means we can finally remove the conditional code and simply
-always use them.
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 0a867cd895f06134d24eb27070285bb4b50c088f)
-Message-Id: <20210116035151.1066734-4-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/libvirt_private.syms         |  1 -
- src/util/virfirewall.c           | 64 ++------------------------------
- src/util/virfirewall.h           |  2 -
- tests/networkxml2firewalltest.c  |  2 -
- tests/nwfilterebiptablestest.c   |  2 -
- tests/nwfilterxml2firewalltest.c |  2 -
- tests/virfirewalltest.c          |  2 -
- 7 files changed, 3 insertions(+), 72 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index d6598c2514..edc53ce899 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -2089,7 +2089,6 @@ virFirewallRuleAddArgList;
- virFirewallRuleAddArgSet;
- virFirewallRuleGetArgCount;
- virFirewallSetBackend;
--virFirewallSetLockOverride;
- virFirewallStartRollback;
- virFirewallStartTransaction;
- 
-diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
-index c2de2bccae..2e3b02402e 100644
---- a/src/util/virfirewall.c
-+++ b/src/util/virfirewall.c
-@@ -97,59 +97,6 @@ virFirewallOnceInit(void)
- 
- VIR_ONCE_GLOBAL_INIT(virFirewall);
- 
--static bool iptablesUseLock;
--static bool ip6tablesUseLock;
--static bool ebtablesUseLock;
--static bool lockOverride; /* true to avoid lock probes */
--
--void
--virFirewallSetLockOverride(bool avoid)
--{
--    lockOverride = avoid;
--    if (avoid) {
--        /* add the lock option to all commands */
--        iptablesUseLock = true;
--        ip6tablesUseLock = true;
--        ebtablesUseLock = true;
--    }
--}
--
--static void
--virFirewallCheckUpdateLock(bool *lockflag,
--                           const char *const*args)
--{
--    int status; /* Ignore failed commands without logging them */
--    g_autoptr(virCommand) cmd = virCommandNewArgs(args);
--    if (virCommandRun(cmd, &status) < 0 || status) {
--        VIR_INFO("locking not supported by %s", args[0]);
--    } else {
--        VIR_INFO("using locking for %s", args[0]);
--        *lockflag = true;
--    }
--}
--
--static void
--virFirewallCheckUpdateLocking(void)
--{
--    const char *iptablesArgs[] = {
--        IPTABLES_PATH, "-w", "-L", "-n", NULL,
--    };
--    const char *ip6tablesArgs[] = {
--        IP6TABLES_PATH, "-w", "-L", "-n", NULL,
--    };
--    const char *ebtablesArgs[] = {
--        EBTABLES_PATH, "--concurrent", "-L", NULL,
--    };
--    if (lockOverride)
--        return;
--    virFirewallCheckUpdateLock(&iptablesUseLock,
--                               iptablesArgs);
--    virFirewallCheckUpdateLock(&ip6tablesUseLock,
--                               ip6tablesArgs);
--    virFirewallCheckUpdateLock(&ebtablesUseLock,
--                               ebtablesArgs);
--}
--
- static int
- virFirewallValidateBackend(virFirewallBackend backend)
- {
-@@ -197,8 +144,6 @@ virFirewallValidateBackend(virFirewallBackend backend)
- 
-     currentBackend = backend;
- 
--    virFirewallCheckUpdateLocking();
--
-     return 0;
- }
- 
-@@ -363,16 +308,13 @@ virFirewallAddRuleFullV(virFirewallPtr firewall,
- 
-     switch (rule->layer) {
-     case VIR_FIREWALL_LAYER_ETHERNET:
--        if (ebtablesUseLock)
--            ADD_ARG(rule, "--concurrent");
-+        ADD_ARG(rule, "--concurrent");
-         break;
-     case VIR_FIREWALL_LAYER_IPV4:
--        if (iptablesUseLock)
--            ADD_ARG(rule, "-w");
-+        ADD_ARG(rule, "-w");
-         break;
-     case VIR_FIREWALL_LAYER_IPV6:
--        if (ip6tablesUseLock)
--            ADD_ARG(rule, "-w");
-+        ADD_ARG(rule, "-w");
-         break;
-     case VIR_FIREWALL_LAYER_LAST:
-         break;
-diff --git a/src/util/virfirewall.h b/src/util/virfirewall.h
-index 6148f46827..fda3cdec01 100644
---- a/src/util/virfirewall.h
-+++ b/src/util/virfirewall.h
-@@ -111,6 +111,4 @@ void virFirewallStartRollback(virFirewallPtr firewall,
- 
- int virFirewallApply(virFirewallPtr firewall);
- 
--void virFirewallSetLockOverride(bool avoid);
--
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(virFirewall, virFirewallFree);
-diff --git a/tests/networkxml2firewalltest.c b/tests/networkxml2firewalltest.c
-index 0ad5e2303b..886b268319 100644
---- a/tests/networkxml2firewalltest.c
-+++ b/tests/networkxml2firewalltest.c
-@@ -152,8 +152,6 @@ mymain(void)
-             ret = -1; \
-     } while (0)
- 
--    virFirewallSetLockOverride(true);
--
-     if (virFirewallSetBackend(VIR_FIREWALL_BACKEND_DIRECT) < 0) {
-         if (!hasNetfilterTools()) {
-             fprintf(stderr, "iptables/ip6tables/ebtables tools not present");
-diff --git a/tests/nwfilterebiptablestest.c b/tests/nwfilterebiptablestest.c
-index e70f0e2400..adce7430a9 100644
---- a/tests/nwfilterebiptablestest.c
-+++ b/tests/nwfilterebiptablestest.c
-@@ -510,8 +510,6 @@ mymain(void)
- {
-     int ret = 0;
- 
--    virFirewallSetLockOverride(true);
--
-     if (virFirewallSetBackend(VIR_FIREWALL_BACKEND_DIRECT) < 0) {
-         if (!hasNetfilterTools()) {
-             fprintf(stderr, "iptables/ip6tables/ebtables tools not present");
-diff --git a/tests/nwfilterxml2firewalltest.c b/tests/nwfilterxml2firewalltest.c
-index c97f83b24a..73f7991a96 100644
---- a/tests/nwfilterxml2firewalltest.c
-+++ b/tests/nwfilterxml2firewalltest.c
-@@ -459,8 +459,6 @@ mymain(void)
-             ret = -1; \
-     } while (0)
- 
--    virFirewallSetLockOverride(true);
--
-     if (virFirewallSetBackend(VIR_FIREWALL_BACKEND_DIRECT) < 0) {
-         if (!hasNetfilterTools()) {
-             fprintf(stderr, "iptables/ip6tables/ebtables tools not present");
-diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
-index 195163a985..1ec768d302 100644
---- a/tests/virfirewalltest.c
-+++ b/tests/virfirewalltest.c
-@@ -1141,8 +1141,6 @@ mymain(void)
-     RUN_TEST_DIRECT(name, method)
- # endif /* ! WITH_DBUS */
- 
--    virFirewallSetLockOverride(true);
--
-     RUN_TEST("single group", testFirewallSingleGroup);
-     RUN_TEST("remove rule", testFirewallRemoveRule);
-     RUN_TEST("many groups", testFirewallManyGroups);
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-in-unit-tests.patch b/SOURCES/libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-in-unit-tests.patch
deleted file mode 100644
index 6230734..0000000
--- a/SOURCES/libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-in-unit-tests.patch
+++ /dev/null
@@ -1,6497 +0,0 @@
-From 4dcb98488fe7049c914a9e2bd82d2fcae834bba5 Mon Sep 17 00:00:00 2001
-Message-Id: <4dcb98488fe7049c914a9e2bd82d2fcae834bba5@dist-git>
-From: Laine Stump <laine@redhat.com>
-Date: Fri, 15 Jan 2021 22:51:45 -0500
-Subject: [PATCH] util/tests: enable locking on iptables/ebtables commandlines
- in unit tests
-
-All the unit tests that use iptables/ip6tables/ebtables have been
-written to omit the locking/exclusive use primitive on the generated
-commandlines. Even though none of the tests actually execute those
-commands (and so it doesn't matter for purposes of the test whether or
-not the commands support these options), it still made sense when some
-systems had these locking options and some didn't.
-
-We are now at a point where every supported Linux distro has supported
-the locking options on these commands for quite a long time, and are
-going to make their use non-optional. As a first step, this patch uses
-the virFirewallSetLockOverride() function, which is called at the
-beginning of all firewall-related tests, to set all the bools
-controlling whether or not the locking options are used to true. This
-means that all the test cases must be updated to include the proper
-locking option in their commandlines.
-
-The change to make actual execs of the commands unconditionally use
-the locking option will be in an upcoming patch - this one affects
-only the unit tests.
-
-https://bugzilla.redhat.com/1607929
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit e66451f685e29ffe4be5a060ef64b19961ad4bb5)
-
-Conflicts:
-  tests/networkxml2firewalldata/nat-ipv6-masquerade-linux.args:
-     exists only upstream
-
-  tests/virfirewalltest.c:
-     minor merge conflict due to glib conversion upstream.
-
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20210116035151.1066734-3-laine@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virfirewall.c                        |   6 +
- tests/networkxml2firewalldata/base.args       |  34 ++
- .../nat-default-linux.args                    |  19 +
- .../nat-ipv6-linux.args                       |  30 ++
- .../nat-many-ips-linux.args                   |  33 ++
- .../nat-no-dhcp-linux.args                    |  29 ++
- .../nat-tftp-linux.args                       |  21 +
- .../route-default-linux.args                  |  14 +
- tests/nwfilterebiptablestest.c                | 464 +++++++++---------
- .../ah-ipv6-linux.args                        |   9 +
- tests/nwfilterxml2firewalldata/ah-linux.args  |   9 +
- .../all-ipv6-linux.args                       |   9 +
- tests/nwfilterxml2firewalldata/all-linux.args |   9 +
- tests/nwfilterxml2firewalldata/arp-linux.args |   5 +
- .../comment-linux.args                        |  19 +
- .../conntrack-linux.args                      |   7 +
- .../esp-ipv6-linux.args                       |   9 +
- tests/nwfilterxml2firewalldata/esp-linux.args |   9 +
- .../example-1-linux.args                      |  12 +
- .../example-2-linux.args                      |  10 +
- .../hex-data-linux.args                       |  10 +
- .../icmp-direction-linux.args                 |   6 +
- .../icmp-direction2-linux.args                |   6 +
- .../icmp-direction3-linux.args                |   6 +
- .../nwfilterxml2firewalldata/icmp-linux.args  |   3 +
- .../icmpv6-linux.args                         |   4 +
- .../nwfilterxml2firewalldata/igmp-linux.args  |   9 +
- tests/nwfilterxml2firewalldata/ip-linux.args  |   3 +
- .../nwfilterxml2firewalldata/ipset-linux.args |  18 +
- .../ipt-no-macspoof-linux.args                |   2 +
- .../nwfilterxml2firewalldata/ipv6-linux.args  |  15 +
- .../nwfilterxml2firewalldata/iter1-linux.args |   9 +
- .../nwfilterxml2firewalldata/iter2-linux.args | 171 +++++++
- .../nwfilterxml2firewalldata/iter3-linux.args |  15 +
- tests/nwfilterxml2firewalldata/mac-linux.args |   4 +
- .../nwfilterxml2firewalldata/rarp-linux.args  |   6 +
- .../sctp-ipv6-linux.args                      |   9 +
- .../nwfilterxml2firewalldata/sctp-linux.args  |   9 +
- tests/nwfilterxml2firewalldata/stp-linux.args |  11 +
- .../target-linux.args                         |  33 ++
- .../target2-linux.args                        |  12 +
- .../tcp-ipv6-linux.args                       |   9 +
- tests/nwfilterxml2firewalldata/tcp-linux.args |  13 +
- .../udp-ipv6-linux.args                       |   9 +
- tests/nwfilterxml2firewalldata/udp-linux.args |   9 +
- .../udplite-ipv6-linux.args                   |   9 +
- .../udplite-linux.args                        |   9 +
- .../nwfilterxml2firewalldata/vlan-linux.args  |   7 +
- tests/nwfilterxml2firewalltest.c              | 144 +++---
- tests/virfirewalltest.c                       | 112 +++--
- 50 files changed, 1081 insertions(+), 358 deletions(-)
-
-diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
-index ee72b579e4..c2de2bccae 100644
---- a/src/util/virfirewall.c
-+++ b/src/util/virfirewall.c
-@@ -106,6 +106,12 @@ void
- virFirewallSetLockOverride(bool avoid)
- {
-     lockOverride = avoid;
-+    if (avoid) {
-+        /* add the lock option to all commands */
-+        iptablesUseLock = true;
-+        ip6tablesUseLock = true;
-+        ebtablesUseLock = true;
-+    }
- }
- 
- static void
-diff --git a/tests/networkxml2firewalldata/base.args b/tests/networkxml2firewalldata/base.args
-index 0e71bf3a64..056ee12758 100644
---- a/tests/networkxml2firewalldata/base.args
-+++ b/tests/networkxml2firewalldata/base.args
-@@ -1,116 +1,150 @@
- iptables \
-+-w \
- --table filter \
- --list-rules
- iptables \
-+-w \
- --table nat \
- --list-rules
- iptables \
-+-w \
- --table mangle \
- --list-rules
- iptables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_INP
- iptables \
-+-w \
- --table filter \
- --insert INPUT \
- --jump LIBVIRT_INP
- iptables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_OUT
- iptables \
-+-w \
- --table filter \
- --insert OUTPUT \
- --jump LIBVIRT_OUT
- iptables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_FWO
- iptables \
-+-w \
- --table filter \
- --insert FORWARD \
- --jump LIBVIRT_FWO
- iptables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_FWI
- iptables \
-+-w \
- --table filter \
- --insert FORWARD \
- --jump LIBVIRT_FWI
- iptables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_FWX
- iptables \
-+-w \
- --table filter \
- --insert FORWARD \
- --jump LIBVIRT_FWX
- iptables \
-+-w \
- --table nat \
- --new-chain LIBVIRT_PRT
- iptables \
-+-w \
- --table nat \
- --insert POSTROUTING \
- --jump LIBVIRT_PRT
- iptables \
-+-w \
- --table mangle \
- --new-chain LIBVIRT_PRT
- iptables \
-+-w \
- --table mangle \
- --insert POSTROUTING \
- --jump LIBVIRT_PRT
- ip6tables \
-+-w \
- --table filter \
- --list-rules
- ip6tables \
-+-w \
- --table nat \
- --list-rules
- ip6tables \
-+-w \
- --table mangle \
- --list-rules
- ip6tables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_INP
- ip6tables \
-+-w \
- --table filter \
- --insert INPUT \
- --jump LIBVIRT_INP
- ip6tables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_OUT
- ip6tables \
-+-w \
- --table filter \
- --insert OUTPUT \
- --jump LIBVIRT_OUT
- ip6tables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_FWO
- ip6tables \
-+-w \
- --table filter \
- --insert FORWARD \
- --jump LIBVIRT_FWO
- ip6tables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_FWI
- ip6tables \
-+-w \
- --table filter \
- --insert FORWARD \
- --jump LIBVIRT_FWI
- ip6tables \
-+-w \
- --table filter \
- --new-chain LIBVIRT_FWX
- ip6tables \
-+-w \
- --table filter \
- --insert FORWARD \
- --jump LIBVIRT_FWX
- ip6tables \
-+-w \
- --table nat \
- --new-chain LIBVIRT_PRT
- ip6tables \
-+-w \
- --table nat \
- --insert POSTROUTING \
- --jump LIBVIRT_PRT
- ip6tables \
-+-w \
- --table mangle \
- --new-chain LIBVIRT_PRT
- ip6tables \
-+-w \
- --table mangle \
- --insert POSTROUTING \
- --jump LIBVIRT_PRT
-diff --git a/tests/networkxml2firewalldata/nat-default-linux.args b/tests/networkxml2firewalldata/nat-default-linux.args
-index ab18f30bd0..3cfa61333c 100644
---- a/tests/networkxml2firewalldata/nat-default-linux.args
-+++ b/tests/networkxml2firewalldata/nat-default-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -6,6 +7,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -13,6 +15,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -20,6 +23,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -27,6 +31,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -34,6 +39,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -41,6 +47,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -48,6 +55,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -55,28 +63,33 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.122.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.122.0/24 \
-@@ -85,12 +98,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 '!' \
- --destination 192.168.122.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -99,6 +114,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -107,18 +123,21 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- iptables \
-+-w \
- --table mangle \
- --insert LIBVIRT_PRT \
- --out-interface virbr0 \
-diff --git a/tests/networkxml2firewalldata/nat-ipv6-linux.args b/tests/networkxml2firewalldata/nat-ipv6-linux.args
-index 05d9ee33ca..ce295cbc6d 100644
---- a/tests/networkxml2firewalldata/nat-ipv6-linux.args
-+++ b/tests/networkxml2firewalldata/nat-ipv6-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -6,6 +7,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -13,6 +15,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -20,6 +23,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -27,6 +31,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -34,6 +39,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -41,6 +47,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -48,6 +55,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -55,38 +63,45 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -94,6 +109,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -101,6 +117,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -108,6 +125,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -115,6 +133,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -122,6 +141,7 @@ ip6tables \
- --destination-port 547 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -129,12 +149,14 @@ ip6tables \
- --destination-port 546 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.122.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.122.0/24 \
-@@ -143,12 +165,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 '!' \
- --destination 192.168.122.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -157,6 +181,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -165,30 +190,35 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 2001:db8:ca2:2::/64 \
- --in-interface virbr0 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 2001:db8:ca2:2::/64 \
- --out-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table mangle \
- --insert LIBVIRT_PRT \
- --out-interface virbr0 \
-diff --git a/tests/networkxml2firewalldata/nat-many-ips-linux.args b/tests/networkxml2firewalldata/nat-many-ips-linux.args
-index 82e1380f51..ba7f234b82 100644
---- a/tests/networkxml2firewalldata/nat-many-ips-linux.args
-+++ b/tests/networkxml2firewalldata/nat-many-ips-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -6,6 +7,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -13,6 +15,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -20,6 +23,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -27,6 +31,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -34,6 +39,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -41,6 +47,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -48,6 +55,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -55,28 +63,33 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.122.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.122.0/24 \
-@@ -85,12 +98,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 '!' \
- --destination 192.168.122.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -99,6 +114,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -107,24 +123,28 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.128.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.128.0/24 \
-@@ -133,12 +153,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.128.0/24 '!' \
- --destination 192.168.128.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.128.0/24 \
-@@ -147,6 +169,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.128.0/24 \
-@@ -155,24 +178,28 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.128.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.128.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.150.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.150.0/24 \
-@@ -181,12 +208,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.150.0/24 '!' \
- --destination 192.168.150.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.150.0/24 \
-@@ -195,6 +224,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.150.0/24 \
-@@ -203,18 +233,21 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.150.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.150.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- iptables \
-+-w \
- --table mangle \
- --insert LIBVIRT_PRT \
- --out-interface virbr0 \
-diff --git a/tests/networkxml2firewalldata/nat-no-dhcp-linux.args b/tests/networkxml2firewalldata/nat-no-dhcp-linux.args
-index 8954cc5473..1e5aa05231 100644
---- a/tests/networkxml2firewalldata/nat-no-dhcp-linux.args
-+++ b/tests/networkxml2firewalldata/nat-no-dhcp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -6,6 +7,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -13,6 +15,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -20,6 +23,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -27,6 +31,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -34,6 +39,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -41,6 +47,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -48,6 +55,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -55,38 +63,45 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -94,6 +109,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -101,6 +117,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -108,6 +125,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -115,6 +133,7 @@ ip6tables \
- --destination-port 53 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -122,6 +141,7 @@ ip6tables \
- --destination-port 547 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -129,12 +149,14 @@ ip6tables \
- --destination-port 546 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.122.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.122.0/24 \
-@@ -143,12 +165,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 '!' \
- --destination 192.168.122.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -157,6 +181,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -165,24 +190,28 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 2001:db8:ca2:2::/64 \
- --in-interface virbr0 \
- --jump ACCEPT
- ip6tables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 2001:db8:ca2:2::/64 \
-diff --git a/tests/networkxml2firewalldata/nat-tftp-linux.args b/tests/networkxml2firewalldata/nat-tftp-linux.args
-index 88e9929b62..565fff737c 100644
---- a/tests/networkxml2firewalldata/nat-tftp-linux.args
-+++ b/tests/networkxml2firewalldata/nat-tftp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -6,6 +7,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -13,6 +15,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -20,6 +23,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -27,6 +31,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -34,6 +39,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -41,6 +47,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -48,6 +55,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -55,6 +63,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -62,6 +71,7 @@ iptables \
- --destination-port 69 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -69,28 +79,33 @@ iptables \
- --destination-port 69 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.122.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.122.0/24 \
-@@ -99,12 +114,14 @@ iptables \
- --ctstate ESTABLISHED,RELATED \
- --jump ACCEPT
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 '!' \
- --destination 192.168.122.0/24 \
- --jump MASQUERADE
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -113,6 +130,7 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
-@@ -121,18 +139,21 @@ iptables \
- --jump MASQUERADE \
- --to-ports 1024-65535
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 255.255.255.255/32 \
- --jump RETURN
- iptables \
-+-w \
- --table nat \
- --insert LIBVIRT_PRT \
- --source 192.168.122.0/24 \
- --destination 224.0.0.0/24 \
- --jump RETURN
- iptables \
-+-w \
- --table mangle \
- --insert LIBVIRT_PRT \
- --out-interface virbr0 \
-diff --git a/tests/networkxml2firewalldata/route-default-linux.args b/tests/networkxml2firewalldata/route-default-linux.args
-index c427d9602d..a7b969c077 100644
---- a/tests/networkxml2firewalldata/route-default-linux.args
-+++ b/tests/networkxml2firewalldata/route-default-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -6,6 +7,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -13,6 +15,7 @@ iptables \
- --destination-port 67 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -20,6 +23,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -27,6 +31,7 @@ iptables \
- --destination-port 68 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -34,6 +39,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_INP \
- --in-interface virbr0 \
-@@ -41,6 +47,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -48,6 +55,7 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_OUT \
- --out-interface virbr0 \
-@@ -55,34 +63,40 @@ iptables \
- --destination-port 53 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --in-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --out-interface virbr0 \
- --jump REJECT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWX \
- --in-interface virbr0 \
- --out-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWO \
- --source 192.168.122.0/24 \
- --in-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table filter \
- --insert LIBVIRT_FWI \
- --destination 192.168.122.0/24 \
- --out-interface virbr0 \
- --jump ACCEPT
- iptables \
-+-w \
- --table mangle \
- --insert LIBVIRT_PRT \
- --out-interface virbr0 \
-diff --git a/tests/nwfilterebiptablestest.c b/tests/nwfilterebiptablestest.c
-index 3e6c335d4e..e70f0e2400 100644
---- a/tests/nwfilterebiptablestest.c
-+++ b/tests/nwfilterebiptablestest.c
-@@ -36,34 +36,34 @@
- 
- 
- #define VIR_NWFILTER_NEW_RULES_TEARDOWN \
--    "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n" \
--    "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n" \
--    "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n" \
--    "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n" \
--    "iptables -F FP-vnet0\n" \
--    "iptables -X FP-vnet0\n" \
--    "iptables -F FJ-vnet0\n" \
--    "iptables -X FJ-vnet0\n" \
--    "iptables -F HJ-vnet0\n" \
--    "iptables -X HJ-vnet0\n" \
--    "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n" \
--    "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n" \
--    "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n" \
--    "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n" \
--    "ip6tables -F FP-vnet0\n" \
--    "ip6tables -X FP-vnet0\n" \
--    "ip6tables -F FJ-vnet0\n" \
--    "ip6tables -X FJ-vnet0\n" \
--    "ip6tables -F HJ-vnet0\n" \
--    "ip6tables -X HJ-vnet0\n" \
--    "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-J-vnet0\n" \
--    "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-P-vnet0\n" \
--    "ebtables -t nat -L libvirt-J-vnet0\n" \
--    "ebtables -t nat -L libvirt-P-vnet0\n" \
--    "ebtables -t nat -F libvirt-J-vnet0\n" \
--    "ebtables -t nat -X libvirt-J-vnet0\n" \
--    "ebtables -t nat -F libvirt-P-vnet0\n" \
--    "ebtables -t nat -X libvirt-P-vnet0\n"
-+    "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n" \
-+    "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n" \
-+    "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n" \
-+    "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n" \
-+    "iptables -w -F FP-vnet0\n" \
-+    "iptables -w -X FP-vnet0\n" \
-+    "iptables -w -F FJ-vnet0\n" \
-+    "iptables -w -X FJ-vnet0\n" \
-+    "iptables -w -F HJ-vnet0\n" \
-+    "iptables -w -X HJ-vnet0\n" \
-+    "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n" \
-+    "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n" \
-+    "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n" \
-+    "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n" \
-+    "ip6tables -w -F FP-vnet0\n" \
-+    "ip6tables -w -X FP-vnet0\n" \
-+    "ip6tables -w -F FJ-vnet0\n" \
-+    "ip6tables -w -X FJ-vnet0\n" \
-+    "ip6tables -w -F HJ-vnet0\n" \
-+    "ip6tables -w -X HJ-vnet0\n" \
-+    "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-J-vnet0\n" \
-+    "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-P-vnet0\n" \
-+    "ebtables --concurrent -t nat -L libvirt-J-vnet0\n" \
-+    "ebtables --concurrent -t nat -L libvirt-P-vnet0\n" \
-+    "ebtables --concurrent -t nat -F libvirt-J-vnet0\n" \
-+    "ebtables --concurrent -t nat -X libvirt-J-vnet0\n" \
-+    "ebtables --concurrent -t nat -F libvirt-P-vnet0\n" \
-+    "ebtables --concurrent -t nat -X libvirt-P-vnet0\n"
- 
- static int
- testNWFilterEBIPTablesAllTeardown(const void *opaque G_GNUC_UNUSED)
-@@ -71,36 +71,36 @@ testNWFilterEBIPTablesAllTeardown(const void *opaque G_GNUC_UNUSED)
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     const char *expected =
-         VIR_NWFILTER_NEW_RULES_TEARDOWN
--        "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "iptables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "iptables -F FO-vnet0\n"
--        "iptables -X FO-vnet0\n"
--        "iptables -F FI-vnet0\n"
--        "iptables -X FI-vnet0\n"
--        "iptables -F HI-vnet0\n"
--        "iptables -X HI-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "ip6tables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "ip6tables -F FO-vnet0\n"
--        "ip6tables -X FO-vnet0\n"
--        "ip6tables -F FI-vnet0\n"
--        "ip6tables -X FI-vnet0\n"
--        "ip6tables -F HI-vnet0\n"
--        "ip6tables -X HI-vnet0\n"
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-I-vnet0\n"
--        "ebtables -t nat -L libvirt-O-vnet0\n"
--        "ebtables -t nat -F libvirt-I-vnet0\n"
--        "ebtables -t nat -X libvirt-I-vnet0\n"
--        "ebtables -t nat -F libvirt-O-vnet0\n"
--        "ebtables -t nat -X libvirt-O-vnet0\n";
-+        "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "iptables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "iptables -w -F FO-vnet0\n"
-+        "iptables -w -X FO-vnet0\n"
-+        "iptables -w -F FI-vnet0\n"
-+        "iptables -w -X FI-vnet0\n"
-+        "iptables -w -F HI-vnet0\n"
-+        "iptables -w -X HI-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "ip6tables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "ip6tables -w -F FO-vnet0\n"
-+        "ip6tables -w -X FO-vnet0\n"
-+        "ip6tables -w -F FI-vnet0\n"
-+        "ip6tables -w -X FI-vnet0\n"
-+        "ip6tables -w -F HI-vnet0\n"
-+        "ip6tables -w -X HI-vnet0\n"
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-O-vnet0\n";
-     char *actual = NULL;
-     int ret = -1;
- 
-@@ -131,44 +131,44 @@ testNWFilterEBIPTablesTearOldRules(const void *opaque G_GNUC_UNUSED)
- {
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     const char *expected =
--        "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "iptables -F FO-vnet0\n"
--        "iptables -X FO-vnet0\n"
--        "iptables -F FI-vnet0\n"
--        "iptables -X FI-vnet0\n"
--        "iptables -F HI-vnet0\n"
--        "iptables -X HI-vnet0\n"
--        "iptables -E FP-vnet0 FO-vnet0\n"
--        "iptables -E FJ-vnet0 FI-vnet0\n"
--        "iptables -E HJ-vnet0 HI-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "ip6tables -F FO-vnet0\n"
--        "ip6tables -X FO-vnet0\n"
--        "ip6tables -F FI-vnet0\n"
--        "ip6tables -X FI-vnet0\n"
--        "ip6tables -F HI-vnet0\n"
--        "ip6tables -X HI-vnet0\n"
--        "ip6tables -E FP-vnet0 FO-vnet0\n"
--        "ip6tables -E FJ-vnet0 FI-vnet0\n"
--        "ip6tables -E HJ-vnet0 HI-vnet0\n"
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-I-vnet0\n"
--        "ebtables -t nat -L libvirt-O-vnet0\n"
--        "ebtables -t nat -F libvirt-I-vnet0\n"
--        "ebtables -t nat -X libvirt-I-vnet0\n"
--        "ebtables -t nat -F libvirt-O-vnet0\n"
--        "ebtables -t nat -X libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-J-vnet0\n"
--        "ebtables -t nat -L libvirt-P-vnet0\n"
--        "ebtables -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n"
--        "ebtables -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
-+        "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "iptables -w -F FO-vnet0\n"
-+        "iptables -w -X FO-vnet0\n"
-+        "iptables -w -F FI-vnet0\n"
-+        "iptables -w -X FI-vnet0\n"
-+        "iptables -w -F HI-vnet0\n"
-+        "iptables -w -X HI-vnet0\n"
-+        "iptables -w -E FP-vnet0 FO-vnet0\n"
-+        "iptables -w -E FJ-vnet0 FI-vnet0\n"
-+        "iptables -w -E HJ-vnet0 HI-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "ip6tables -w -F FO-vnet0\n"
-+        "ip6tables -w -X FO-vnet0\n"
-+        "ip6tables -w -F FI-vnet0\n"
-+        "ip6tables -w -X FI-vnet0\n"
-+        "ip6tables -w -F HI-vnet0\n"
-+        "ip6tables -w -X HI-vnet0\n"
-+        "ip6tables -w -E FP-vnet0 FO-vnet0\n"
-+        "ip6tables -w -E FJ-vnet0 FI-vnet0\n"
-+        "ip6tables -w -E HJ-vnet0 HI-vnet0\n"
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
-     char *actual = NULL;
-     int ret = -1;
- 
-@@ -199,22 +199,22 @@ testNWFilterEBIPTablesRemoveBasicRules(const void *opaque G_GNUC_UNUSED)
- {
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     const char *expected =
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-I-vnet0\n"
--        "ebtables -t nat -L libvirt-O-vnet0\n"
--        "ebtables -t nat -F libvirt-I-vnet0\n"
--        "ebtables -t nat -X libvirt-I-vnet0\n"
--        "ebtables -t nat -F libvirt-O-vnet0\n"
--        "ebtables -t nat -X libvirt-O-vnet0\n"
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
--        "ebtables -t nat -L libvirt-J-vnet0\n"
--        "ebtables -t nat -L libvirt-P-vnet0\n"
--        "ebtables -t nat -F libvirt-J-vnet0\n"
--        "ebtables -t nat -X libvirt-J-vnet0\n"
--        "ebtables -t nat -F libvirt-P-vnet0\n"
--        "ebtables -t nat -X libvirt-P-vnet0\n";
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-P-vnet0\n";
-     char *actual = NULL;
-     int ret = -1;
- 
-@@ -277,43 +277,43 @@ testNWFilterEBIPTablesApplyBasicRules(const void *opaque G_GNUC_UNUSED)
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     const char *expected =
-         VIR_NWFILTER_NEW_RULES_TEARDOWN
--        "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "iptables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "iptables -F FO-vnet0\n"
--        "iptables -X FO-vnet0\n"
--        "iptables -F FI-vnet0\n"
--        "iptables -X FI-vnet0\n"
--        "iptables -F HI-vnet0\n"
--        "iptables -X HI-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "ip6tables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "ip6tables -F FO-vnet0\n"
--        "ip6tables -X FO-vnet0\n"
--        "ip6tables -F FI-vnet0\n"
--        "ip6tables -X FI-vnet0\n"
--        "ip6tables -F HI-vnet0\n"
--        "ip6tables -X HI-vnet0\n"
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-I-vnet0\n"
--        "ebtables -t nat -L libvirt-O-vnet0\n"
--        "ebtables -t nat -F libvirt-I-vnet0\n"
--        "ebtables -t nat -X libvirt-I-vnet0\n"
--        "ebtables -t nat -F libvirt-O-vnet0\n"
--        "ebtables -t nat -X libvirt-O-vnet0\n"
--        "ebtables -t nat -N libvirt-J-vnet0\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -s '!' 10:20:30:40:50:60 -j DROP\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -p IPv4 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -p ARP -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -j DROP\n"
--        "ebtables -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
--        "ebtables -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n";
-+        "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "iptables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "iptables -w -F FO-vnet0\n"
-+        "iptables -w -X FO-vnet0\n"
-+        "iptables -w -F FI-vnet0\n"
-+        "iptables -w -X FI-vnet0\n"
-+        "iptables -w -F HI-vnet0\n"
-+        "iptables -w -X HI-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "ip6tables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "ip6tables -w -F FO-vnet0\n"
-+        "ip6tables -w -X FO-vnet0\n"
-+        "ip6tables -w -F FI-vnet0\n"
-+        "ip6tables -w -X FI-vnet0\n"
-+        "ip6tables -w -F HI-vnet0\n"
-+        "ip6tables -w -X HI-vnet0\n"
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -N libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -s '!' 10:20:30:40:50:60 -j DROP\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -p IPv4 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -p ARP -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -j DROP\n"
-+        "ebtables --concurrent -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n";
-     char *actual = NULL;
-     int ret = -1;
-     virMacAddr mac = { .addr = { 0x10, 0x20, 0x30, 0x40, 0x50, 0x60 } };
-@@ -346,51 +346,51 @@ testNWFilterEBIPTablesApplyDHCPOnlyRules(const void *opaque G_GNUC_UNUSED)
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     const char *expected =
-         VIR_NWFILTER_NEW_RULES_TEARDOWN
--        "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "iptables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "iptables -F FO-vnet0\n"
--        "iptables -X FO-vnet0\n"
--        "iptables -F FI-vnet0\n"
--        "iptables -X FI-vnet0\n"
--        "iptables -F HI-vnet0\n"
--        "iptables -X HI-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "ip6tables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "ip6tables -F FO-vnet0\n"
--        "ip6tables -X FO-vnet0\n"
--        "ip6tables -F FI-vnet0\n"
--        "ip6tables -X FI-vnet0\n"
--        "ip6tables -F HI-vnet0\n"
--        "ip6tables -X HI-vnet0\n"
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-I-vnet0\n"
--        "ebtables -t nat -L libvirt-O-vnet0\n"
--        "ebtables -t nat -F libvirt-I-vnet0\n"
--        "ebtables -t nat -X libvirt-I-vnet0\n"
--        "ebtables -t nat -F libvirt-O-vnet0\n"
--        "ebtables -t nat -X libvirt-O-vnet0\n"
--        "ebtables -t nat -N libvirt-J-vnet0\n"
--        "ebtables -t nat -N libvirt-P-vnet0\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -s 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-sport 68 --ip-dport 67 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -j DROP\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -d 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-src 192.168.122.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-protocol udp --ip-src 192.168.122.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -d 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-src 10.0.0.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-protocol udp --ip-src 10.0.0.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -d 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-src 10.0.0.2 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-protocol udp --ip-src 10.0.0.2 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -j DROP\n"
--        "ebtables -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
--        "ebtables -t nat -A POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
--        "ebtables -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n"
--        "ebtables -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
-+        "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "iptables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "iptables -w -F FO-vnet0\n"
-+        "iptables -w -X FO-vnet0\n"
-+        "iptables -w -F FI-vnet0\n"
-+        "iptables -w -X FI-vnet0\n"
-+        "iptables -w -F HI-vnet0\n"
-+        "iptables -w -X HI-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "ip6tables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "ip6tables -w -F FO-vnet0\n"
-+        "ip6tables -w -X FO-vnet0\n"
-+        "ip6tables -w -F FI-vnet0\n"
-+        "ip6tables -w -X FI-vnet0\n"
-+        "ip6tables -w -F HI-vnet0\n"
-+        "ip6tables -w -X HI-vnet0\n"
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -N libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -N libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -s 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-sport 68 --ip-dport 67 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -j DROP\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -d 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-src 192.168.122.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-protocol udp --ip-src 192.168.122.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -d 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-src 10.0.0.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-protocol udp --ip-src 10.0.0.1 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -d 10:20:30:40:50:60 -p ipv4 --ip-protocol udp --ip-src 10.0.0.2 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-protocol udp --ip-src 10.0.0.2 --ip-sport 67 --ip-dport 68 -j ACCEPT\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -j DROP\n"
-+        "ebtables --concurrent -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -A POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
-     char *actual = NULL;
-     int ret = -1;
-     virMacAddr mac = { .addr = { 0x10, 0x20, 0x30, 0x40, 0x50, 0x60 } };
-@@ -434,44 +434,44 @@ testNWFilterEBIPTablesApplyDropAllRules(const void *opaque G_GNUC_UNUSED)
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     const char *expected =
-         VIR_NWFILTER_NEW_RULES_TEARDOWN
--        "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "iptables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "iptables -F FO-vnet0\n"
--        "iptables -X FO-vnet0\n"
--        "iptables -F FI-vnet0\n"
--        "iptables -X FI-vnet0\n"
--        "iptables -F HI-vnet0\n"
--        "iptables -X HI-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
--        "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
--        "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
--        "ip6tables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--        "ip6tables -F FO-vnet0\n"
--        "ip6tables -X FO-vnet0\n"
--        "ip6tables -F FI-vnet0\n"
--        "ip6tables -X FI-vnet0\n"
--        "ip6tables -F HI-vnet0\n"
--        "ip6tables -X HI-vnet0\n"
--        "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
--        "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
--        "ebtables -t nat -L libvirt-I-vnet0\n"
--        "ebtables -t nat -L libvirt-O-vnet0\n"
--        "ebtables -t nat -F libvirt-I-vnet0\n"
--        "ebtables -t nat -X libvirt-I-vnet0\n"
--        "ebtables -t nat -F libvirt-O-vnet0\n"
--        "ebtables -t nat -X libvirt-O-vnet0\n"
--        "ebtables -t nat -N libvirt-J-vnet0\n"
--        "ebtables -t nat -N libvirt-P-vnet0\n"
--        "ebtables -t nat -A libvirt-J-vnet0 -j DROP\n"
--        "ebtables -t nat -A libvirt-P-vnet0 -j DROP\n"
--        "ebtables -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
--        "ebtables -t nat -A POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
--        "ebtables -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n"
--        "ebtables -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
-+        "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "iptables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "iptables -w -F FO-vnet0\n"
-+        "iptables -w -X FO-vnet0\n"
-+        "iptables -w -F FI-vnet0\n"
-+        "iptables -w -X FI-vnet0\n"
-+        "iptables -w -F HI-vnet0\n"
-+        "iptables -w -X HI-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FO-vnet0\n"
-+        "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FI-vnet0\n"
-+        "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HI-vnet0\n"
-+        "ip6tables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+        "ip6tables -w -F FO-vnet0\n"
-+        "ip6tables -w -X FO-vnet0\n"
-+        "ip6tables -w -F FI-vnet0\n"
-+        "ip6tables -w -X FI-vnet0\n"
-+        "ip6tables -w -F HI-vnet0\n"
-+        "ip6tables -w -X HI-vnet0\n"
-+        "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -L libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -F libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -X libvirt-O-vnet0\n"
-+        "ebtables --concurrent -t nat -N libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -N libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -A libvirt-J-vnet0 -j DROP\n"
-+        "ebtables --concurrent -t nat -A libvirt-P-vnet0 -j DROP\n"
-+        "ebtables --concurrent -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
-+        "ebtables --concurrent -t nat -A POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-J-vnet0 libvirt-I-vnet0\n"
-+        "ebtables --concurrent -t nat -E libvirt-P-vnet0 libvirt-O-vnet0\n";
-     char *actual = NULL;
-     int ret = -1;
- 
-diff --git a/tests/nwfilterxml2firewalldata/ah-ipv6-linux.args b/tests/nwfilterxml2firewalldata/ah-ipv6-linux.args
-index 35c9de38b8..77f0532fd2 100644
---- a/tests/nwfilterxml2firewalldata/ah-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/ah-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- -m mac \
-@@ -11,6 +12,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- --destination f:e:d::c:b:a/127 \
-@@ -21,6 +23,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- -m mac \
-@@ -33,6 +36,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- --destination a:b:c::/128 \
-@@ -42,6 +46,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- -m mac \
-@@ -53,6 +58,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- --destination a:b:c::/128 \
-@@ -62,6 +68,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- --destination ::10.1.2.3/128 \
-@@ -71,6 +78,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- -m mac \
-@@ -82,6 +90,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/ah-linux.args b/tests/nwfilterxml2firewalldata/ah-linux.args
-index 269636754e..c7e5c1eb17 100644
---- a/tests/nwfilterxml2firewalldata/ah-linux.args
-+++ b/tests/nwfilterxml2firewalldata/ah-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- --destination 10.1.2.3/22 \
-@@ -39,6 +43,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- -m mac \
-@@ -50,6 +55,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- --destination 10.1.2.3/22 \
-@@ -59,6 +65,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- --destination 10.1.2.3/22 \
-@@ -68,6 +75,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- -m mac \
-@@ -79,6 +87,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- --destination 10.1.2.3/22 \
-diff --git a/tests/nwfilterxml2firewalldata/all-ipv6-linux.args b/tests/nwfilterxml2firewalldata/all-ipv6-linux.args
-index 2f84c1bfea..d86908663c 100644
---- a/tests/nwfilterxml2firewalldata/all-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/all-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m mac \
-@@ -11,6 +12,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p all \
- --destination f:e:d::c:b:a/127 \
-@@ -21,6 +23,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m mac \
-@@ -33,6 +36,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination a:b:c::/128 \
-@@ -42,6 +46,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -53,6 +58,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination a:b:c::/128 \
-@@ -62,6 +68,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination ::10.1.2.3/128 \
-@@ -71,6 +78,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -82,6 +90,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/all-linux.args b/tests/nwfilterxml2firewalldata/all-linux.args
-index 7ea769f74f..187d9ed9ca 100644
---- a/tests/nwfilterxml2firewalldata/all-linux.args
-+++ b/tests/nwfilterxml2firewalldata/all-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -39,6 +43,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -50,6 +55,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -59,6 +65,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -68,6 +75,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -79,6 +87,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-diff --git a/tests/nwfilterxml2firewalldata/arp-linux.args b/tests/nwfilterxml2firewalldata/arp-linux.args
-index b1360175c4..ef9f44d7bb 100644
---- a/tests/nwfilterxml2firewalldata/arp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/arp-linux.args
-@@ -1,4 +1,5 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -11,6 +12,7 @@ ebtables \
- --arp-mac-dst 0a:0b:0c:0d:0e:0f \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -20,6 +22,7 @@ ebtables \
- --arp-ptype 0xff \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -29,6 +32,7 @@ ebtables \
- --arp-ptype 0x100 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -38,6 +42,7 @@ ebtables \
- --arp-ptype 0xffff \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p 0x806 \
-diff --git a/tests/nwfilterxml2firewalldata/comment-linux.args b/tests/nwfilterxml2firewalldata/comment-linux.args
-index 462b2e2177..6233ccf9f5 100644
---- a/tests/nwfilterxml2firewalldata/comment-linux.args
-+++ b/tests/nwfilterxml2firewalldata/comment-linux.args
-@@ -1,9 +1,11 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p 0x1234 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -17,6 +19,7 @@ ebtables \
- --ip-tos 0x32 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:fe \
-@@ -29,6 +32,7 @@ ebtables \
- --ip6-destination-port 13107:65535 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -41,6 +45,7 @@ ebtables \
- --arp-mac-dst 0a:0b:0c:0d:0e:0f \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- -m mac \
-@@ -56,6 +61,7 @@ iptables \
- --comment 'udp rule' \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --source 10.1.2.3/32 \
-@@ -69,6 +75,7 @@ iptables \
- --comment 'udp rule' \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- -m mac \
-@@ -84,6 +91,7 @@ iptables \
- --comment 'udp rule' \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --destination a:b:c::/128 \
-@@ -97,6 +105,7 @@ ip6tables \
- --comment 'tcp/ipv6 rule' \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -m mac \
-@@ -112,6 +121,7 @@ ip6tables \
- --comment 'tcp/ipv6 rule' \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --destination a:b:c::/128 \
-@@ -125,6 +135,7 @@ ip6tables \
- --comment 'tcp/ipv6 rule' \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- -m state \
-@@ -133,6 +144,7 @@ ip6tables \
- --comment '`ls`;${COLUMNS};$(ls);"test";&'\''3   spaces'\''' \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- -m state \
-@@ -141,6 +153,7 @@ ip6tables \
- --comment '`ls`;${COLUMNS};$(ls);"test";&'\''3   spaces'\''' \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- -m state \
-@@ -149,6 +162,7 @@ ip6tables \
- --comment '`ls`;${COLUMNS};$(ls);"test";&'\''3   spaces'\''' \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- -m state \
-@@ -157,6 +171,7 @@ ip6tables \
- --comment 'comment with lone '\'', `, ", `, \, $x, and two  spaces' \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- -m state \
-@@ -165,6 +180,7 @@ ip6tables \
- --comment 'comment with lone '\'', `, ", `, \, $x, and two  spaces' \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- -m state \
-@@ -173,6 +189,7 @@ ip6tables \
- --comment 'comment with lone '\'', `, ", `, \, $x, and two  spaces' \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p ah \
- -m state \
-@@ -182,6 +199,7 @@ ip6tables \
- -f ${tmp}' \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p ah \
- -m state \
-@@ -191,6 +209,7 @@ ip6tables \
- -f ${tmp}' \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p ah \
- -m state \
-diff --git a/tests/nwfilterxml2firewalldata/conntrack-linux.args b/tests/nwfilterxml2firewalldata/conntrack-linux.args
-index c653049e8e..78495598a1 100644
---- a/tests/nwfilterxml2firewalldata/conntrack-linux.args
-+++ b/tests/nwfilterxml2firewalldata/conntrack-linux.args
-@@ -1,40 +1,47 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- -m connlimit \
- --connlimit-above 1 \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- -m connlimit \
- --connlimit-above 1 \
- -j DROP
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- -m connlimit \
- --connlimit-above 2 \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- -m connlimit \
- --connlimit-above 2 \
- -j DROP
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
-diff --git a/tests/nwfilterxml2firewalldata/esp-ipv6-linux.args b/tests/nwfilterxml2firewalldata/esp-ipv6-linux.args
-index 51cf74815b..22dad0b412 100644
---- a/tests/nwfilterxml2firewalldata/esp-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/esp-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p esp \
- -m mac \
-@@ -11,6 +12,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p esp \
- --destination f:e:d::c:b:a/127 \
-@@ -21,6 +23,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p esp \
- -m mac \
-@@ -33,6 +36,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p esp \
- --destination a:b:c::/128 \
-@@ -42,6 +46,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p esp \
- -m mac \
-@@ -53,6 +58,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p esp \
- --destination a:b:c::/128 \
-@@ -62,6 +68,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p esp \
- --destination ::10.1.2.3/128 \
-@@ -71,6 +78,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p esp \
- -m mac \
-@@ -82,6 +90,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p esp \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/esp-linux.args b/tests/nwfilterxml2firewalldata/esp-linux.args
-index 17acb8133c..7cd70afaa1 100644
---- a/tests/nwfilterxml2firewalldata/esp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/esp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p esp \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p esp \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p esp \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p esp \
- --destination 10.1.2.3/22 \
-@@ -39,6 +43,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p esp \
- -m mac \
-@@ -50,6 +55,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p esp \
- --destination 10.1.2.3/22 \
-@@ -59,6 +65,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p esp \
- --destination 10.1.2.3/22 \
-@@ -68,6 +75,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p esp \
- -m mac \
-@@ -79,6 +87,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p esp \
- --destination 10.1.2.3/22 \
-diff --git a/tests/nwfilterxml2firewalldata/example-1-linux.args b/tests/nwfilterxml2firewalldata/example-1-linux.args
-index c5549f8dd6..1cc3746d40 100644
---- a/tests/nwfilterxml2firewalldata/example-1-linux.args
-+++ b/tests/nwfilterxml2firewalldata/example-1-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --sport 22 \
-@@ -6,6 +7,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --dport 22 \
-@@ -13,6 +15,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --sport 22 \
-@@ -20,50 +23,59 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- -m state \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- -m state \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- -m state \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -j DROP
-diff --git a/tests/nwfilterxml2firewalldata/example-2-linux.args b/tests/nwfilterxml2firewalldata/example-2-linux.args
-index 2db58f1e0f..87462ad954 100644
---- a/tests/nwfilterxml2firewalldata/example-2-linux.args
-+++ b/tests/nwfilterxml2firewalldata/example-2-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
-@@ -7,6 +8,7 @@ iptables \
- --comment 'out: existing and related (ftp) connections' \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
-@@ -15,6 +17,7 @@ iptables \
- --comment 'out: existing and related (ftp) connections' \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
-@@ -23,6 +26,7 @@ iptables \
- --comment 'in: existing connections' \
- -j ACCEPT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --dport 21:22 \
-@@ -32,6 +36,7 @@ iptables \
- --comment 'in: ftp and ssh' \
- -j ACCEPT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- -m state \
-@@ -40,6 +45,7 @@ iptables \
- --comment 'in: icmp' \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --dport 53 \
-@@ -49,6 +55,7 @@ iptables \
- --comment 'out: DNS lookups' \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --dport 53 \
-@@ -58,18 +65,21 @@ iptables \
- --comment 'out: DNS lookups' \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m comment \
- --comment 'inout: drop all non-accepted traffic' \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m comment \
- --comment 'inout: drop all non-accepted traffic' \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m comment \
-diff --git a/tests/nwfilterxml2firewalldata/hex-data-linux.args b/tests/nwfilterxml2firewalldata/hex-data-linux.args
-index f1a1f588f2..3c04e1c23d 100644
---- a/tests/nwfilterxml2firewalldata/hex-data-linux.args
-+++ b/tests/nwfilterxml2firewalldata/hex-data-linux.args
-@@ -1,9 +1,11 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p 0x1234 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -17,6 +19,7 @@ ebtables \
- --ip-tos 0x32 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:fe \
-@@ -29,6 +32,7 @@ ebtables \
- --ip6-destination-port 13107:65535 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -41,6 +45,7 @@ ebtables \
- --arp-mac-dst 0a:0b:0c:0d:0e:0f \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- -m mac \
-@@ -54,6 +59,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --source 10.1.2.3/32 \
-@@ -65,6 +71,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- -m mac \
-@@ -78,6 +85,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --destination a:b:c::/128 \
-@@ -89,6 +97,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -m mac \
-@@ -102,6 +111,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --destination a:b:c::/128 \
-diff --git a/tests/nwfilterxml2firewalldata/icmp-direction-linux.args b/tests/nwfilterxml2firewalldata/icmp-direction-linux.args
-index 9f481fa831..7548aaeba5 100644
---- a/tests/nwfilterxml2firewalldata/icmp-direction-linux.args
-+++ b/tests/nwfilterxml2firewalldata/icmp-direction-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- --icmp-type 0 \
-@@ -6,6 +7,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- --icmp-type 8 \
-@@ -13,6 +15,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- --icmp-type 8 \
-@@ -20,14 +23,17 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- -j DROP
-diff --git a/tests/nwfilterxml2firewalldata/icmp-direction2-linux.args b/tests/nwfilterxml2firewalldata/icmp-direction2-linux.args
-index 1faa3d880a..026702caee 100644
---- a/tests/nwfilterxml2firewalldata/icmp-direction2-linux.args
-+++ b/tests/nwfilterxml2firewalldata/icmp-direction2-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- --icmp-type 8 \
-@@ -6,6 +7,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- --icmp-type 0 \
-@@ -13,6 +15,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- --icmp-type 0 \
-@@ -20,14 +23,17 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- -j DROP
-diff --git a/tests/nwfilterxml2firewalldata/icmp-direction3-linux.args b/tests/nwfilterxml2firewalldata/icmp-direction3-linux.args
-index 6cc8e132d9..6ee6a4f84a 100644
---- a/tests/nwfilterxml2firewalldata/icmp-direction3-linux.args
-+++ b/tests/nwfilterxml2firewalldata/icmp-direction3-linux.args
-@@ -1,30 +1,36 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- -m state \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- -m state \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- -m state \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -j DROP
-diff --git a/tests/nwfilterxml2firewalldata/icmp-linux.args b/tests/nwfilterxml2firewalldata/icmp-linux.args
-index d808f0ea60..d688e29213 100644
---- a/tests/nwfilterxml2firewalldata/icmp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/icmp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p icmp \
- -m mac \
-@@ -11,6 +12,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p icmp \
- -m mac \
-@@ -23,6 +25,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p icmp \
- -m mac \
-diff --git a/tests/nwfilterxml2firewalldata/icmpv6-linux.args b/tests/nwfilterxml2firewalldata/icmpv6-linux.args
-index 92190eb311..6e2110fb81 100644
---- a/tests/nwfilterxml2firewalldata/icmpv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/icmpv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p icmpv6 \
- -m mac \
-@@ -12,6 +13,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p icmpv6 \
- -m mac \
-@@ -25,6 +27,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p icmpv6 \
- -m mac \
-@@ -37,6 +40,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p icmpv6 \
- -m mac \
-diff --git a/tests/nwfilterxml2firewalldata/igmp-linux.args b/tests/nwfilterxml2firewalldata/igmp-linux.args
-index 727463a62d..b954b0ae99 100644
---- a/tests/nwfilterxml2firewalldata/igmp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/igmp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p igmp \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p igmp \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p igmp \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p igmp \
- --destination 10.1.2.3/22 \
-@@ -39,6 +43,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p igmp \
- -m mac \
-@@ -50,6 +55,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p igmp \
- --destination 10.1.2.3/22 \
-@@ -59,6 +65,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p igmp \
- --destination 10.1.2.3/22 \
-@@ -68,6 +75,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p igmp \
- -m mac \
-@@ -79,6 +87,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p igmp \
- --destination 10.1.2.3/22 \
-diff --git a/tests/nwfilterxml2firewalldata/ip-linux.args b/tests/nwfilterxml2firewalldata/ip-linux.args
-index 399a47491e..8e64839678 100644
---- a/tests/nwfilterxml2firewalldata/ip-linux.args
-+++ b/tests/nwfilterxml2firewalldata/ip-linux.args
-@@ -1,4 +1,5 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -11,6 +12,7 @@ ebtables \
- --ip-destination-port 100:101 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv4 \
-@@ -20,6 +22,7 @@ ebtables \
- --ip-tos 0x3f \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv4 \
-diff --git a/tests/nwfilterxml2firewalldata/ipset-linux.args b/tests/nwfilterxml2firewalldata/ipset-linux.args
-index 0fe0739962..5cdb151354 100644
---- a/tests/nwfilterxml2firewalldata/ipset-linux.args
-+++ b/tests/nwfilterxml2firewalldata/ipset-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
-@@ -7,6 +8,7 @@ iptables \
- --match-set tck_test src,dst \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
-@@ -15,6 +17,7 @@ iptables \
- --match-set tck_test dst,src \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
-@@ -23,6 +26,7 @@ iptables \
- --match-set tck_test src,dst \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m set \
-@@ -31,6 +35,7 @@ iptables \
- --comment in+NONE \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m set \
-@@ -39,6 +44,7 @@ iptables \
- --comment out+NONE \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m set \
-@@ -47,6 +53,7 @@ iptables \
- --comment out+NONE \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
-@@ -55,6 +62,7 @@ iptables \
- --match-set tck_test dst,src,dst \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
-@@ -63,6 +71,7 @@ iptables \
- --match-set tck_test src,dst,src \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
-@@ -71,6 +80,7 @@ iptables \
- --match-set tck_test dst,src,dst \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
-@@ -79,6 +89,7 @@ iptables \
- --match-set tck_test dst,src,dst \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
-@@ -87,6 +98,7 @@ iptables \
- --match-set tck_test src,dst,src \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
-@@ -95,6 +107,7 @@ iptables \
- --match-set tck_test dst,src,dst \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m state \
-@@ -103,6 +116,7 @@ iptables \
- --match-set tck_test dst,src \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m state \
-@@ -111,6 +125,7 @@ iptables \
- --match-set tck_test src,dst \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m state \
-@@ -119,6 +134,7 @@ iptables \
- --match-set tck_test dst,src \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m set \
-@@ -127,6 +143,7 @@ iptables \
- --comment inout \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m set \
-@@ -135,6 +152,7 @@ iptables \
- --comment inout \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m set \
-diff --git a/tests/nwfilterxml2firewalldata/ipt-no-macspoof-linux.args b/tests/nwfilterxml2firewalldata/ipt-no-macspoof-linux.args
-index 86ab228fb8..c35fa1e488 100644
---- a/tests/nwfilterxml2firewalldata/ipt-no-macspoof-linux.args
-+++ b/tests/nwfilterxml2firewalldata/ipt-no-macspoof-linux.args
-@@ -1,10 +1,12 @@
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac '!' \
- --mac-source 12:34:56:78:9a:bc \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac '!' \
-diff --git a/tests/nwfilterxml2firewalldata/ipv6-linux.args b/tests/nwfilterxml2firewalldata/ipv6-linux.args
-index 6fba19f2eb..87db9c2979 100644
---- a/tests/nwfilterxml2firewalldata/ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/ipv6-linux.args
-@@ -1,4 +1,5 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:fe \
-@@ -11,6 +12,7 @@ ebtables \
- --ip6-destination-port 100:101 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -21,6 +23,7 @@ ebtables \
- --ip6-source-port 100:101 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-@@ -31,6 +34,7 @@ ebtables \
- --ip6-destination-port 100:101 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -41,6 +45,7 @@ ebtables \
- --ip6-source-port 65535:65535 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-@@ -51,6 +56,7 @@ ebtables \
- --ip6-destination-port 65535:65535 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -59,6 +65,7 @@ ebtables \
- --ip6-protocol 18 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-@@ -67,6 +74,7 @@ ebtables \
- --ip6-protocol 18 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -76,6 +84,7 @@ ebtables \
- --ip6-icmp-type 1:11/10:11 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-@@ -85,6 +94,7 @@ ebtables \
- --ip6-icmp-type 1:11/10:11 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -94,6 +104,7 @@ ebtables \
- --ip6-icmp-type 1:1/10:10 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-@@ -103,6 +114,7 @@ ebtables \
- --ip6-icmp-type 1:1/10:10 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -112,6 +124,7 @@ ebtables \
- --ip6-icmp-type 0:255/10:10 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-@@ -121,6 +134,7 @@ ebtables \
- --ip6-icmp-type 0:255/10:10 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -p ipv6 \
-@@ -130,6 +144,7 @@ ebtables \
- --ip6-icmp-type 1:1/0:255 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -p ipv6 \
-diff --git a/tests/nwfilterxml2firewalldata/iter1-linux.args b/tests/nwfilterxml2firewalldata/iter1-linux.args
-index 31f37cf537..9bdad18748 100644
---- a/tests/nwfilterxml2firewalldata/iter1-linux.args
-+++ b/tests/nwfilterxml2firewalldata/iter1-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -9,6 +10,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -29,6 +32,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -39,6 +43,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -49,6 +54,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -59,6 +65,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -69,6 +76,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -79,6 +87,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-diff --git a/tests/nwfilterxml2firewalldata/iter2-linux.args b/tests/nwfilterxml2firewalldata/iter2-linux.args
-index 4230a9d524..b088350ee5 100644
---- a/tests/nwfilterxml2firewalldata/iter2-linux.args
-+++ b/tests/nwfilterxml2firewalldata/iter2-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -9,6 +10,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -29,6 +32,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -39,6 +43,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -49,6 +54,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -59,6 +65,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -69,6 +76,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -79,6 +87,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -89,6 +98,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -99,6 +109,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 1.1.1.1 \
-@@ -109,6 +120,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -119,6 +131,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -129,6 +142,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -139,6 +153,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -149,6 +164,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -159,6 +175,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 3.3.3.3 \
-@@ -169,6 +186,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -179,6 +197,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -189,6 +208,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 1.1.1.1 \
-@@ -199,6 +219,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -209,6 +230,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -219,6 +241,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -229,6 +252,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -239,6 +263,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -249,6 +274,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 3.3.3.3 \
-@@ -259,6 +285,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -269,6 +296,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -280,6 +308,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 1.1.1.1 \
-@@ -291,6 +320,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -302,6 +332,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -313,6 +344,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 2.2.2.2 \
-@@ -324,6 +356,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -335,6 +368,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -346,6 +380,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 3.3.3.3 \
-@@ -357,6 +392,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -368,6 +404,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -379,6 +416,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 1.1.1.1 \
-@@ -390,6 +428,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -401,6 +440,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -412,6 +452,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 2.2.2.2 \
-@@ -423,6 +464,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -434,6 +476,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -445,6 +488,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 3.3.3.3 \
-@@ -456,6 +500,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -467,6 +512,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -478,6 +524,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 1.1.1.1 \
-@@ -489,6 +536,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -500,6 +548,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -511,6 +560,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 2.2.2.2 \
-@@ -522,6 +572,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -533,6 +584,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -544,6 +596,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 3.3.3.3 \
-@@ -555,6 +608,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -566,6 +620,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -577,6 +632,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 1.1.1.1 \
-@@ -588,6 +644,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -599,6 +656,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -610,6 +668,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 2.2.2.2 \
-@@ -621,6 +680,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -632,6 +692,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -643,6 +704,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 3.3.3.3 \
-@@ -654,6 +716,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -665,6 +728,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -676,6 +740,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -687,6 +752,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -698,6 +764,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -709,6 +776,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -720,6 +788,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -731,6 +800,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -742,6 +812,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -753,6 +824,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -764,6 +836,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -775,6 +848,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -786,6 +860,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -797,6 +872,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -808,6 +884,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -819,6 +896,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -830,6 +908,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -841,6 +920,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -852,6 +932,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -863,6 +944,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -874,6 +956,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -885,6 +968,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -896,6 +980,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -907,6 +992,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -918,6 +1004,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -929,6 +1016,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -940,6 +1028,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -951,6 +1040,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -962,6 +1052,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -973,6 +1064,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -984,6 +1076,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -995,6 +1088,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1006,6 +1100,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -1017,6 +1112,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1028,6 +1124,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1039,6 +1136,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -1050,6 +1148,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1061,6 +1160,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1072,6 +1172,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -1083,6 +1184,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1094,6 +1196,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1105,6 +1208,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -1116,6 +1220,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1127,6 +1232,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1138,6 +1244,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -1149,6 +1256,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1160,6 +1268,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1171,6 +1280,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -1182,6 +1292,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1193,6 +1304,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1204,6 +1316,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -1215,6 +1328,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1226,6 +1340,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1237,6 +1352,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -1248,6 +1364,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1259,6 +1376,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1270,6 +1388,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -1281,6 +1400,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1292,6 +1412,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1303,6 +1424,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -1314,6 +1436,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1325,6 +1448,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1336,6 +1460,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -1347,6 +1472,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1358,6 +1484,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1369,6 +1496,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -1380,6 +1508,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -1391,6 +1520,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1402,6 +1532,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 2.2.2.2 \
-@@ -1413,6 +1544,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 2.2.2.2 \
-@@ -1424,6 +1556,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1435,6 +1568,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 3.3.3.3 \
-@@ -1446,6 +1580,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 3.3.3.3 \
-@@ -1457,6 +1592,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -1467,6 +1603,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 1.1.1.1 \
-@@ -1477,6 +1614,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -1487,6 +1625,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -1497,6 +1636,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -1507,6 +1647,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -1517,6 +1658,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -1527,6 +1669,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 3.3.3.3 \
-@@ -1537,6 +1680,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -1547,6 +1691,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -1557,6 +1702,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 1.1.1.1 \
-@@ -1567,6 +1713,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -1577,6 +1724,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -1587,6 +1735,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -1597,6 +1746,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -1607,6 +1757,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -1617,6 +1768,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 3.3.3.3 \
-@@ -1627,6 +1779,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -1637,6 +1790,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -1647,6 +1801,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 1.1.1.1 \
-@@ -1657,6 +1812,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 1.1.1.1 \
-@@ -1667,6 +1823,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -1677,6 +1834,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -1687,6 +1845,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -1697,6 +1856,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -1707,6 +1867,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 3.3.3.3 \
-@@ -1717,6 +1878,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 3.3.3.3 \
-@@ -1727,6 +1889,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -1737,6 +1900,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 1.1.1.1 \
-@@ -1747,6 +1911,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 1.1.1.1 \
-@@ -1757,6 +1922,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -1767,6 +1933,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 2.2.2.2 \
-@@ -1777,6 +1944,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -1787,6 +1955,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-@@ -1797,6 +1966,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 3.3.3.3 \
-@@ -1807,6 +1977,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 3.3.3.3 \
-diff --git a/tests/nwfilterxml2firewalldata/iter3-linux.args b/tests/nwfilterxml2firewalldata/iter3-linux.args
-index 0b16577992..cc6d442c75 100644
---- a/tests/nwfilterxml2firewalldata/iter3-linux.args
-+++ b/tests/nwfilterxml2firewalldata/iter3-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -9,6 +10,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -29,6 +32,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -39,6 +43,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --destination 1.1.1.1 \
-@@ -49,6 +54,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --source 1.1.1.1 \
-@@ -59,6 +65,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -69,6 +76,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -79,6 +87,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -89,6 +98,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -99,6 +109,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --destination 2.2.2.2 \
-@@ -109,6 +120,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --source 2.2.2.2 \
-@@ -119,6 +131,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-@@ -130,6 +143,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --destination 2.2.2.2 \
-@@ -141,6 +155,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --source 2.2.2.2 \
-diff --git a/tests/nwfilterxml2firewalldata/mac-linux.args b/tests/nwfilterxml2firewalldata/mac-linux.args
-index 0fd9dbccc0..cc3aab2b92 100644
---- a/tests/nwfilterxml2firewalldata/mac-linux.args
-+++ b/tests/nwfilterxml2firewalldata/mac-linux.args
-@@ -1,22 +1,26 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
- -p 0x806 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d aa:bb:cc:dd:ee:ff/ff:ff:ff:ff:ff:ff \
- -p 0x800 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d aa:bb:cc:dd:ee:ff/ff:ff:ff:ff:ff:ff \
- -p 0x600 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d aa:bb:cc:dd:ee:ff/ff:ff:ff:ff:ff:ff \
-diff --git a/tests/nwfilterxml2firewalldata/rarp-linux.args b/tests/nwfilterxml2firewalldata/rarp-linux.args
-index f5fd6433bd..3e2441818c 100644
---- a/tests/nwfilterxml2firewalldata/rarp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/rarp-linux.args
-@@ -1,7 +1,9 @@
- ebtables \
-+--concurrent \
- -t nat \
- -N libvirt-J-vnet0
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -14,6 +16,7 @@ ebtables \
- --arp-mac-dst 0a:0b:0c:0d:0e:0f \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -23,6 +26,7 @@ ebtables \
- --arp-ptype 0xff \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -32,6 +36,7 @@ ebtables \
- --arp-ptype 0x100 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -41,6 +46,7 @@ ebtables \
- --arp-ptype 0xffff \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A PREROUTING \
- -i vnet0 \
-diff --git a/tests/nwfilterxml2firewalldata/sctp-ipv6-linux.args b/tests/nwfilterxml2firewalldata/sctp-ipv6-linux.args
-index 959c4e8e0f..fbe6f39198 100644
---- a/tests/nwfilterxml2firewalldata/sctp-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/sctp-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- -m mac \
-@@ -10,6 +11,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --source a:b:c::d:e:f/128 \
-@@ -19,6 +21,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- -m mac \
-@@ -30,6 +33,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --destination a:b:c::/128 \
-@@ -41,6 +45,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- -m mac \
-@@ -54,6 +59,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --destination a:b:c::/128 \
-@@ -65,6 +71,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --destination ::10.1.2.3/128 \
-@@ -76,6 +83,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- -m mac \
-@@ -89,6 +97,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/sctp-linux.args b/tests/nwfilterxml2firewalldata/sctp-linux.args
-index 671fc0480f..a3c5a7a72d 100644
---- a/tests/nwfilterxml2firewalldata/sctp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/sctp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --destination 10.1.2.3/32 \
-@@ -41,6 +45,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- -m mac \
-@@ -54,6 +59,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --destination 10.1.2.3/32 \
-@@ -65,6 +71,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p sctp \
- --destination 10.1.2.3/32 \
-@@ -76,6 +83,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p sctp \
- -m mac \
-@@ -89,6 +97,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p sctp \
- --destination 10.1.2.3/32 \
-diff --git a/tests/nwfilterxml2firewalldata/stp-linux.args b/tests/nwfilterxml2firewalldata/stp-linux.args
-index e3114ac622..76f5321856 100644
---- a/tests/nwfilterxml2firewalldata/stp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/stp-linux.args
-@@ -1,32 +1,41 @@
- ebtables \
-+--concurrent \
- -t nat \
- -F J-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -X J-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -N J-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -d 01:80:c2:00:00:00 \
- -j J-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -F P-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -X P-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -N P-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d 01:80:c2:00:00:00 \
- -j P-vnet0-stp-xyz
- ebtables \
-+--concurrent \
- -t nat \
- -A P-vnet0-stp-xyz \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -35,6 +44,7 @@ ebtables \
- --stp-flags 68 \
- -j CONTINUE
- ebtables \
-+--concurrent \
- -t nat \
- -A J-vnet0-stp-xyz \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -44,6 +54,7 @@ ebtables \
- --stp-root-cost 287454020:573785173 \
- -j RETURN
- ebtables \
-+--concurrent \
- -t nat \
- -A P-vnet0-stp-xyz \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-diff --git a/tests/nwfilterxml2firewalldata/target-linux.args b/tests/nwfilterxml2firewalldata/target-linux.args
-index d219877716..5216c709dd 100644
---- a/tests/nwfilterxml2firewalldata/target-linux.args
-+++ b/tests/nwfilterxml2firewalldata/target-linux.args
-@@ -1,40 +1,47 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
- -p 0x806 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
- -p 0x806 \
- -j DROP
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
- -p 0x806 \
- -j DROP
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d aa:bb:cc:dd:ee:ff/ff:ff:ff:ff:ff:ff \
- -p 0x800 \
- -j ACCEPT
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d aa:bb:cc:dd:ee:ff/ff:ff:ff:ff:ff:ff \
- -p 0x800 \
- -j DROP
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -d aa:bb:cc:dd:ee:ff/ff:ff:ff:ff:ff:ff \
- -p 0x800 \
- -j DROP
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m mac \
-@@ -49,6 +56,7 @@ iptables \
- -- dir out' \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- --source 10.1.2.3/32 \
-@@ -61,6 +69,7 @@ iptables \
- -- dir out' \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m mac \
-@@ -75,6 +84,7 @@ iptables \
- -- dir out' \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m mac \
-@@ -87,6 +97,7 @@ iptables \
- -- dir out' \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- --source 10.1.2.3/32 \
-@@ -97,6 +108,7 @@ iptables \
- -- dir out' \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m mac \
-@@ -109,6 +121,7 @@ iptables \
- -- dir out' \
- -j DROP
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m mac \
-@@ -121,6 +134,7 @@ iptables \
- -- dir out' \
- -j REJECT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- --source 10.1.2.3/32 \
-@@ -131,6 +145,7 @@ iptables \
- -- dir out' \
- -j REJECT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m mac \
-@@ -143,6 +158,7 @@ iptables \
- -- dir out' \
- -j REJECT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -155,6 +171,7 @@ iptables \
- -- dir in' \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -169,6 +186,7 @@ iptables \
- -- dir in' \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -181,6 +199,7 @@ iptables \
- -- dir in' \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -191,6 +210,7 @@ iptables \
- -- dir in' \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -203,6 +223,7 @@ iptables \
- -- dir in' \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -213,6 +234,7 @@ iptables \
- -- dir in' \
- -j DROP
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -223,6 +245,7 @@ iptables \
- -- dir in' \
- -j REJECT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m mac \
-@@ -235,6 +258,7 @@ iptables \
- -- dir in' \
- -j REJECT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- --destination 10.1.2.3/22 \
-@@ -245,6 +269,7 @@ iptables \
- -- dir in' \
- -j REJECT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m comment \
-@@ -252,6 +277,7 @@ iptables \
- -- dir inout' \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m comment \
-@@ -259,6 +285,7 @@ iptables \
- -- dir inout' \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m comment \
-@@ -266,6 +293,7 @@ iptables \
- -- dir inout' \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m comment \
-@@ -273,6 +301,7 @@ iptables \
- -- dir inout' \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m comment \
-@@ -280,6 +309,7 @@ iptables \
- -- dir inout' \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m comment \
-@@ -287,6 +317,7 @@ iptables \
- -- dir inout' \
- -j DROP
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -m comment \
-@@ -294,6 +325,7 @@ iptables \
- -- dir inout' \
- -j REJECT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -m comment \
-@@ -301,6 +333,7 @@ iptables \
- -- dir inout' \
- -j REJECT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -m comment \
-diff --git a/tests/nwfilterxml2firewalldata/target2-linux.args b/tests/nwfilterxml2firewalldata/target2-linux.args
-index cfa4f589d6..c774f6f24a 100644
---- a/tests/nwfilterxml2firewalldata/target2-linux.args
-+++ b/tests/nwfilterxml2firewalldata/target2-linux.args
-@@ -1,19 +1,23 @@
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --dport 22 \
- -j ACCEPT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --sport 22 \
- -j RETURN
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --sport 22 \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --sport 80 \
-@@ -21,6 +25,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --dport 80 \
-@@ -28,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --sport 80 \
-@@ -35,26 +41,32 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- -j REJECT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -j REJECT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- -j REJECT
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p all \
- -j DROP
- iptables \
-+-w \
- -A FP-vnet0 \
- -p all \
- -j DROP
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p all \
- -j DROP
-diff --git a/tests/nwfilterxml2firewalldata/tcp-ipv6-linux.args b/tests/nwfilterxml2firewalldata/tcp-ipv6-linux.args
-index e6f8de3fca..8fa5e24eff 100644
---- a/tests/nwfilterxml2firewalldata/tcp-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/tcp-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- -m mac \
-@@ -10,6 +11,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --source a:b:c::d:e:f/128 \
-@@ -19,6 +21,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- -m mac \
-@@ -30,6 +33,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --destination a:b:c::/128 \
-@@ -41,6 +45,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -m mac \
-@@ -54,6 +59,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --destination a:b:c::/128 \
-@@ -65,6 +71,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --destination ::10.1.2.3/128 \
-@@ -76,6 +83,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -m mac \
-@@ -89,6 +97,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/tcp-linux.args b/tests/nwfilterxml2firewalldata/tcp-linux.args
-index 195bfc01e6..74ac4a6733 100644
---- a/tests/nwfilterxml2firewalldata/tcp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/tcp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --destination 10.1.2.3/32 \
-@@ -39,6 +43,7 @@ iptables \
- --sport 100:1111 \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -m mac \
-@@ -50,6 +55,7 @@ iptables \
- --dport 100:1111 \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --destination 10.1.2.3/32 \
-@@ -59,6 +65,7 @@ iptables \
- --sport 100:1111 \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p tcp \
- --destination 10.1.2.3/32 \
-@@ -68,6 +75,7 @@ iptables \
- --sport 65535:65535 \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- -m mac \
-@@ -79,6 +87,7 @@ iptables \
- --dport 65535:65535 \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p tcp \
- --destination 10.1.2.3/32 \
-@@ -88,21 +97,25 @@ iptables \
- --sport 65535:65535 \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --tcp-flags SYN ALL \
- -j ACCEPT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --tcp-flags SYN SYN,ACK \
- -j ACCEPT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --tcp-flags RST NONE \
- -j ACCEPT
- iptables \
-+-w \
- -A FP-vnet0 \
- -p tcp \
- --tcp-flags PSH NONE \
-diff --git a/tests/nwfilterxml2firewalldata/udp-ipv6-linux.args b/tests/nwfilterxml2firewalldata/udp-ipv6-linux.args
-index 9183c08753..59367ed3d3 100644
---- a/tests/nwfilterxml2firewalldata/udp-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/udp-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- -m mac \
-@@ -10,6 +11,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --source a:b:c::d:e:f/128 \
-@@ -19,6 +21,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- -m mac \
-@@ -30,6 +33,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --destination ::a:b:c/128 \
-@@ -41,6 +45,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- -m mac \
-@@ -54,6 +59,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --destination ::a:b:c/128 \
-@@ -65,6 +71,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --destination ::10.1.2.3/128 \
-@@ -76,6 +83,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- -m mac \
-@@ -89,6 +97,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/udp-linux.args b/tests/nwfilterxml2firewalldata/udp-linux.args
-index 910d648a8a..32a8f56dfc 100644
---- a/tests/nwfilterxml2firewalldata/udp-linux.args
-+++ b/tests/nwfilterxml2firewalldata/udp-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --destination 10.1.2.3/32 \
-@@ -41,6 +45,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- -m mac \
-@@ -54,6 +59,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --destination 10.1.2.3/32 \
-@@ -65,6 +71,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udp \
- --destination 10.1.2.3/32 \
-@@ -76,6 +83,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udp \
- -m mac \
-@@ -89,6 +97,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udp \
- --destination 10.1.2.3/32 \
-diff --git a/tests/nwfilterxml2firewalldata/udplite-ipv6-linux.args b/tests/nwfilterxml2firewalldata/udplite-ipv6-linux.args
-index 9eb38d7e6d..de564aee36 100644
---- a/tests/nwfilterxml2firewalldata/udplite-ipv6-linux.args
-+++ b/tests/nwfilterxml2firewalldata/udplite-ipv6-linux.args
-@@ -1,4 +1,5 @@
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udplite \
- -m mac \
-@@ -11,6 +12,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udplite \
- --destination f:e:d::c:b:a/127 \
-@@ -21,6 +23,7 @@ ip6tables \
- --state ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udplite \
- -m mac \
-@@ -33,6 +36,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udplite \
- --destination a:b:c::/128 \
-@@ -42,6 +46,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udplite \
- -m mac \
-@@ -53,6 +58,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udplite \
- --destination a:b:c::/128 \
-@@ -62,6 +68,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FJ-vnet0 \
- -p udplite \
- --destination ::10.1.2.3/128 \
-@@ -71,6 +78,7 @@ ip6tables \
- --state ESTABLISHED \
- -j RETURN
- ip6tables \
-+-w \
- -A FP-vnet0 \
- -p udplite \
- -m mac \
-@@ -82,6 +90,7 @@ ip6tables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- ip6tables \
-+-w \
- -A HJ-vnet0 \
- -p udplite \
- --destination ::10.1.2.3/128 \
-diff --git a/tests/nwfilterxml2firewalldata/udplite-linux.args b/tests/nwfilterxml2firewalldata/udplite-linux.args
-index 53bc667459..8f3a9e8f24 100644
---- a/tests/nwfilterxml2firewalldata/udplite-linux.args
-+++ b/tests/nwfilterxml2firewalldata/udplite-linux.args
-@@ -1,4 +1,5 @@
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udplite \
- -m mac \
-@@ -10,6 +11,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udplite \
- --source 10.1.2.3/32 \
-@@ -19,6 +21,7 @@ iptables \
- --state ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udplite \
- -m mac \
-@@ -30,6 +33,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udplite \
- --destination 10.1.2.3/22 \
-@@ -39,6 +43,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udplite \
- -m mac \
-@@ -50,6 +55,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udplite \
- --destination 10.1.2.3/22 \
-@@ -59,6 +65,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FJ-vnet0 \
- -p udplite \
- --destination 10.1.2.3/22 \
-@@ -68,6 +75,7 @@ iptables \
- --state ESTABLISHED \
- -j RETURN
- iptables \
-+-w \
- -A FP-vnet0 \
- -p udplite \
- -m mac \
-@@ -79,6 +87,7 @@ iptables \
- --state NEW,ESTABLISHED \
- -j ACCEPT
- iptables \
-+-w \
- -A HJ-vnet0 \
- -p udplite \
- --destination 10.1.2.3/22 \
-diff --git a/tests/nwfilterxml2firewalldata/vlan-linux.args b/tests/nwfilterxml2firewalldata/vlan-linux.args
-index 0a8204c4dc..a93c09cfbd 100644
---- a/tests/nwfilterxml2firewalldata/vlan-linux.args
-+++ b/tests/nwfilterxml2firewalldata/vlan-linux.args
-@@ -1,4 +1,5 @@
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -d 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -7,6 +8,7 @@ ebtables \
- --vlan-id 291 \
- -j CONTINUE
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -15,6 +17,7 @@ ebtables \
- --vlan-id 291 \
- -j CONTINUE
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -d 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -23,6 +26,7 @@ ebtables \
- --vlan-id 1234 \
- -j RETURN
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -31,6 +35,7 @@ ebtables \
- --vlan-id 1234 \
- -j RETURN
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-P-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -39,6 +44,7 @@ ebtables \
- --vlan-id 291 \
- -j DROP
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-@@ -47,6 +53,7 @@ ebtables \
- --vlan-encap 2054 \
- -j DROP
- ebtables \
-+--concurrent \
- -t nat \
- -A libvirt-J-vnet0 \
- -s 01:02:03:04:05:06/ff:ff:ff:ff:ff:ff \
-diff --git a/tests/nwfilterxml2firewalltest.c b/tests/nwfilterxml2firewalltest.c
-index da86ec9463..c97f83b24a 100644
---- a/tests/nwfilterxml2firewalltest.c
-+++ b/tests/nwfilterxml2firewalltest.c
-@@ -58,90 +58,90 @@ struct _virNWFilterInst {
- 
- static const char *commonRules[] = {
-     /* Dropping ebtables rules */
--    "ebtables -t nat -D PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
--    "ebtables -t nat -D POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
--    "ebtables -t nat -L libvirt-J-vnet0\n"
--    "ebtables -t nat -L libvirt-P-vnet0\n"
--    "ebtables -t nat -F libvirt-J-vnet0\n"
--    "ebtables -t nat -X libvirt-J-vnet0\n"
--    "ebtables -t nat -F libvirt-P-vnet0\n"
--    "ebtables -t nat -X libvirt-P-vnet0\n",
-+    "ebtables --concurrent -t nat -D PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
-+    "ebtables --concurrent -t nat -D POSTROUTING -o vnet0 -j libvirt-P-vnet0\n"
-+    "ebtables --concurrent -t nat -L libvirt-J-vnet0\n"
-+    "ebtables --concurrent -t nat -L libvirt-P-vnet0\n"
-+    "ebtables --concurrent -t nat -F libvirt-J-vnet0\n"
-+    "ebtables --concurrent -t nat -X libvirt-J-vnet0\n"
-+    "ebtables --concurrent -t nat -F libvirt-P-vnet0\n"
-+    "ebtables --concurrent -t nat -X libvirt-P-vnet0\n",
- 
-     /* Creating ebtables chains */
--    "ebtables -t nat -N libvirt-J-vnet0\n"
--    "ebtables -t nat -N libvirt-P-vnet0\n",
-+    "ebtables --concurrent -t nat -N libvirt-J-vnet0\n"
-+    "ebtables --concurrent -t nat -N libvirt-P-vnet0\n",
- 
-     /* Dropping iptables rules */
--    "iptables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
--    "iptables -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n"
--    "iptables -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
--    "iptables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
--    "iptables -F FP-vnet0\n"
--    "iptables -X FP-vnet0\n"
--    "iptables -F FJ-vnet0\n"
--    "iptables -X FJ-vnet0\n"
--    "iptables -F HJ-vnet0\n"
--    "iptables -X HJ-vnet0\n",
-+    "iptables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
-+    "iptables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n"
-+    "iptables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
-+    "iptables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
-+    "iptables -w -F FP-vnet0\n"
-+    "iptables -w -X FP-vnet0\n"
-+    "iptables -w -F FJ-vnet0\n"
-+    "iptables -w -X FJ-vnet0\n"
-+    "iptables -w -F HJ-vnet0\n"
-+    "iptables -w -X HJ-vnet0\n",
- 
-     /* Creating iptables chains */
--    "iptables -N libvirt-in\n"
--    "iptables -N libvirt-out\n"
--    "iptables -N libvirt-in-post\n"
--    "iptables -N libvirt-host-in\n"
--    "iptables -D FORWARD -j libvirt-in\n"
--    "iptables -D FORWARD -j libvirt-out\n"
--    "iptables -D FORWARD -j libvirt-in-post\n"
--    "iptables -D INPUT -j libvirt-host-in\n"
--    "iptables -I FORWARD 1 -j libvirt-in\n"
--    "iptables -I FORWARD 2 -j libvirt-out\n"
--    "iptables -I FORWARD 3 -j libvirt-in-post\n"
--    "iptables -I INPUT 1 -j libvirt-host-in\n"
--    "iptables -N FP-vnet0\n"
--    "iptables -N FJ-vnet0\n"
--    "iptables -N HJ-vnet0\n"
--    "iptables -A libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
--    "iptables -A libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
--    "iptables -A libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
--    "iptables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--    "iptables -A libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n",
-+    "iptables -w -N libvirt-in\n"
-+    "iptables -w -N libvirt-out\n"
-+    "iptables -w -N libvirt-in-post\n"
-+    "iptables -w -N libvirt-host-in\n"
-+    "iptables -w -D FORWARD -j libvirt-in\n"
-+    "iptables -w -D FORWARD -j libvirt-out\n"
-+    "iptables -w -D FORWARD -j libvirt-in-post\n"
-+    "iptables -w -D INPUT -j libvirt-host-in\n"
-+    "iptables -w -I FORWARD 1 -j libvirt-in\n"
-+    "iptables -w -I FORWARD 2 -j libvirt-out\n"
-+    "iptables -w -I FORWARD 3 -j libvirt-in-post\n"
-+    "iptables -w -I INPUT 1 -j libvirt-host-in\n"
-+    "iptables -w -N FP-vnet0\n"
-+    "iptables -w -N FJ-vnet0\n"
-+    "iptables -w -N HJ-vnet0\n"
-+    "iptables -w -A libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
-+    "iptables -w -A libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
-+    "iptables -w -A libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
-+    "iptables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+    "iptables -w -A libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n",
- 
-     /* Dropping ip6tables rules */
--    "ip6tables -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
--    "ip6tables -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n"
--    "ip6tables -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
--    "ip6tables -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
--    "ip6tables -F FP-vnet0\n"
--    "ip6tables -X FP-vnet0\n"
--    "ip6tables -F FJ-vnet0\n"
--    "ip6tables -X FJ-vnet0\n"
--    "ip6tables -F HJ-vnet0\n"
--    "ip6tables -X HJ-vnet0\n",
-+    "ip6tables -w -D libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
-+    "ip6tables -w -D libvirt-out -m physdev --physdev-out vnet0 -g FP-vnet0\n"
-+    "ip6tables -w -D libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
-+    "ip6tables -w -D libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
-+    "ip6tables -w -F FP-vnet0\n"
-+    "ip6tables -w -X FP-vnet0\n"
-+    "ip6tables -w -F FJ-vnet0\n"
-+    "ip6tables -w -X FJ-vnet0\n"
-+    "ip6tables -w -F HJ-vnet0\n"
-+    "ip6tables -w -X HJ-vnet0\n",
- 
-     /* Creating ip6tables chains */
--    "ip6tables -N libvirt-in\n"
--    "ip6tables -N libvirt-out\n"
--    "ip6tables -N libvirt-in-post\n"
--    "ip6tables -N libvirt-host-in\n"
--    "ip6tables -D FORWARD -j libvirt-in\n"
--    "ip6tables -D FORWARD -j libvirt-out\n"
--    "ip6tables -D FORWARD -j libvirt-in-post\n"
--    "ip6tables -D INPUT -j libvirt-host-in\n"
--    "ip6tables -I FORWARD 1 -j libvirt-in\n"
--    "ip6tables -I FORWARD 2 -j libvirt-out\n"
--    "ip6tables -I FORWARD 3 -j libvirt-in-post\n"
--    "ip6tables -I INPUT 1 -j libvirt-host-in\n"
--    "ip6tables -N FP-vnet0\n"
--    "ip6tables -N FJ-vnet0\n"
--    "ip6tables -N HJ-vnet0\n"
--    "ip6tables -A libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
--    "ip6tables -A libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
--    "ip6tables -A libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
--    "ip6tables -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
--    "ip6tables -A libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n",
-+    "ip6tables -w -N libvirt-in\n"
-+    "ip6tables -w -N libvirt-out\n"
-+    "ip6tables -w -N libvirt-in-post\n"
-+    "ip6tables -w -N libvirt-host-in\n"
-+    "ip6tables -w -D FORWARD -j libvirt-in\n"
-+    "ip6tables -w -D FORWARD -j libvirt-out\n"
-+    "ip6tables -w -D FORWARD -j libvirt-in-post\n"
-+    "ip6tables -w -D INPUT -j libvirt-host-in\n"
-+    "ip6tables -w -I FORWARD 1 -j libvirt-in\n"
-+    "ip6tables -w -I FORWARD 2 -j libvirt-out\n"
-+    "ip6tables -w -I FORWARD 3 -j libvirt-in-post\n"
-+    "ip6tables -w -I INPUT 1 -j libvirt-host-in\n"
-+    "ip6tables -w -N FP-vnet0\n"
-+    "ip6tables -w -N FJ-vnet0\n"
-+    "ip6tables -w -N HJ-vnet0\n"
-+    "ip6tables -w -A libvirt-out -m physdev --physdev-is-bridged --physdev-out vnet0 -g FP-vnet0\n"
-+    "ip6tables -w -A libvirt-in -m physdev --physdev-in vnet0 -g FJ-vnet0\n"
-+    "ip6tables -w -A libvirt-host-in -m physdev --physdev-in vnet0 -g HJ-vnet0\n"
-+    "ip6tables -w -D libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n"
-+    "ip6tables -w -A libvirt-in-post -m physdev --physdev-in vnet0 -j ACCEPT\n",
- 
-     /* Inserting ebtables rules */
--    "ebtables -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
--    "ebtables -t nat -A POSTROUTING -o vnet0 -j libvirt-P-vnet0\n",
-+    "ebtables --concurrent -t nat -A PREROUTING -i vnet0 -j libvirt-J-vnet0\n"
-+    "ebtables --concurrent -t nat -A POSTROUTING -o vnet0 -j libvirt-P-vnet0\n",
- };
- 
- 
-diff --git a/tests/virfirewalltest.c b/tests/virfirewalltest.c
-index 8aba127610..195163a985 100644
---- a/tests/virfirewalltest.c
-+++ b/tests/virfirewalltest.c
-@@ -147,17 +147,19 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
-                                  "org.firewalld.error",
-                                  "something bad happened");
-         } else {
--            if (nargs == 1 &&
-+            if (nargs == 2 &&
-                 STREQ(type, "ipv4") &&
--                STREQ(args[0], "-L")) {
-+                STREQ(args[0], "-w") &&
-+                STREQ(args[1], "-L")) {
-                 if (virDBusCreateReply(&reply,
-                                        "s", TEST_FILTER_TABLE_LIST) < 0)
-                     goto error;
--            } else if (nargs == 3 &&
-+            } else if (nargs == 4 &&
-                        STREQ(type, "ipv4") &&
--                       STREQ(args[0], "-t") &&
--                       STREQ(args[1], "nat") &&
--                       STREQ(args[2], "-L")) {
-+                       STREQ(args[0], "-w") &&
-+                       STREQ(args[1], "-t") &&
-+                       STREQ(args[2], "nat") &&
-+                       STREQ(args[3], "-L")) {
-                 if (virDBusCreateReply(&reply,
-                                        "s", TEST_NAT_TABLE_LIST) < 0)
-                     goto error;
-@@ -204,8 +206,8 @@ testFirewallSingleGroup(const void *opaque)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -260,8 +262,8 @@ testFirewallRemoveRule(const void *opaque)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
-     virFirewallRulePtr fwrule;
- 
-@@ -323,10 +325,10 @@ testFirewallManyGroups(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.1' --jump REJECT\n"
--        IPTABLES_PATH " -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A OUTPUT --jump DROP\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -414,10 +416,10 @@ testFirewallIgnoreFailGroup(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A OUTPUT --jump DROP\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -486,10 +488,10 @@ testFirewallIgnoreFailRule(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A OUTPUT --jump DROP\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A OUTPUT --jump DROP\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -557,8 +559,8 @@ testFirewallNoRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.255 --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -621,11 +623,11 @@ testFirewallSingleRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -705,10 +707,10 @@ testFirewallManyRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -792,14 +794,14 @@ testFirewallChainedRollback(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.127 --jump REJECT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.1' --jump REJECT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host 192.168.122.127 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host '!192.168.122.1' --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
--        IPTABLES_PATH " -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.127 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.127 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host 192.168.122.255 --jump REJECT\n"
-+        IPTABLES_PATH " -w -D INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     fwDisabled = data->fwDisabled;
-@@ -938,12 +940,14 @@ testFirewallQueryHook(const char *const*args,
-                       void *opaque G_GNUC_UNUSED)
- {
-     if (STREQ(args[0], IPTABLES_PATH) &&
--        STREQ(args[1], "-L")) {
-+        STREQ(args[1], "-w") &&
-+        STREQ(args[2], "-L")) {
-         *output = g_strdup(TEST_FILTER_TABLE_LIST);
-     } else if (STREQ(args[0], IPTABLES_PATH) &&
--               STREQ(args[1], "-t") &&
--               STREQ(args[2], "nat") &&
--               STREQ(args[3], "-L")) {
-+               STREQ(args[1], "-w") &&
-+               STREQ(args[2], "-t") &&
-+               STREQ(args[3], "nat") &&
-+               STREQ(args[4], "-L")) {
-         *output = g_strdup(TEST_NAT_TABLE_LIST);
-     }
- }
-@@ -986,15 +990,15 @@ testFirewallQuery(const void *opaque G_GNUC_UNUSED)
-     int ret = -1;
-     const char *actual = NULL;
-     const char *expected =
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.127 --jump REJECT\n"
--        IPTABLES_PATH " -L\n"
--        IPTABLES_PATH " -t nat -L\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.130 --jump REJECT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.129' --jump REJECT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.129' --jump REJECT\n"
--        IPTABLES_PATH " -A INPUT --source-host 192.168.122.128 --jump REJECT\n"
--        IPTABLES_PATH " -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.1 --jump ACCEPT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.127 --jump REJECT\n"
-+        IPTABLES_PATH " -w -L\n"
-+        IPTABLES_PATH " -w -t nat -L\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.130 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.129' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.129' --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host 192.168.122.128 --jump REJECT\n"
-+        IPTABLES_PATH " -w -A INPUT --source-host '!192.168.122.1' --jump REJECT\n";
-     const struct testFirewallData *data = opaque;
- 
-     expectedLineNum = 0;
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-virNetDevTapCreate-initialize-fd-to-1.patch b/SOURCES/libvirt-util-virNetDevTapCreate-initialize-fd-to-1.patch
deleted file mode 100644
index d2a583f..0000000
--- a/SOURCES/libvirt-util-virNetDevTapCreate-initialize-fd-to-1.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 3b2892c175918021f78a7dfc8dac39f4c451a15f Mon Sep 17 00:00:00 2001
-Message-Id: <3b2892c175918021f78a7dfc8dac39f4c451a15f@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Sat, 12 Dec 2020 22:04:53 -0500
-Subject: [PATCH] util: virNetDevTapCreate: initialize fd to -1
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Fixes: 95089f481e003d971fe0a082018216c58c1b80e5
-(cherry picked from commit 2b6cd855042984b87beb7e3c30b67b0f586d89bb)
-
-https://bugzilla.redhat.com/1874304
-Signed-off-by: Laine Stump <laine@redhat.com>
-Message-Id: <20201213030453.48851-4-laine@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/util/virnetdevtap.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
-index fd4b70df30..d333163ff9 100644
---- a/src/util/virnetdevtap.c
-+++ b/src/util/virnetdevtap.c
-@@ -318,7 +318,7 @@ int virNetDevTapCreate(char **ifname,
-     size_t i = 0;
-     struct ifreq ifr;
-     int ret = -1;
--    int fd = 0;
-+    int fd = -1;
- 
-     virMutexLock(&virNetDevTapCreateMutex);
- 
--- 
-2.29.2
-
diff --git a/SOURCES/libvirt-util-virhostcpu-Fail-when-fetching-CPU-Stats-for-invalid-cpu.patch b/SOURCES/libvirt-util-virhostcpu-Fail-when-fetching-CPU-Stats-for-invalid-cpu.patch
deleted file mode 100644
index 34c2060..0000000
--- a/SOURCES/libvirt-util-virhostcpu-Fail-when-fetching-CPU-Stats-for-invalid-cpu.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From ff54ea3d2a61a25079339d38caa6c509cf697ce3 Mon Sep 17 00:00:00 2001
-Message-Id: <ff54ea3d2a61a25079339d38caa6c509cf697ce3@dist-git>
-From: "Mauro S. M. Rodrigues" <maurosr@linux.vnet.ibm.com>
-Date: Tue, 19 Jan 2021 21:04:08 -0300
-Subject: [PATCH] util: virhostcpu: Fail when fetching CPU Stats for invalid
- cpu
-
-virHostCPUGetStatsLinux walks through every cpu in /proc/stat until it
-finds cpu%cpuNum that matches with the requested cpu.
-If none is found it logs the error but it should return -1, instead of 0.
-Otherwise virsh nodecpustats --cpu <invalid cpu number> and API bindings
-don't fail properly, printing a blank line instead of an error message.
-
-This patch also includes an additional test for virhostcputest to avoid
-this regression to happen again in the future.
-
-Fixes: 93af79fba3fd75a8df6b7ca608719dd97f9511a0
-Reported-by: Satheesh Rajendran <satheera@in.ibm.com>
-Signed-off-by: Mauro S. M. Rodrigues <maurosr@linux.vnet.ibm.com>
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit 75a4ec42f70b5324f95d7ffbbfbf7457620735e4)
-
-https://bugzilla.redhat.com/1915183
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20210120000408.106596-1-dbarboza@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virhostcpu.c  |  2 +-
- tests/virhostcputest.c | 21 ++++++++++++++++++---
- 2 files changed, 19 insertions(+), 4 deletions(-)
-
-diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
-index 218272d7ec..37cc45e3a6 100644
---- a/src/util/virhostcpu.c
-+++ b/src/util/virhostcpu.c
-@@ -855,7 +855,7 @@ virHostCPUGetStatsLinux(FILE *procstat,
-                         _("Invalid cpuNum in %s"),
-                         __FUNCTION__);
- 
--    return 0;
-+    return -1;
- }
- 
- 
-diff --git a/tests/virhostcputest.c b/tests/virhostcputest.c
-index 7865b61578..70a723098b 100644
---- a/tests/virhostcputest.c
-+++ b/tests/virhostcputest.c
-@@ -196,6 +196,7 @@ linuxTestHostCPU(const void *opaque)
- struct nodeCPUStatsData {
-     const char *name;
-     int ncpus;
-+    bool shouldFail;
- };
- 
- static int
-@@ -214,6 +215,19 @@ linuxTestNodeCPUStats(const void *data)
-     result = linuxCPUStatsCompareFiles(cpustatfile,
-                                        testData->ncpus,
-                                        outfile);
-+    if (result < 0) {
-+        if (testData->shouldFail) {
-+            /* Expected error */
-+            result = 0;
-+        }
-+    } else {
-+        if (testData->shouldFail) {
-+            fprintf(stderr, "Expected a failure, got success");
-+            result = -1;
-+        }
-+    }
-+
-+
-     VIR_FREE(cpustatfile);
-     VIR_FREE(outfile);
-     return result;
-@@ -258,14 +272,15 @@ mymain(void)
-         if (virTestRun(nodeData[i].testName, linuxTestHostCPU, &nodeData[i]) != 0)
-             ret = -1;
- 
--# define DO_TEST_CPU_STATS(name, ncpus) \
-+# define DO_TEST_CPU_STATS(name, ncpus, shouldFail) \
-     do { \
--        static struct nodeCPUStatsData data = { name, ncpus }; \
-+        static struct nodeCPUStatsData data = { name, ncpus, shouldFail}; \
-         if (virTestRun("CPU stats " name, linuxTestNodeCPUStats, &data) < 0) \
-             ret = -1; \
-     } while (0)
- 
--    DO_TEST_CPU_STATS("24cpu", 24);
-+    DO_TEST_CPU_STATS("24cpu", 24, false);
-+    DO_TEST_CPU_STATS("24cpu", 25, true);
- 
-     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
- }
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-util-virstoragefile-Add-data-structure-for-storing-storage-source-slices.patch b/SOURCES/libvirt-util-virstoragefile-Add-data-structure-for-storing-storage-source-slices.patch
deleted file mode 100644
index 0d94fbe..0000000
--- a/SOURCES/libvirt-util-virstoragefile-Add-data-structure-for-storing-storage-source-slices.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From 57dfcbb6715008f731deb02b8964fca5f38fd2fc Mon Sep 17 00:00:00 2001
-Message-Id: <57dfcbb6715008f731deb02b8964fca5f38fd2fc@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:15 +0100
-Subject: [PATCH] util: virstoragefile: Add data structure for storing storage
- source slices
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Introduce virStorageSourceSlice which will store the 'offset' and 'size'
-of a virStorageSource and declare it as 'sliceStorage' and 'sliceFormat'
-attributes of a virStorageSource.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 6efa04616553c573700906cb7154a8ceb3bd2cb3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <c0e6db154dbb2087bd6dbcae2e232b61f36b7800.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 29 +++++++++++++++++++++++++++++
- src/util/virstoragefile.h | 12 ++++++++++++
- 2 files changed, 41 insertions(+)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index b02fad92b6..0be4168d6e 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2248,6 +2248,30 @@ virStorageSourcePoolDefCopy(const virStorageSourcePoolDef *src)
- }
- 
- 
-+static virStorageSourceSlicePtr
-+virStorageSourceSliceCopy(const virStorageSourceSlice *src)
-+{
-+    virStorageSourceSlicePtr ret = g_new0(virStorageSourceSlice, 1);
-+
-+    ret->offset = src->offset;
-+    ret->size = src->size;
-+    ret->nodename = g_strdup(src->nodename);
-+
-+    return ret;
-+}
-+
-+
-+static void
-+virStorageSourceSliceFree(virStorageSourceSlicePtr slice)
-+{
-+    if (!slice)
-+        return;
-+
-+    g_free(slice->nodename);
-+    g_free(slice);
-+}
-+
-+
- /**
-  * virStorageSourcePtr:
-  *
-@@ -2302,6 +2326,9 @@ virStorageSourceCopy(const virStorageSource *src,
-     def->tlsAlias = g_strdup(src->tlsAlias);
-     def->tlsCertdir = g_strdup(src->tlsCertdir);
- 
-+    if (src->sliceStorage)
-+        def->sliceStorage = virStorageSourceSliceCopy(src->sliceStorage);
-+
-     if (src->nhosts) {
-         if (!(def->hosts = virStorageNetHostDefCopy(src->nhosts, src->hosts)))
-             return NULL;
-@@ -2581,6 +2608,8 @@ virStorageSourceClear(virStorageSourcePtr def)
-     VIR_FREE(def->timestamps);
-     VIR_FREE(def->externalDataStoreRaw);
- 
-+    virStorageSourceSliceFree(def->sliceStorage);
-+
-     virObjectUnref(def->externalDataStore);
-     def->externalDataStore = NULL;
- 
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 39e50a989d..1f41e6e357 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -242,6 +242,16 @@ struct _virStorageSourceNVMeDef {
-     /* Don't forget to update virStorageSourceNVMeDefCopy */
- };
- 
-+
-+typedef struct _virStorageSourceSlice virStorageSourceSlice;
-+typedef virStorageSourceSlice *virStorageSourceSlicePtr;
-+struct _virStorageSourceSlice {
-+    unsigned long long offset;
-+    unsigned long long size;
-+    char *nodename;
-+};
-+
-+
- typedef struct _virStorageDriverData virStorageDriverData;
- typedef virStorageDriverData *virStorageDriverDataPtr;
- 
-@@ -286,6 +296,8 @@ struct _virStorageSource {
-     bool nocow;
-     bool sparse;
- 
-+    virStorageSourceSlicePtr sliceStorage;
-+
-     virStoragePermsPtr perms;
-     virStorageTimestampsPtr timestamps;
-     unsigned long long capacity; /* in bytes, 0 if unknown */
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDevMapperGetTargets-Don-t-ignore-EBADF.patch b/SOURCES/libvirt-virDevMapperGetTargets-Don-t-ignore-EBADF.patch
deleted file mode 100644
index 077da01..0000000
--- a/SOURCES/libvirt-virDevMapperGetTargets-Don-t-ignore-EBADF.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 16b2178f23f82688b988c12bf7ee6caa97974669 Mon Sep 17 00:00:00 2001
-Message-Id: <16b2178f23f82688b988c12bf7ee6caa97974669@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 27 Jul 2020 12:36:53 +0200
-Subject: [PATCH] virDevMapperGetTargets: Don't ignore EBADF
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit e450ebb4c6eab1b7376a5ba873d10936ad563b75)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <6dc32e8797122ad9ecd44a60aaff8e70d060b3b9.1595846084.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/qemu/qemu_cgroup.c | 2 +-
- src/qemu/qemu_domain.c | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
-index 57a1231855..3a62b4ac15 100644
---- a/src/qemu/qemu_cgroup.c
-+++ b/src/qemu/qemu_cgroup.c
-@@ -89,7 +89,7 @@ qemuSetupImagePathCgroup(virDomainObjPtr vm,
-     }
- 
-     if (virDevMapperGetTargets(path, &targetPaths) < 0 &&
--        errno != ENOSYS && errno != EBADF) {
-+        errno != ENOSYS) {
-         virReportSystemError(errno,
-                              _("Unable to get devmapper targets for %s"),
-                              path);
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index ffe88ff027..35b536868a 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -14924,7 +14924,7 @@ qemuDomainSetupDisk(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED,
-                 goto cleanup;
- 
-             if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
--                errno != ENOSYS && errno != EBADF) {
-+                errno != ENOSYS) {
-                 virReportSystemError(errno,
-                                      _("Unable to get devmapper targets for %s"),
-                                      next->path);
-@@ -15985,7 +15985,7 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
-             tmpPath = g_strdup(next->path);
- 
-             if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
--                errno != ENOSYS && errno != EBADF) {
-+                errno != ENOSYS) {
-                 virReportSystemError(errno,
-                                      _("Unable to get devmapper targets for %s"),
-                                      next->path);
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virDevMapperGetTargetsImpl-Check-for-dm-major-properly.patch b/SOURCES/libvirt-virDevMapperGetTargetsImpl-Check-for-dm-major-properly.patch
deleted file mode 100644
index 86c9233..0000000
--- a/SOURCES/libvirt-virDevMapperGetTargetsImpl-Check-for-dm-major-properly.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From e0f87dd97d0061eb2ea22b025c8bbf3310c78290 Mon Sep 17 00:00:00 2001
-Message-Id: <e0f87dd97d0061eb2ea22b025c8bbf3310c78290@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 19 Jun 2020 17:44:09 +0200
-Subject: [PATCH] virDevMapperGetTargetsImpl: Check for dm major properly
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In v6.4.0-rc1~143 I've introduced a check that is supposed to
-return from the function early, if given path is not a dm target.
-While the idea is still valid, the implementation had a flaw.
-It calls stat() over given path and the uses major(sb.st_dev) to
-learn the major of the device. This is then passed to
-dm_is_dm_major() which returns true or false depending whether
-the device is under devmapper's control or not.
-
-The problem with this approach is in how the major of the device
-is obtained - paths managed by devmapper are special files and
-thus we want to be using st_rdev instead of st_dev to obtain the
-major number. Well, that's what virIsDevMapperDevice() does
-already so might as well us that.
-
-Fixes: 01626c668ecfbe465d18799ac4628e6127ea1d47
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1839992
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
-(cherry picked from commit d53ab9f54ea8d6cc1e5c3b04c4eb743cae9518ce)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1849095
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <c3222a07d4259142dae4cf4f7f38730a101042b1.1592581422.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virdevmapper.c | 9 +--------
- 1 file changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index 23b2a16057..c346432d86 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -66,7 +66,6 @@ virDevMapperGetTargetsImpl(const char *path,
-                            char ***devPaths_ret,
-                            unsigned int ttl)
- {
--    struct stat sb;
-     struct dm_task *dmt = NULL;
-     struct dm_deps *deps;
-     struct dm_info info;
-@@ -85,13 +84,7 @@ virDevMapperGetTargetsImpl(const char *path,
-         return ret;
-     }
- 
--    if (stat(path, &sb) < 0) {
--        if (errno == ENOENT)
--            return 0;
--        return -1;
--    }
--
--    if (!dm_is_dm_major(major(sb.st_dev)))
-+    if (!virIsDevMapperDevice(path))
-         return 0;
- 
-     if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) {
--- 
-2.27.0
-
diff --git a/SOURCES/libvirt-virDevMapperGetTargetsImpl-Use-VIR_AUTOSTRINGLIST.patch b/SOURCES/libvirt-virDevMapperGetTargetsImpl-Use-VIR_AUTOSTRINGLIST.patch
deleted file mode 100644
index 2d72c75..0000000
--- a/SOURCES/libvirt-virDevMapperGetTargetsImpl-Use-VIR_AUTOSTRINGLIST.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 318beaace7890f3ccf2d09c1afcdde40f4f0284f Mon Sep 17 00:00:00 2001
-Message-Id: <318beaace7890f3ccf2d09c1afcdde40f4f0284f@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 27 Jul 2020 12:36:51 +0200
-Subject: [PATCH] virDevMapperGetTargetsImpl: Use VIR_AUTOSTRINGLIST
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Since we have VIR_AUTOSTRINGLIST we can use it to free string
-lists used in the function automatically.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit b8ebbe05451fde7ce541564f73437a29ffd5db0d)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <c93475780b29c50e19492521e3b9cd19498f119b.1595846084.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virdevmapper.c | 16 +++-------------
- 1 file changed, 3 insertions(+), 13 deletions(-)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index 118dc82e94..44c4731fb4 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -67,8 +67,7 @@ virDevMapperGetTargetsImpl(const char *path,
-     struct dm_task *dmt = NULL;
-     struct dm_deps *deps;
-     struct dm_info info;
--    char **devPaths = NULL;
--    char **recursiveDevPaths = NULL;
-+    VIR_AUTOSTRINGLIST devPaths = NULL;
-     size_t i;
-     int ret = -1;
- 
-@@ -133,28 +132,19 @@ virDevMapperGetTargetsImpl(const char *path,
-                                       minor(deps->device[i]));
-     }
- 
--    recursiveDevPaths = NULL;
-     for (i = 0; i < deps->count; i++) {
--        char **tmpPaths;
-+        VIR_AUTOSTRINGLIST tmpPaths = NULL;
- 
-         if (virDevMapperGetTargetsImpl(devPaths[i], &tmpPaths, ttl - 1) < 0)
-             goto cleanup;
- 
--        if (tmpPaths &&
--            virStringListMerge(&recursiveDevPaths, &tmpPaths) < 0) {
--            virStringListFree(tmpPaths);
-+        if (virStringListMerge(&devPaths, &tmpPaths) < 0)
-             goto cleanup;
--        }
-     }
- 
--    if (virStringListMerge(&devPaths, &recursiveDevPaths) < 0)
--        goto cleanup;
--
-     *devPaths_ret = g_steal_pointer(&devPaths);
-     ret = 0;
-  cleanup:
--    virStringListFree(recursiveDevPaths);
--    virStringListFree(devPaths);
-     dm_task_destroy(dmt);
-     return ret;
- }
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virDevMapperGetTargetsImpl-quit-early-if-device-is-not-a-devmapper-target.patch b/SOURCES/libvirt-virDevMapperGetTargetsImpl-quit-early-if-device-is-not-a-devmapper-target.patch
deleted file mode 100644
index c645ad1..0000000
--- a/SOURCES/libvirt-virDevMapperGetTargetsImpl-quit-early-if-device-is-not-a-devmapper-target.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 7ea7ef99b8d3f9a7d83ea12a843d786b182f24e3 Mon Sep 17 00:00:00 2001
-Message-Id: <7ea7ef99b8d3f9a7d83ea12a843d786b182f24e3@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 11 May 2020 16:56:48 +0200
-Subject: [PATCH] virDevMapperGetTargetsImpl: quit early if device is not a
- devmapper target
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-As suggested in the linked bug, libvirt should firstly check
-whether the major number of the device is device mapper major.
-Because if it isn't subsequent DM_DEVICE_DEPS task may not only
-fail, but also yield different results. In the bugzilla this is
-demonstrated by creating a devmapper target named 'loop0' and
-then creating loop target /dev/loop0. When the latter is then
-passed to a domain, our virDevMapperGetTargetsImpl() function
-blindly asks devmapper to provide target dependencies for
-/dev/loop0 and because of the way devmapper APIs work, it will
-'sanitize' the input by using the last component only which is
-'loop0' and thus return different results than expected.
-
-Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1823976
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 01626c668ecfbe465d18799ac4628e6127ea1d47)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1834353
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <bd8ec0d0b833b22d1117cdbdc3d39b7c3ba99fe6.1589208990.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virdevmapper.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index cc6a099faa..f000979ce0 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -66,6 +66,7 @@ virDevMapperGetTargetsImpl(const char *path,
-                            char ***devPaths_ret,
-                            unsigned int ttl)
- {
-+    struct stat sb;
-     struct dm_task *dmt = NULL;
-     struct dm_deps *deps;
-     struct dm_info info;
-@@ -84,6 +85,15 @@ virDevMapperGetTargetsImpl(const char *path,
-         return ret;
-     }
- 
-+    if (stat(path, &sb) < 0) {
-+        if (errno == ENOENT)
-+            return 0;
-+        return -1;
-+    }
-+
-+    if (!dm_is_dm_major(major(sb.st_dev)))
-+        return 0;
-+
-     if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) {
-         if (errno == ENOENT || errno == ENODEV) {
-             /* It's okay. Kernel is probably built without
--- 
-2.26.2
-
diff --git a/SOURCES/libvirt-virDomainCheckpointRedefinePrep-Set-current-checkpoint-if-there-isn-t-any.patch b/SOURCES/libvirt-virDomainCheckpointRedefinePrep-Set-current-checkpoint-if-there-isn-t-any.patch
deleted file mode 100644
index faded4a..0000000
--- a/SOURCES/libvirt-virDomainCheckpointRedefinePrep-Set-current-checkpoint-if-there-isn-t-any.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From da9c0f143d7c917c98b7352be7954e8b2489aa9e Mon Sep 17 00:00:00 2001
-Message-Id: <da9c0f143d7c917c98b7352be7954e8b2489aa9e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 3 Apr 2020 14:32:58 +0200
-Subject: [PATCH] virDomainCheckpointRedefinePrep: Set 'current' checkpoint if
- there isn't any
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When redefining checkpoints from scratch we'd not set the 'current'
-checkpoint if there wasn't any. This meant that the code wasn't ever
-able to set a 'current' checkpoint as any other one looks up if the
-parent of the redefined checkpoint is current.
-
-Since the backup code then requires the current checkpoint to start the
-lookup we'd not be able to perform a backup after restoring the
-checkpoint hierarchy.
-
-Reported-by: Eyal Shenitzky <eshenitz@redhat.com>
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 9428c4609c7b23b3afe89566dca9ac237256d3df)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1819755
-
-Message-Id: <53c1d685b40f0f540eeb4d15a17e308aab2bf648.1585916255.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/checkpoint_conf.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/conf/checkpoint_conf.c b/src/conf/checkpoint_conf.c
-index 26bcfc16b7..d557fada49 100644
---- a/src/conf/checkpoint_conf.c
-+++ b/src/conf/checkpoint_conf.c
-@@ -550,6 +550,10 @@ virDomainCheckpointRedefinePrep(virDomainObjPtr vm,
-             *update_current = true;
-     }
- 
-+    /* set the first redefined checkpoint as current */
-+    if (virDomainCheckpointGetCurrent(vm->checkpoints) == NULL)
-+        *update_current = true;
-+
-     other = virDomainCheckpointFindByName(vm->checkpoints, def->parent.name);
-     if (other) {
-         otherdef = virDomainCheckpointObjGetDef(other);
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-cleanup-label.patch b/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-cleanup-label.patch
deleted file mode 100644
index 46b4dbb..0000000
--- a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-cleanup-label.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From eaf5a1634e29eb3c4c3267b7724038049dacadc7 Mon Sep 17 00:00:00 2001
-Message-Id: <eaf5a1634e29eb3c4c3267b7724038049dacadc7@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:55 +0100
-Subject: [PATCH] virDomainDiskAddISCSIPoolSourceHost: Remove 'cleanup' label
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4d5093ef75efdf87a941ffd3fbc1d974e031a0a3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <da07ec7957e5c8f502c43bf0542a0d42ae1f62ee.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 12 ++++--------
- 1 file changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index f0365329c6..436d094578 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31173,7 +31173,6 @@ static int
- virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-                                     virStoragePoolDefPtr pooldef)
- {
--    int ret = -1;
-     VIR_AUTOSTRINGLIST tokens = NULL;
-     size_t ntokens;
- 
-@@ -31181,7 +31180,7 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-     if (pooldef->source.nhost != 1) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                        _("Expected exactly 1 host for the storage pool"));
--        goto cleanup;
-+        return -1;
-     }
- 
-     /* iscsi pool only supports one host */
-@@ -31195,13 +31194,13 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
- 
-     /* iscsi volume has name like "unit:0:0:1" */
-     if (!(tokens = virStringSplitCount(def->src->srcpool->volume, ":", 0, &ntokens)))
--        goto cleanup;
-+        return -1;
- 
-     if (ntokens != 4) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("unexpected iscsi volume name '%s'"),
-                        def->src->srcpool->volume);
--        goto cleanup;
-+        return -1;
-     }
- 
-     /* iscsi pool has only one source device path */
-@@ -31216,10 +31215,7 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
- 
-     def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
- 
--    ret = 0;
--
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-ternary-operator.patch b/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-ternary-operator.patch
deleted file mode 100644
index 8af602e..0000000
--- a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-ternary-operator.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 6502a0a52ec29cffc819254b71bea4f5b2fbd5ce Mon Sep 17 00:00:00 2001
-Message-Id: <6502a0a52ec29cffc819254b71bea4f5b2fbd5ce@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:56 +0100
-Subject: [PATCH] virDomainDiskAddISCSIPoolSourceHost: Remove ternary operator
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit e20c5b17037acca0cfffd983c0bcdd0ee5b7e628)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <bddaa981eda3b5145d460711aaf366f360fd155b.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 436d094578..89f1e44536 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31189,8 +31189,10 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
- 
-     def->src->hosts[0].name = g_strdup(pooldef->source.hosts[0].name);
- 
--    def->src->hosts[0].port = pooldef->source.hosts[0].port ?
--        pooldef->source.hosts[0].port : 3260;
-+    if (pooldef->source.hosts[0].port != 0)
-+        def->src->hosts[0].port = pooldef->source.hosts[0].port;
-+    else
-+        def->src->hosts[0].port = 3260;
- 
-     /* iscsi volume has name like "unit:0:0:1" */
-     if (!(tokens = virStringSplitCount(def->src->srcpool->volume, ":", 0, &ntokens)))
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Sanitize-handling-of-string-list.patch b/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Sanitize-handling-of-string-list.patch
deleted file mode 100644
index 4bb4e30..0000000
--- a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Sanitize-handling-of-string-list.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 39a1710d9a757391e6ecfdd5e1d5abd359e5a153 Mon Sep 17 00:00:00 2001
-Message-Id: <39a1710d9a757391e6ecfdd5e1d5abd359e5a153@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:53 +0100
-Subject: [PATCH] virDomainDiskAddISCSIPoolSourceHost: Sanitize handling of
- string list
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use virStringSplitCount instead of virStringSplit so that we can drop
-the call to virStringListLength and use VIR_AUTOSTRINGLIST to declare
-it and allow removal of the cleanup section.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c5b1c14379994369f5cb92bbb3da36d7d19150c2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <a763fc4d91f223a097e8b709e46c066d348a9e31.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 68d9ce9c4e..6973d97e1d 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31174,7 +31174,8 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-                                     virStoragePoolDefPtr pooldef)
- {
-     int ret = -1;
--    char **tokens = NULL;
-+    VIR_AUTOSTRINGLIST tokens = NULL;
-+    size_t ntokens;
- 
-     /* Only support one host */
-     if (pooldef->source.nhost != 1) {
-@@ -31195,10 +31196,10 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-         pooldef->source.hosts[0].port : 3260;
- 
-     /* iscsi volume has name like "unit:0:0:1" */
--    if (!(tokens = virStringSplit(def->src->srcpool->volume, ":", 0)))
-+    if (!(tokens = virStringSplitCount(def->src->srcpool->volume, ":", 0, &ntokens)))
-         goto cleanup;
- 
--    if (virStringListLength((const char * const *)tokens) != 4) {
-+    if (ntokens != 4) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("unexpected iscsi volume name '%s'"),
-                        def->src->srcpool->volume);
-@@ -31220,7 +31221,6 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-     ret = 0;
- 
-  cleanup:
--    virStringListFree(tokens);
-     return ret;
- }
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch b/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
deleted file mode 100644
index 68ea47c..0000000
--- a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 80b9f2b4c38eb0cb96e7ebb5d8b2c8ddaa5f7927 Mon Sep 17 00:00:00 2001
-Message-Id: <80b9f2b4c38eb0cb96e7ebb5d8b2c8ddaa5f7927@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:57 +0100
-Subject: [PATCH] virDomainDiskAddISCSIPoolSourceHost: Take virStorageSourcePtr
- instead of virDomainDiskDefPtr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Only 'def->src' was ever used in this function. Use the source directly.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 47cad725536b9108f23f351fe9836d0469a70fc7)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <7079c5546d76a24c458729e54f408bec39877a3e.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 28 ++++++++++++++--------------
- 1 file changed, 14 insertions(+), 14 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 89f1e44536..9cbc7b47e7 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31170,7 +31170,7 @@ virDomainNetResolveActualType(virDomainNetDefPtr iface)
- 
- 
- static int
--virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-+virDomainDiskAddISCSIPoolSourceHost(virStorageSourcePtr src,
-                                     virStoragePoolDefPtr pooldef)
- {
-     VIR_AUTOSTRINGLIST tokens = NULL;
-@@ -31184,38 +31184,38 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
-     }
- 
-     /* iscsi pool only supports one host */
--    def->src->nhosts = 1;
--    def->src->hosts = g_new0(virStorageNetHostDef, 1);
-+    src->nhosts = 1;
-+    src->hosts = g_new0(virStorageNetHostDef, 1);
- 
--    def->src->hosts[0].name = g_strdup(pooldef->source.hosts[0].name);
-+    src->hosts[0].name = g_strdup(pooldef->source.hosts[0].name);
- 
-     if (pooldef->source.hosts[0].port != 0)
--        def->src->hosts[0].port = pooldef->source.hosts[0].port;
-+        src->hosts[0].port = pooldef->source.hosts[0].port;
-     else
--        def->src->hosts[0].port = 3260;
-+        src->hosts[0].port = 3260;
- 
-     /* iscsi volume has name like "unit:0:0:1" */
--    if (!(tokens = virStringSplitCount(def->src->srcpool->volume, ":", 0, &ntokens)))
-+    if (!(tokens = virStringSplitCount(src->srcpool->volume, ":", 0, &ntokens)))
-         return -1;
- 
-     if (ntokens != 4) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("unexpected iscsi volume name '%s'"),
--                       def->src->srcpool->volume);
-+                       src->srcpool->volume);
-         return -1;
-     }
- 
-     /* iscsi pool has only one source device path */
--    def->src->path = g_strdup_printf("%s/%s", pooldef->source.devices[0].path,
--                                     tokens[3]);
-+    src->path = g_strdup_printf("%s/%s", pooldef->source.devices[0].path,
-+                                tokens[3]);
- 
-     /* Storage pool have not supported these 2 attributes yet,
-      * use the defaults.
-      */
--    def->src->hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
--    def->src->hosts[0].socket = NULL;
-+    src->hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
-+    src->hosts[0].socket = NULL;
- 
--    def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
-+    src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
- 
-     return 0;
- }
-@@ -31258,7 +31258,7 @@ virDomainDiskTranslateISCSIDirect(virDomainDiskDefPtr def,
-         def->src->auth->secrettype = g_strdup(secrettype);
-     }
- 
--    if (virDomainDiskAddISCSIPoolSourceHost(def, pooldef) < 0)
-+    if (virDomainDiskAddISCSIPoolSourceHost(def->src, pooldef) < 0)
-         return -1;
- 
-     if (!def->src->initiator.iqn && pooldef->source.initiator.iqn &&
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-use-g_new0-instead-of-VIR_ALLOC_N.patch b/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-use-g_new0-instead-of-VIR_ALLOC_N.patch
deleted file mode 100644
index a2ae705..0000000
--- a/SOURCES/libvirt-virDomainDiskAddISCSIPoolSourceHost-use-g_new0-instead-of-VIR_ALLOC_N.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 93e06ede9932c53518c7b3c9bff01449f52e2be3 Mon Sep 17 00:00:00 2001
-Message-Id: <93e06ede9932c53518c7b3c9bff01449f52e2be3@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:54 +0100
-Subject: [PATCH] virDomainDiskAddISCSIPoolSourceHost: use g_new0 instead of
- VIR_ALLOC_N
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5eda34f2e11f7ba4a26b0948dfa0fffa400dfadd)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <67e8bcdbcd5c9a22c75d6da6316a0d950664c2b8.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 6973d97e1d..f0365329c6 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31186,9 +31186,7 @@ virDomainDiskAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
- 
-     /* iscsi pool only supports one host */
-     def->src->nhosts = 1;
--
--    if (VIR_ALLOC_N(def->src->hosts, def->src->nhosts) < 0)
--        goto cleanup;
-+    def->src->hosts = g_new0(virStorageNetHostDef, 1);
- 
-     def->src->hosts[0].name = g_strdup(pooldef->source.hosts[0].name);
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskSourceNVMeFormat-Format-only-valid-managed-values.patch b/SOURCES/libvirt-virDomainDiskSourceNVMeFormat-Format-only-valid-managed-values.patch
deleted file mode 100644
index d7ae104..0000000
--- a/SOURCES/libvirt-virDomainDiskSourceNVMeFormat-Format-only-valid-managed-values.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 2eff64aa7a19da95b2f865a40010ab96f6e2e70e Mon Sep 17 00:00:00 2001
-Message-Id: <2eff64aa7a19da95b2f865a40010ab96f6e2e70e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 24 Mar 2020 16:25:57 +0100
-Subject: [PATCH] virDomainDiskSourceNVMeFormat: Format only valid 'managed'
- values
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-VIR_TRISTATE_BOOL_ABSENT which maps to the 'default' string would not be
-parsed back, so we shouldn't format it either.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit fac9a8b4c45bffbda28c20c99c84542a5e16cba5)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804617
-Message-Id: <562a24096551a25b6c06e33a9afa3fd10ab1598b.1585063415.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 1e8518139c..e3755fa285 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -24442,8 +24442,9 @@ virDomainDiskSourceNVMeFormat(virBufferPtr attrBuf,
-                               const virStorageSourceNVMeDef *nvme)
- {
-     virBufferAddLit(attrBuf, " type='pci'");
--    virBufferAsprintf(attrBuf, " managed='%s'",
--                      virTristateBoolTypeToString(nvme->managed));
-+    if (nvme->managed != VIR_TRISTATE_BOOL_ABSENT)
-+        virBufferAsprintf(attrBuf, " managed='%s'",
-+                          virTristateBoolTypeToString(nvme->managed));
-     virBufferAsprintf(attrBuf, " namespace='%llu'", nvme->namespc);
-     virPCIDeviceAddressFormat(childBuf, nvme->pciAddr, false);
- }
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-virDomainDiskTranslateISCSIDirect-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch b/SOURCES/libvirt-virDomainDiskTranslateISCSIDirect-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
deleted file mode 100644
index 6274246..0000000
--- a/SOURCES/libvirt-virDomainDiskTranslateISCSIDirect-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 452599b446bb9725e1b3b95d7733353b0d76c12f Mon Sep 17 00:00:00 2001
-Message-Id: <452599b446bb9725e1b3b95d7733353b0d76c12f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:59 +0100
-Subject: [PATCH] virDomainDiskTranslateISCSIDirect: Take virStorageSourcePtr
- instead of virDomainDiskDefPtr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Only 'def->src' was ever used in this function. Use the source directly.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit bc42d88ffdef84a823092bfb35cd6bce39747366)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <6a9c4a227bb1ea5564bfb03d076b080d879239b4.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 14b675d5d6..68dd640dc5 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31239,30 +31239,30 @@ virDomainDiskTranslateSourcePoolAuth(virStorageSourcePtr src,
- 
- 
- static int
--virDomainDiskTranslateISCSIDirect(virDomainDiskDefPtr def,
-+virDomainDiskTranslateISCSIDirect(virStorageSourcePtr src,
-                                   virStoragePoolDefPtr pooldef)
- {
--    def->src->srcpool->actualtype = VIR_STORAGE_TYPE_NETWORK;
--    def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
-+    src->srcpool->actualtype = VIR_STORAGE_TYPE_NETWORK;
-+    src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
- 
--    if (virDomainDiskTranslateSourcePoolAuth(def->src,
-+    if (virDomainDiskTranslateSourcePoolAuth(src,
-                                              &pooldef->source) < 0)
-         return -1;
- 
-     /* Source pool may not fill in the secrettype field,
-      * so we need to do so here
-      */
--    if (def->src->auth && !def->src->auth->secrettype) {
-+    if (src->auth && !src->auth->secrettype) {
-         const char *secrettype =
-             virSecretUsageTypeToString(VIR_SECRET_USAGE_TYPE_ISCSI);
--        def->src->auth->secrettype = g_strdup(secrettype);
-+        src->auth->secrettype = g_strdup(secrettype);
-     }
- 
--    if (virDomainDiskAddISCSIPoolSourceHost(def->src, pooldef) < 0)
-+    if (virDomainDiskAddISCSIPoolSourceHost(src, pooldef) < 0)
-         return -1;
- 
--    if (!def->src->initiator.iqn && pooldef->source.initiator.iqn &&
--        virStorageSourceInitiatorCopy(&def->src->initiator,
-+    if (!src->initiator.iqn && pooldef->source.initiator.iqn &&
-+        virStorageSourceInitiatorCopy(&src->initiator,
-                                       &pooldef->source.initiator) < 0) {
-         return -1;
-     }
-@@ -31387,7 +31387,7 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-             return -1;
-         }
- 
--        if (virDomainDiskTranslateISCSIDirect(def, pooldef) < 0)
-+        if (virDomainDiskTranslateISCSIDirect(def->src, pooldef) < 0)
-             return -1;
- 
-         break;
-@@ -31412,7 +31412,7 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-            break;
- 
-        case VIR_STORAGE_SOURCE_POOL_MODE_DIRECT:
--           if (virDomainDiskTranslateISCSIDirect(def, pooldef) < 0)
-+           if (virDomainDiskTranslateISCSIDirect(def->src, pooldef) < 0)
-                return -1;
-            break;
-        }
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskTranslateSourcePool-Check-for-disk-type-correctly.patch b/SOURCES/libvirt-virDomainDiskTranslateSourcePool-Check-for-disk-type-correctly.patch
deleted file mode 100644
index 2f8cc1d..0000000
--- a/SOURCES/libvirt-virDomainDiskTranslateSourcePool-Check-for-disk-type-correctly.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 92d99bea060e3d86a6e3b2fdd2df089362303536 Mon Sep 17 00:00:00 2001
-Message-Id: <92d99bea060e3d86a6e3b2fdd2df089362303536@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 10 Mar 2020 08:03:12 +0100
-Subject: [PATCH] virDomainDiskTranslateSourcePool: Check for disk type
- correctly
-
-When rewriting the virDomainDiskTranslateSourcePool() function in
-v6.1.0-rc1~184 a typo was introduced. Previously, we allowed
-startup policy only for those volumes which translated to
-VIR_STORAGE_TYPE_FILE. But starting with the referenced commit,
-the value we checked for was changed to VIR_STORAGE_VOL_FILE
-which comes from a different enum and has a different value too.
-This is wrong, because virStorageSourceGetActualType() returns a
-value from the original enum.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1811728
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 3918dbd84e4951b43f93fbf50ef52be00274850c)
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <ed47a6cb36e55e543ae4ed8cb9f55e1b100d7859.1583823787.git.mprivozn@redhat.com>
-Acked-by: Peter Krempa <pkrempa@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 3a370e6b90..77e3d25a2d 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31610,7 +31610,7 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-     }
- 
-     if (def->startupPolicy != 0 &&
--        virStorageSourceGetActualType(def->src) != VIR_STORAGE_VOL_FILE) {
-+        virStorageSourceGetActualType(def->src) != VIR_STORAGE_TYPE_FILE) {
-         virReportError(VIR_ERR_XML_ERROR, "%s",
-                        _("'startupPolicy' is only valid for "
-                          "'file' type volume"));
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virDomainDiskTranslateSourcePool-Translate-volume-disks-in-whole-backing-chain.patch b/SOURCES/libvirt-virDomainDiskTranslateSourcePool-Translate-volume-disks-in-whole-backing-chain.patch
deleted file mode 100644
index 971b023..0000000
--- a/SOURCES/libvirt-virDomainDiskTranslateSourcePool-Translate-volume-disks-in-whole-backing-chain.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 9b5f10282394b3f3e2a54791f51c3eb8d21c40ce Mon Sep 17 00:00:00 2001
-Message-Id: <9b5f10282394b3f3e2a54791f51c3eb8d21c40ce@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:01 +0100
-Subject: [PATCH] virDomainDiskTranslateSourcePool: Translate 'volume' disks in
- whole backing chain
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Now that we accept full backing chains on input nothing should prevent
-users from also using disk type 'VOLUME' for specifying the backing
-images.
-
-Do the translation for the whole backing chain.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 37f01262eed9f37dd5eb7de8b83edd2fea741054)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <68818efffb0a38e33237e0db9a2b370cef3b6eaa.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 20 +++++++++++---------
- 1 file changed, 11 insertions(+), 9 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index ecd00aa8fc..b46b92aecf 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31407,18 +31407,20 @@ int
- virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
- {
-     g_autoptr(virConnect) conn = NULL;
-+    virStorageSourcePtr n;
- 
--    if (def->src->type != VIR_STORAGE_TYPE_VOLUME)
--        return 0;
-+    for (n = def->src; virStorageSourceIsBacking(n); n = n->backingStore) {
-+        if (n->type != VIR_STORAGE_TYPE_VOLUME || !n->srcpool)
-+            continue;
- 
--    if (!def->src->srcpool)
--        return 0;
-+        if (!conn) {
-+            if (!(conn = virGetConnectStorage()))
-+                return -1;
-+        }
- 
--    if (!(conn = virGetConnectStorage()))
--        return -1;
--
--    if (virDomainStorageSourceTranslateSourcePool(def->src, conn) < 0)
--        return -1;
-+        if (virDomainStorageSourceTranslateSourcePool(n, conn) < 0)
-+            return -1;
-+    }
- 
-     if (def->startupPolicy != 0 &&
-         virStorageSourceGetActualType(def->src) != VIR_STORAGE_VOL_FILE) {
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskTranslateSourcePool-split-code-to-setup-one-storage-source.patch b/SOURCES/libvirt-virDomainDiskTranslateSourcePool-split-code-to-setup-one-storage-source.patch
deleted file mode 100644
index 0698684..0000000
--- a/SOURCES/libvirt-virDomainDiskTranslateSourcePool-split-code-to-setup-one-storage-source.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-From c6a7e638954bbcb8679966f31ce398d97fa1aca1 Mon Sep 17 00:00:00 2001
-Message-Id: <c6a7e638954bbcb8679966f31ce398d97fa1aca1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:00 +0100
-Subject: [PATCH] virDomainDiskTranslateSourcePool: split code to setup one
- storage source
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Extract all the code setting up one storage source from the rest which
-sets up the whole disk. This will allow us to prepare the whole backing
-chain.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 63469116cc83d6d83a45b741826b48562b03a65f)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <ed85da5fc3820ff9d272034b74cb03a63b35d9de.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 112 ++++++++++++++++++++---------------------
- 1 file changed, 55 insertions(+), 57 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 68dd640dc5..ecd00aa8fc 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31271,37 +31271,28 @@ virDomainDiskTranslateISCSIDirect(virStorageSourcePtr src,
- }
- 
- 
--int
--virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-+static int
-+virDomainStorageSourceTranslateSourcePool(virStorageSourcePtr src,
-+                                          virConnectPtr conn)
- {
-     virStorageVolInfo info;
-     g_autoptr(virStoragePoolDef) pooldef = NULL;
-     g_autofree char *poolxml = NULL;
--    g_autoptr(virConnect) conn = NULL;
-     g_autoptr(virStoragePool) pool = NULL;
-     g_autoptr(virStorageVol) vol = NULL;
- 
--    if (def->src->type != VIR_STORAGE_TYPE_VOLUME)
--        return 0;
--
--    if (!def->src->srcpool)
--        return 0;
--
--    if (!(conn = virGetConnectStorage()))
--        return -1;
--
--    if (!(pool = virStoragePoolLookupByName(conn, def->src->srcpool->pool)))
-+    if (!(pool = virStoragePoolLookupByName(conn, src->srcpool->pool)))
-         return -1;
- 
-     if (virStoragePoolIsActive(pool) != 1) {
-         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                        _("storage pool '%s' containing volume '%s' "
-                          "is not active"),
--                       def->src->srcpool->pool, def->src->srcpool->volume);
-+                       src->srcpool->pool, src->srcpool->volume);
-         return -1;
-     }
- 
--    if (!(vol = virStorageVolLookupByName(pool, def->src->srcpool->volume)))
-+    if (!(vol = virStorageVolLookupByName(pool, src->srcpool->volume)))
-         return -1;
- 
-     if (virStorageVolGetInfo(vol, &info) < 0)
-@@ -31313,22 +31304,22 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-     if (!(pooldef = virStoragePoolDefParseString(poolxml)))
-         return -1;
- 
--    def->src->srcpool->pooltype = pooldef->type;
--    def->src->srcpool->voltype = info.type;
-+    src->srcpool->pooltype = pooldef->type;
-+    src->srcpool->voltype = info.type;
- 
--    if (def->src->srcpool->mode && pooldef->type != VIR_STORAGE_POOL_ISCSI) {
-+    if (src->srcpool->mode && pooldef->type != VIR_STORAGE_POOL_ISCSI) {
-         virReportError(VIR_ERR_XML_ERROR, "%s",
-                        _("disk source mode is only valid when "
-                          "storage pool is of iscsi type"));
-         return -1;
-     }
- 
--    VIR_FREE(def->src->path);
--    virStorageNetHostDefFree(def->src->nhosts, def->src->hosts);
--    def->src->nhosts = 0;
--    def->src->hosts = NULL;
--    virStorageAuthDefFree(def->src->auth);
--    def->src->auth = NULL;
-+    VIR_FREE(src->path);
-+    virStorageNetHostDefFree(src->nhosts, src->hosts);
-+    src->nhosts = 0;
-+    src->hosts = NULL;
-+    virStorageAuthDefFree(src->auth);
-+    src->auth = NULL;
- 
-     switch ((virStoragePoolType) pooldef->type) {
-     case VIR_STORAGE_POOL_DIR:
-@@ -31339,32 +31330,24 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-     case VIR_STORAGE_POOL_SCSI:
-     case VIR_STORAGE_POOL_ZFS:
-     case VIR_STORAGE_POOL_VSTORAGE:
--        if (!(def->src->path = virStorageVolGetPath(vol)))
-+        if (!(src->path = virStorageVolGetPath(vol)))
-             return -1;
- 
--        if (def->startupPolicy && info.type != VIR_STORAGE_VOL_FILE) {
--            virReportError(VIR_ERR_XML_ERROR, "%s",
--                           _("'startupPolicy' is only valid for "
--                             "'file' type volume"));
--            return -1;
--        }
--
--
-         switch (info.type) {
-         case VIR_STORAGE_VOL_FILE:
--            def->src->srcpool->actualtype = VIR_STORAGE_TYPE_FILE;
-+            src->srcpool->actualtype = VIR_STORAGE_TYPE_FILE;
-             break;
- 
-         case VIR_STORAGE_VOL_DIR:
--            def->src->srcpool->actualtype = VIR_STORAGE_TYPE_DIR;
-+            src->srcpool->actualtype = VIR_STORAGE_TYPE_DIR;
-             break;
- 
-         case VIR_STORAGE_VOL_BLOCK:
--            def->src->srcpool->actualtype = VIR_STORAGE_TYPE_BLOCK;
-+            src->srcpool->actualtype = VIR_STORAGE_TYPE_BLOCK;
-             break;
- 
-         case VIR_STORAGE_VOL_PLOOP:
--            def->src->srcpool->actualtype = VIR_STORAGE_TYPE_FILE;
-+            src->srcpool->actualtype = VIR_STORAGE_TYPE_FILE;
-             break;
- 
-         case VIR_STORAGE_VOL_NETWORK:
-@@ -31380,39 +31363,25 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-         break;
- 
-     case VIR_STORAGE_POOL_ISCSI_DIRECT:
--        if (def->startupPolicy) {
--            virReportError(VIR_ERR_XML_ERROR, "%s",
--                           _("'startupPolicy' is only valid for "
--                             "'file' type volume"));
--            return -1;
--        }
--
--        if (virDomainDiskTranslateISCSIDirect(def->src, pooldef) < 0)
-+        if (virDomainDiskTranslateISCSIDirect(src, pooldef) < 0)
-             return -1;
- 
-         break;
- 
-     case VIR_STORAGE_POOL_ISCSI:
--        if (def->startupPolicy) {
--            virReportError(VIR_ERR_XML_ERROR, "%s",
--                           _("'startupPolicy' is only valid for "
--                             "'file' type volume"));
--            return -1;
--        }
--
--       switch (def->src->srcpool->mode) {
-+       switch (src->srcpool->mode) {
-        case VIR_STORAGE_SOURCE_POOL_MODE_DEFAULT:
-        case VIR_STORAGE_SOURCE_POOL_MODE_LAST:
--           def->src->srcpool->mode = VIR_STORAGE_SOURCE_POOL_MODE_HOST;
-+           src->srcpool->mode = VIR_STORAGE_SOURCE_POOL_MODE_HOST;
-            G_GNUC_FALLTHROUGH;
-        case VIR_STORAGE_SOURCE_POOL_MODE_HOST:
--           def->src->srcpool->actualtype = VIR_STORAGE_TYPE_BLOCK;
--           if (!(def->src->path = virStorageVolGetPath(vol)))
-+           src->srcpool->actualtype = VIR_STORAGE_TYPE_BLOCK;
-+           if (!(src->path = virStorageVolGetPath(vol)))
-                return -1;
-            break;
- 
-        case VIR_STORAGE_SOURCE_POOL_MODE_DIRECT:
--           if (virDomainDiskTranslateISCSIDirect(def->src, pooldef) < 0)
-+           if (virDomainDiskTranslateISCSIDirect(src, pooldef) < 0)
-                return -1;
-            break;
-        }
-@@ -31434,6 +31403,35 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
- }
- 
- 
-+int
-+virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
-+{
-+    g_autoptr(virConnect) conn = NULL;
-+
-+    if (def->src->type != VIR_STORAGE_TYPE_VOLUME)
-+        return 0;
-+
-+    if (!def->src->srcpool)
-+        return 0;
-+
-+    if (!(conn = virGetConnectStorage()))
-+        return -1;
-+
-+    if (virDomainStorageSourceTranslateSourcePool(def->src, conn) < 0)
-+        return -1;
-+
-+    if (def->startupPolicy != 0 &&
-+        virStorageSourceGetActualType(def->src) != VIR_STORAGE_VOL_FILE) {
-+        virReportError(VIR_ERR_XML_ERROR, "%s",
-+                       _("'startupPolicy' is only valid for "
-+                         "'file' type volume"));
-+        return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+
- /**
-  * virDomainDiskGetDetectZeroesMode:
-  * @discard: disk/image sector discard setting
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainDiskTranslateSourcePoolAuth-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch b/SOURCES/libvirt-virDomainDiskTranslateSourcePoolAuth-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
deleted file mode 100644
index 5f80d52..0000000
--- a/SOURCES/libvirt-virDomainDiskTranslateSourcePoolAuth-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From c44dbb2ca444be1d655d41bcd8df8eec89784f81 Mon Sep 17 00:00:00 2001
-Message-Id: <c44dbb2ca444be1d655d41bcd8df8eec89784f81@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:09:58 +0100
-Subject: [PATCH] virDomainDiskTranslateSourcePoolAuth: Take
- virStorageSourcePtr instead of virDomainDiskDefPtr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Only 'def->src' was ever used in this function. Use the source directly.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4fca8299c5d83378fc950f23bdf9fcca605a8251)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804603
-Message-Id: <66d9f9fe057c447d3b1fc5e93fce513b33242c05.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_conf.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 9cbc7b47e7..14b675d5d6 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -31222,18 +31222,18 @@ virDomainDiskAddISCSIPoolSourceHost(virStorageSourcePtr src,
- 
- 
- static int
--virDomainDiskTranslateSourcePoolAuth(virDomainDiskDefPtr def,
-+virDomainDiskTranslateSourcePoolAuth(virStorageSourcePtr src,
-                                      virStoragePoolSourcePtr source)
- {
-     /* Only necessary when authentication set */
-     if (!source->auth)
-         return 0;
- 
--    def->src->auth = virStorageAuthDefCopy(source->auth);
--    if (!def->src->auth)
-+    src->auth = virStorageAuthDefCopy(source->auth);
-+    if (!src->auth)
-         return -1;
-     /* A <disk> doesn't use <auth type='%s', so clear that out for the disk */
--    def->src->auth->authType = VIR_STORAGE_AUTH_TYPE_NONE;
-+    src->auth->authType = VIR_STORAGE_AUTH_TYPE_NONE;
-     return 0;
- }
- 
-@@ -31245,7 +31245,7 @@ virDomainDiskTranslateISCSIDirect(virDomainDiskDefPtr def,
-     def->src->srcpool->actualtype = VIR_STORAGE_TYPE_NETWORK;
-     def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
- 
--    if (virDomainDiskTranslateSourcePoolAuth(def,
-+    if (virDomainDiskTranslateSourcePoolAuth(def->src,
-                                              &pooldef->source) < 0)
-         return -1;
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virDomainFSDefFree-Unref-private-data.patch b/SOURCES/libvirt-virDomainFSDefFree-Unref-private-data.patch
deleted file mode 100644
index e5a6dc1..0000000
--- a/SOURCES/libvirt-virDomainFSDefFree-Unref-private-data.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 4fd89121cecafd23bb45c517d5b8ff90d9b40a8f Mon Sep 17 00:00:00 2001
-Message-Id: <4fd89121cecafd23bb45c517d5b8ff90d9b40a8f@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Wed, 4 Mar 2020 12:42:34 +0100
-Subject: [PATCH] virDomainFSDefFree: Unref private data
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The privateData object is allocated in virDomainFSDefNew() but
-never unref'd.
-
-==119642== 480 bytes in 20 blocks are definitely lost in loss record 656 of 671
-==119642==    at 0x4837B86: calloc (vg_replace_malloc.c:762)
-==119642==    by 0x57806A0: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.6000.7)
-==119642==    by 0x4AE7392: virAllocVar (viralloc.c:331)
-==119642==    by 0x4B64395: virObjectNew (virobject.c:241)
-==119642==    by 0x48F1464: qemuDomainFSPrivateNew (qemu_domain.c:1427)
-==119642==    by 0x4BBF004: virDomainFSDefNew (domain_conf.c:2307)
-==119642==    by 0x4BD859A: virDomainFSDefParseXML (domain_conf.c:11217)
-==119642==    by 0x4BF9DD1: virDomainDefParseXML (domain_conf.c:21179)
-==119642==    by 0x4BFCD5B: virDomainDefParseNode (domain_conf.c:21943)
-==119642==    by 0x4BFCC36: virDomainDefParse (domain_conf.c:21901)
-==119642==    by 0x4BFCCCB: virDomainDefParseFile (domain_conf.c:21924)
-==119642==    by 0x114A9D: testCompareXMLToArgv (qemuxml2argvtest.c:452)
-
-Fixes: 5120577ed79f89e172e3deed534fa9b585f4701f
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit d8b4f70e1e36772ef82dbe0f0706fa7845583e6c)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1694166
-Message-Id: <77519310a2e8c09b41bfcc0c8e37b1c2dcb35b5c.1583322090.git.jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
----
- src/conf/domain_conf.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 88117187c8..990c5bcc1e 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -2320,6 +2320,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def)
-     VIR_FREE(def->dst);
-     virDomainDeviceInfoClear(&def->info);
-     VIR_FREE(def->virtio);
-+    virObjectUnref(def->privateData);
- 
-     VIR_FREE(def);
- }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virDomainNetDefClear-Free-persistent-name.patch b/SOURCES/libvirt-virDomainNetDefClear-Free-persistent-name.patch
deleted file mode 100644
index 5b2f550..0000000
--- a/SOURCES/libvirt-virDomainNetDefClear-Free-persistent-name.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 97d7066d53be18a9638d28217e2a4216fa422a53 Mon Sep 17 00:00:00 2001
-Message-Id: <97d7066d53be18a9638d28217e2a4216fa422a53@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Fri, 21 Feb 2020 14:32:11 +0100
-Subject: [PATCH] virDomainNetDefClear: Free @persistent name
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The persistent alias name @persistent is allocated in
-virDomainNetDefParseXML() but never freed.
-
-==119642== 22 bytes in 2 blocks are definitely lost in loss record 178 of 671
-==119642==    at 0x483579F: malloc (vg_replace_malloc.c:309)
-==119642==    by 0x58F89F1: xmlStrndup (in /usr/lib64/libxml2.so.2.9.9)
-==119642==    by 0x4BA3B74: virXMLPropString (virxml.c:520)
-==119642==    by 0x4BDB0C5: virDomainNetDefParseXML (domain_conf.c:11876)
-==119642==    by 0x4BF9EF4: virDomainDefParseXML (domain_conf.c:21196)
-==119642==    by 0x4BFCD5B: virDomainDefParseNode (domain_conf.c:21943)
-==119642==    by 0x4BFCC36: virDomainDefParse (domain_conf.c:21901)
-==119642==    by 0x4BFCCCB: virDomainDefParseFile (domain_conf.c:21924)
-==119642==    by 0x114A9D: testCompareXMLToArgv (qemuxml2argvtest.c:452)
-==119642==    by 0x13894F: virTestRun (testutils.c:143)
-==119642==    by 0x11F46E: mymain (qemuxml2argvtest.c:1316)
-==119642==    by 0x13A60E: virTestMain (testutils.c:839
-
-Fixes: fb0509d06ac57434c2edbd81ee63deb32a0e598a
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2ab278ec758b09398ea335626a41b453cdda6da7)
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1805742
-Message-Id: <d64d26b106c91220bdcb95cd3dd90229fe449cd2.1582291906.git.jtomko@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/conf/domain_conf.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 5c11f49463..8a5f14d6cb 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -2439,6 +2439,7 @@ virDomainNetDefClear(virDomainNetDefPtr def)
- 
-     VIR_FREE(def->backend.tap);
-     VIR_FREE(def->backend.vhost);
-+    VIR_FREE(def->teaming.persistent);
-     VIR_FREE(def->virtPortProfile);
-     VIR_FREE(def->script);
-     VIR_FREE(def->domain_name);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virDomainNetFindIdx-add-support-for-CCW-addresses.patch b/SOURCES/libvirt-virDomainNetFindIdx-add-support-for-CCW-addresses.patch
deleted file mode 100644
index 44beadb..0000000
--- a/SOURCES/libvirt-virDomainNetFindIdx-add-support-for-CCW-addresses.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From 606da680fb4c7ee0f8a7ecc76057592433ea6ac9 Mon Sep 17 00:00:00 2001
-Message-Id: <606da680fb4c7ee0f8a7ecc76057592433ea6ac9@dist-git>
-From: Cornelia Huck <cohuck@redhat.com>
-Date: Fri, 2 Oct 2020 13:39:12 +0200
-Subject: [PATCH] virDomainNetFindIdx: add support for CCW addresses
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow to match with CCW addresses in addition to PCI addresses
-(and MAC addresses).
-
-Signed-off-by: Cornelia Huck <cohuck@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 2fefbd03ab09f32b1b15d093096fa44870817751)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1837495
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Message-Id: <a53fc421152b209c5a7fe69d4d5714a2f35077a8.1601638699.git.jtomko@redhat.com>
-Acked-by: Cornelia Huck <cohuck@redhat.com>
----
- src/conf/device_conf.c   | 12 ++++++++++++
- src/conf/device_conf.h   |  3 +++
- src/conf/domain_conf.c   | 23 ++++++++++++++++++++++-
- src/libvirt_private.syms |  1 +
- 4 files changed, 38 insertions(+), 1 deletion(-)
-
-diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
-index 4dbd5c1ac9..9e96d08394 100644
---- a/src/conf/device_conf.c
-+++ b/src/conf/device_conf.c
-@@ -370,6 +370,18 @@ virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
-     return ret;
- }
- 
-+bool
-+virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1,
-+                               virDomainDeviceCCWAddressPtr addr2)
-+{
-+    if (addr1->cssid == addr2->cssid &&
-+        addr1->ssid == addr2->ssid &&
-+        addr1->devno == addr2->devno) {
-+        return true;
-+    }
-+    return false;
-+}
-+
- int
- virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
-                                     virDomainDeviceDriveAddressPtr addr)
-diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h
-index e091d7cfe2..7a8227e743 100644
---- a/src/conf/device_conf.h
-+++ b/src/conf/device_conf.h
-@@ -208,6 +208,9 @@ void virPCIDeviceAddressFormat(virBufferPtr buf,
- bool virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr);
- int virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
-                                       virDomainDeviceCCWAddressPtr addr);
-+bool virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1,
-+                                    virDomainDeviceCCWAddressPtr addr2);
-+#define VIR_CCW_DEVICE_ADDRESS_FMT "%x.%x.%04x"
- 
- int virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
-                                         virDomainDeviceDriveAddressPtr addr);
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 60962ee7c1..306926b64c 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -17385,6 +17385,8 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
-     bool MACAddrSpecified = !net->mac_generated;
-     bool PCIAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
-                                                           VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI);
-+    bool CCWAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
-+                                                          VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW);
- 
-     for (i = 0; i < def->nnets; i++) {
-         if (MACAddrSpecified &&
-@@ -17396,9 +17398,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
-                                       &net->info.addr.pci))
-             continue;
- 
-+        if (CCWAddrSpecified &&
-+            !virDomainDeviceCCWAddressEqual(&def->nets[i]->info.addr.ccw,
-+                                            &net->info.addr.ccw))
-+            continue;
-+
-         if (matchidx >= 0) {
-             /* there were multiple matches on mac address, and no
--             * qualifying guest-side PCI address was given, so we must
-+             * qualifying guest-side PCI/CCW address was given, so we must
-              * fail (NB: a USB address isn't adequate, since it may
-              * specify only vendor and product ID, and there may be
-              * multiples of those.
-@@ -17428,6 +17435,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
-                            net->info.addr.pci.bus,
-                            net->info.addr.pci.slot,
-                            net->info.addr.pci.function);
-+        } else if (MACAddrSpecified && CCWAddrSpecified) {
-+            virReportError(VIR_ERR_DEVICE_MISSING,
-+                           _("no device matching MAC address %s found on "
-+                             VIR_CCW_DEVICE_ADDRESS_FMT),
-+                           virMacAddrFormat(&net->mac, mac),
-+                           net->info.addr.ccw.cssid,
-+                           net->info.addr.ccw.ssid,
-+                           net->info.addr.ccw.devno);
-         } else if (PCIAddrSpecified) {
-             virReportError(VIR_ERR_DEVICE_MISSING,
-                            _("no device found on " VIR_PCI_DEVICE_ADDRESS_FMT),
-@@ -17435,6 +17450,12 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
-                            net->info.addr.pci.bus,
-                            net->info.addr.pci.slot,
-                            net->info.addr.pci.function);
-+        } else if (CCWAddrSpecified) {
-+            virReportError(VIR_ERR_DEVICE_MISSING,
-+                           _("no device found on " VIR_CCW_DEVICE_ADDRESS_FMT),
-+                           net->info.addr.ccw.cssid,
-+                           net->info.addr.ccw.ssid,
-+                           net->info.addr.ccw.devno);
-         } else if (MACAddrSpecified) {
-             virReportError(VIR_ERR_DEVICE_MISSING,
-                            _("no device matching MAC address %s found"),
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index 9e290c7bdf..130828706a 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -128,6 +128,7 @@ virDeviceInfoPCIAddressIsWanted;
- virDomainDeviceAddressIsValid;
- virDomainDeviceAddressTypeToString;
- virDomainDeviceCcidAddressParseXML;
-+virDomainDeviceCCWAddressEqual;
- virDomainDeviceCCWAddressIsValid;
- virDomainDeviceCCWAddressParseXML;
- virDomainDeviceDriveAddressParseXML;
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virHashAddOrUpdateEntry-Simplify-allocation-of-new-entry.patch b/SOURCES/libvirt-virHashAddOrUpdateEntry-Simplify-allocation-of-new-entry.patch
deleted file mode 100644
index d3e1ca8..0000000
--- a/SOURCES/libvirt-virHashAddOrUpdateEntry-Simplify-allocation-of-new-entry.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From ca0f45dfc891bfb383e365376c6a2b4bb2ae3ba3 Mon Sep 17 00:00:00 2001
-Message-Id: <ca0f45dfc891bfb383e365376c6a2b4bb2ae3ba3@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:20 +0100
-Subject: [PATCH] virHashAddOrUpdateEntry: Simplify allocation of new entry
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use g_new0 and skip checking of the return value of keyCopy callback
-as both are bound to return a valid pointer.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 509ddcfde2af565a63ba193d41395aa99ea4744e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <3e351cf75e5514f54bd2e6dc799792248dfe1f82.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virhash.c | 9 ++-------
- 1 file changed, 2 insertions(+), 7 deletions(-)
-
-diff --git a/src/util/virhash.c b/src/util/virhash.c
-index c57d9f8292..36a2d312fc 100644
---- a/src/util/virhash.c
-+++ b/src/util/virhash.c
-@@ -344,7 +344,6 @@ virHashAddOrUpdateEntry(virHashTablePtr table, const void *name,
-     size_t key, len = 0;
-     virHashEntryPtr entry;
-     virHashEntryPtr last = NULL;
--    void *new_name;
- 
-     if ((table == NULL) || (name == NULL))
-         return -1;
-@@ -374,12 +373,8 @@ virHashAddOrUpdateEntry(virHashTablePtr table, const void *name,
-         len++;
-     }
- 
--    if (VIR_ALLOC(entry) < 0 || !(new_name = table->keyCopy(name))) {
--        VIR_FREE(entry);
--        return -1;
--    }
--
--    entry->name = new_name;
-+    entry = g_new0(virHashEntry, 1);
-+    entry->name = table->keyCopy(name);
-     entry->payload = userdata;
- 
-     if (last)
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virJSONValueNewArray-Use-g_new0-to-allocate-and-remove-NULL-checks-from-callers.patch b/SOURCES/libvirt-virJSONValueNewArray-Use-g_new0-to-allocate-and-remove-NULL-checks-from-callers.patch
deleted file mode 100644
index 3676fa0..0000000
--- a/SOURCES/libvirt-virJSONValueNewArray-Use-g_new0-to-allocate-and-remove-NULL-checks-from-callers.patch
+++ /dev/null
@@ -1,472 +0,0 @@
-From 500025205783acaa29d3c0e020ef8c6ce9579784 Mon Sep 17 00:00:00 2001
-Message-Id: <500025205783acaa29d3c0e020ef8c6ce9579784@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:18 +0100
-Subject: [PATCH] virJSONValueNewArray: Use g_new0 to allocate and remove NULL
- checks from callers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use the glib allocation function that never returns NULL and remove the
-now dead-code checks from all callers.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit d69470a18afa909a18f336e46a1817657b91635e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <1c666c563fe614b2c61bb47abb6d33dbcab91316.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/locking/lock_daemon.c        |  4 ++--
- src/logging/log_handler.c        |  3 +--
- src/network/leaseshelper.c       |  6 +-----
- src/qemu/qemu_agent.c            |  6 +-----
- src/qemu/qemu_backup.c           |  6 ++----
- src/qemu/qemu_block.c            |  9 +++------
- src/qemu/qemu_blockjob.c         |  3 +--
- src/qemu/qemu_checkpoint.c       |  9 +++------
- src/qemu/qemu_driver.c           |  3 +--
- src/qemu/qemu_firmware.c         | 12 ++++--------
- src/qemu/qemu_migration_params.c |  3 +--
- src/qemu/qemu_monitor_json.c     |  3 +--
- src/rpc/virnetserver.c           |  6 ++----
- src/rpc/virnetserverservice.c    |  3 +--
- src/util/virjson.c               | 13 ++-----------
- src/util/virlockspace.c          |  6 ++----
- src/util/virmacmap.c             |  8 ++++----
- tests/qemublocktest.c            |  3 +--
- tests/qemumonitorjsontest.c      |  5 ++---
- 19 files changed, 35 insertions(+), 76 deletions(-)
-
-diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
-index 65c38139c4..75e24eb2f6 100644
---- a/src/locking/lock_daemon.c
-+++ b/src/locking/lock_daemon.c
-@@ -949,8 +949,8 @@ virLockDaemonPreExecRestart(const char *state_file,
-         goto cleanup;
-     }
- 
--    if (!(lockspaces = virJSONValueNewArray()))
--        goto cleanup;
-+    lockspaces = virJSONValueNewArray();
-+
-     if (virJSONValueObjectAppend(object, "lockspaces", lockspaces) < 0) {
-         virJSONValueFree(lockspaces);
-         goto cleanup;
-diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c
-index 030c9d66e3..973c52c7cd 100644
---- a/src/logging/log_handler.c
-+++ b/src/logging/log_handler.c
-@@ -619,8 +619,7 @@ virLogHandlerPreExecRestart(virLogHandlerPtr handler)
-     if (!ret)
-         return NULL;
- 
--    if (!(files = virJSONValueNewArray()))
--        goto error;
-+    files = virJSONValueNewArray();
- 
-     if (virJSONValueObjectAppend(ret, "files", files) < 0) {
-         virJSONValueFree(files);
-diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
-index f1a061066e..dd1d5f70ee 100644
---- a/src/network/leaseshelper.c
-+++ b/src/network/leaseshelper.c
-@@ -200,11 +200,7 @@ main(int argc, char **argv)
-         break;
-     }
- 
--    if (!(leases_array_new = virJSONValueNewArray())) {
--        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
--                       _("failed to create json"));
--        goto cleanup;
--    }
-+    leases_array_new = virJSONValueNewArray();
- 
-     if (virLeaseReadCustomLeaseFile(leases_array_new, custom_lease_file,
-                                     delete ? ip : NULL, &server_duid) < 0)
-diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
-index 5fa8d24a91..f759785050 100644
---- a/src/qemu/qemu_agent.c
-+++ b/src/qemu/qemu_agent.c
-@@ -1203,9 +1203,6 @@ qemuAgentMakeStringsArray(const char **strings, unsigned int len)
-     size_t i;
-     virJSONValuePtr ret = virJSONValueNewArray(), str;
- 
--    if (!ret)
--        return NULL;
--
-     for (i = 0; i < len; i++) {
-         str = virJSONValueNewString(strings[i]);
-         if (!str)
-@@ -1536,8 +1533,7 @@ qemuAgentSetVCPUsCommand(qemuAgentPtr mon,
-     *nmodified = 0;
- 
-     /* create the key data array */
--    if (!(cpus = virJSONValueNewArray()))
--        goto cleanup;
-+    cpus = virJSONValueNewArray();
- 
-     for (i = 0; i < ninfo; i++) {
-         qemuAgentCPUInfoPtr in = &info[i];
-diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
-index 8b1e9a7e19..2cc6ff7a42 100644
---- a/src/qemu/qemu_backup.c
-+++ b/src/qemu/qemu_backup.c
-@@ -180,8 +180,7 @@ qemuBackupDiskPrepareOneBitmapsChain(virDomainMomentDefPtr *incremental,
-     g_autoptr(virJSONValue) ret = NULL;
-     size_t incridx = 0;
- 
--    if (!(ret = virJSONValueNewArray()))
--        return NULL;
-+    ret = virJSONValueNewArray();
- 
-     if (!(bitmap = qemuBlockNamedNodeDataGetBitmapByName(blockNamedNodeData,
-                                                          backingChain,
-@@ -819,8 +818,7 @@ qemuBackupBegin(virDomainObjPtr vm,
-         !(incremental = qemuBackupBeginCollectIncrementalCheckpoints(vm, def->incremental)))
-         goto endjob;
- 
--    if (!(actions = virJSONValueNewArray()))
--        goto endjob;
-+    actions = virJSONValueNewArray();
- 
-     /* The 'chk' checkpoint must be rolled back if the transaction command
-      * which creates it on disk is not executed or fails */
-diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
-index 13e240fdac..03f029368e 100644
---- a/src/qemu/qemu_block.c
-+++ b/src/qemu/qemu_block.c
-@@ -524,8 +524,7 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src,
-     virStorageNetHostDefPtr host;
-     size_t i;
- 
--    if (!(servers = virJSONValueNewArray()))
--        return NULL;
-+    servers = virJSONValueNewArray();
- 
-     for (i = 0; i < src->nhosts; i++) {
-         host = src->hosts + i;
-@@ -590,8 +589,7 @@ qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(virStorageSourcePtr src)
-     virStorageNetHostDefPtr host;
-     size_t i;
- 
--    if (!(servers = virJSONValueNewArray()))
--        return NULL;
-+    servers = virJSONValueNewArray();
- 
-     for (i = 0; i < src->nhosts; i++) {
-         host = src->hosts + i;
-@@ -837,8 +835,7 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src,
-         username = srcPriv->secinfo->s.aes.username;
-         keysecret = srcPriv->secinfo->s.aes.alias;
-         /* the auth modes are modelled after our old command line generator */
--        if (!(authmodes = virJSONValueNewArray()))
--            return NULL;
-+        authmodes = virJSONValueNewArray();
- 
-         if (!(mode = virJSONValueNewString("cephx")) ||
-             virJSONValueArrayAppend(authmodes, mode) < 0)
-diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
-index e04fcf69d1..3dc9222a6f 100644
---- a/src/qemu/qemu_blockjob.c
-+++ b/src/qemu/qemu_blockjob.c
-@@ -1344,8 +1344,7 @@ qemuBlockJobProcessEventConcludedBackup(virQEMUDriverPtr driver,
-         return;
- 
-     if (job->data.backup.bitmap) {
--        if (!(actions = virJSONValueNewArray()))
--            return;
-+        actions = virJSONValueNewArray();
- 
-         if (qemuMonitorTransactionBitmapRemove(actions,
-                                                job->disk->src->nodeformat,
-diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
-index 59b7f63fdc..c06bfe6a21 100644
---- a/src/qemu/qemu_checkpoint.c
-+++ b/src/qemu/qemu_checkpoint.c
-@@ -217,8 +217,7 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSourcePtr src,
-                     return -1;
-             }
- 
--            if (!(arr = virJSONValueNewArray()))
--                return -1;
-+            arr = virJSONValueNewArray();
- 
-             if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(arr,
-                                                                  n->nodeformat,
-@@ -261,8 +260,7 @@ qemuCheckpointDiscardBitmaps(virDomainObjPtr vm,
-     g_autoptr(GSList) relabelimages = NULL;
-     GSList *next;
- 
--    if (!(actions = virJSONValueNewArray()))
--        return -1;
-+    actions = virJSONValueNewArray();
- 
-     qemuDomainObjEnterMonitor(driver, vm);
-     blockNamedNodeData = qemuMonitorBlockGetNamedNodeData(priv->mon);
-@@ -535,8 +533,7 @@ qemuCheckpointCreateCommon(virQEMUDriverPtr driver,
-     if ((parent = virDomainCheckpointGetCurrent(vm->checkpoints)))
-         (*def)->parent.parent_name = g_strdup(parent->def->name);
- 
--    if (!(tmpactions = virJSONValueNewArray()))
--        return -1;
-+    tmpactions = virJSONValueNewArray();
- 
-     if (qemuCheckpointAddActions(vm, tmpactions, parent, *def) < 0)
-         return -1;
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index f7ad2dca28..0667402ebb 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -15619,8 +15619,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
-     if (virDomainObjCheckActive(vm) < 0)
-         return -1;
- 
--    if (!(actions = virJSONValueNewArray()))
--        return -1;
-+    actions = virJSONValueNewArray();
- 
-     if (blockdev &&
-         !(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, asyncJob)))
-diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
-index 7fb57913e8..68e2c6b40f 100644
---- a/src/qemu/qemu_firmware.c
-+++ b/src/qemu/qemu_firmware.c
-@@ -651,8 +651,7 @@ qemuFirmwareInterfaceFormat(virJSONValuePtr doc,
-     g_autoptr(virJSONValue) interfacesJSON = NULL;
-     size_t i;
- 
--    if (!(interfacesJSON = virJSONValueNewArray()))
--        return -1;
-+    interfacesJSON = virJSONValueNewArray();
- 
-     for (i = 0; i < fw->ninterfaces; i++) {
-         if (virJSONValueArrayAppendString(interfacesJSON,
-@@ -799,8 +798,7 @@ qemuFirmwareTargetFormat(virJSONValuePtr doc,
-     g_autoptr(virJSONValue) targetsJSON = NULL;
-     size_t i;
- 
--    if (!(targetsJSON = virJSONValueNewArray()))
--        return -1;
-+    targetsJSON = virJSONValueNewArray();
- 
-     for (i = 0; i < fw->ntargets; i++) {
-         qemuFirmwareTargetPtr t = fw->targets[i];
-@@ -816,8 +814,7 @@ qemuFirmwareTargetFormat(virJSONValuePtr doc,
-                                            virQEMUCapsArchToString(t->architecture)) < 0)
-             return -1;
- 
--        if (!(machines = virJSONValueNewArray()))
--            return -1;
-+        machines = virJSONValueNewArray();
- 
-         for (j = 0; j < t->nmachines; j++) {
-             if (virJSONValueArrayAppendString(machines,
-@@ -851,8 +848,7 @@ qemuFirmwareFeatureFormat(virJSONValuePtr doc,
-     g_autoptr(virJSONValue) featuresJSON = NULL;
-     size_t i;
- 
--    if (!(featuresJSON = virJSONValueNewArray()))
--        return -1;
-+    featuresJSON = virJSONValueNewArray();
- 
-     for (i = 0; i < fw->nfeatures; i++) {
-         if (virJSONValueArrayAppendString(featuresJSON,
-diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
-index 9430ce1d00..45acf8cda2 100644
---- a/src/qemu/qemu_migration_params.c
-+++ b/src/qemu/qemu_migration_params.c
-@@ -785,8 +785,7 @@ qemuMigrationCapsToJSON(virBitmapPtr caps,
-     qemuMigrationCapability bit;
-     const char *name;
- 
--    if (!(json = virJSONValueNewArray()))
--        return NULL;
-+    json = virJSONValueNewArray();
- 
-     for (bit = 0; bit < QEMU_MIGRATION_CAP_LAST; bit++) {
-         bool supported = false;
-diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
-index 3fc0bcb80c..8cd98dbf26 100644
---- a/src/qemu/qemu_monitor_json.c
-+++ b/src/qemu/qemu_monitor_json.c
-@@ -4802,8 +4802,7 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon,
-     size_t i;
- 
-     /* create the key data array */
--    if (!(keys = virJSONValueNewArray()))
--        goto cleanup;
-+    keys = virJSONValueNewArray();
- 
-     for (i = 0; i < nkeycodes; i++) {
-         if (keycodes[i] > 0xffff) {
-diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
-index 4122636805..c87dade1a8 100644
---- a/src/rpc/virnetserver.c
-+++ b/src/rpc/virnetserver.c
-@@ -603,8 +603,7 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
-         goto error;
-     }
- 
--    if (!(services = virJSONValueNewArray()))
--        goto error;
-+    services = virJSONValueNewArray();
- 
-     if (virJSONValueObjectAppend(object, "services", services) < 0) {
-         virJSONValueFree(services);
-@@ -622,8 +621,7 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
-         }
-     }
- 
--    if (!(clients = virJSONValueNewArray()))
--        goto error;
-+    clients = virJSONValueNewArray();
- 
-     if (virJSONValueObjectAppend(object, "clients", clients) < 0) {
-         virJSONValueFree(clients);
-diff --git a/src/rpc/virnetserverservice.c b/src/rpc/virnetserverservice.c
-index 5d1178f899..0a003e5814 100644
---- a/src/rpc/virnetserverservice.c
-+++ b/src/rpc/virnetserverservice.c
-@@ -353,8 +353,7 @@ virJSONValuePtr virNetServerServicePreExecRestart(virNetServerServicePtr svc)
-     if (virJSONValueObjectAppendNumberUint(object, "nrequests_client_max", svc->nrequests_client_max) < 0)
-         goto error;
- 
--    if (!(socks = virJSONValueNewArray()))
--        goto error;
-+    socks = virJSONValueNewArray();
- 
-     if (virJSONValueObjectAppend(object, "socks", socks) < 0) {
-         virJSONValueFree(socks);
-diff --git a/src/util/virjson.c b/src/util/virjson.c
-index 50993648eb..ca57df816f 100644
---- a/src/util/virjson.c
-+++ b/src/util/virjson.c
-@@ -561,10 +561,7 @@ virJSONValueNewNull(void)
- virJSONValuePtr
- virJSONValueNewArray(void)
- {
--    virJSONValuePtr val;
--
--    if (VIR_ALLOC(val) < 0)
--        return NULL;
-+    virJSONValuePtr val = g_new0(virJSONValue, 1);
- 
-     val->type = VIR_JSON_TYPE_ARRAY;
- 
-@@ -1265,8 +1262,7 @@ virJSONValueNewArrayFromBitmap(virBitmapPtr bitmap)
-     virJSONValuePtr ret;
-     ssize_t pos = -1;
- 
--    if (!(ret = virJSONValueNewArray()))
--        return NULL;
-+    ret = virJSONValueNewArray();
- 
-     if (!bitmap)
-         return ret;
-@@ -1522,8 +1518,6 @@ virJSONValueCopy(const virJSONValue *in)
-         break;
-     case VIR_JSON_TYPE_ARRAY:
-         out = virJSONValueNewArray();
--        if (!out)
--            return NULL;
-         for (i = 0; i < in->data.array.nvalues; i++) {
-             virJSONValuePtr val = NULL;
-             if (!(val = virJSONValueCopy(in->data.array.values[i])))
-@@ -1782,9 +1776,6 @@ virJSONParserHandleStartArray(void *ctx)
- 
-     VIR_DEBUG("parser=%p", parser);
- 
--    if (!value)
--        return 0;
--
-     if (virJSONParserInsertValue(parser, value) < 0) {
-         virJSONValueFree(value);
-         return 0;
-diff --git a/src/util/virlockspace.c b/src/util/virlockspace.c
-index 59d47daae8..a44377f89e 100644
---- a/src/util/virlockspace.c
-+++ b/src/util/virlockspace.c
-@@ -443,8 +443,7 @@ virJSONValuePtr virLockSpacePreExecRestart(virLockSpacePtr lockspace)
-         virJSONValueObjectAppendString(object, "directory", lockspace->dir) < 0)
-         goto error;
- 
--    if (!(resources = virJSONValueNewArray()))
--        goto error;
-+    resources = virJSONValueNewArray();
- 
-     if (virJSONValueObjectAppend(object, "resources", resources) < 0) {
-         virJSONValueFree(resources);
-@@ -479,8 +478,7 @@ virJSONValuePtr virLockSpacePreExecRestart(virLockSpacePtr lockspace)
-             goto error;
-         }
- 
--        if (!(owners = virJSONValueNewArray()))
--            goto error;
-+        owners = virJSONValueNewArray();
- 
-         if (virJSONValueObjectAppend(child, "owners", owners) < 0) {
-             virJSONValueFree(owners);
-diff --git a/src/util/virmacmap.c b/src/util/virmacmap.c
-index cd74f67678..ec589334ea 100644
---- a/src/util/virmacmap.c
-+++ b/src/util/virmacmap.c
-@@ -206,10 +206,11 @@ virMACMapHashDumper(void *payload,
-     size_t i;
-     int ret = -1;
- 
--    if (!(obj = virJSONValueNewObject()) ||
--        !(arr = virJSONValueNewArray()))
-+    if (!(obj = virJSONValueNewObject()))
-         goto cleanup;
- 
-+    arr = virJSONValueNewArray();
-+
-     for (i = 0; macs[i]; i++) {
-         virJSONValuePtr m = virJSONValueNewString(macs[i]);
- 
-@@ -244,8 +245,7 @@ virMacMapDumpStrLocked(virMacMapPtr mgr,
-     virJSONValuePtr arr;
-     int ret = -1;
- 
--    if (!(arr = virJSONValueNewArray()))
--        goto cleanup;
-+    arr = virJSONValueNewArray();
- 
-     if (virHashForEach(mgr->macs, virMACMapHashDumper, arr) < 0)
-         goto cleanup;
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index ed8b061e2e..5946cd6c6b 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -733,8 +733,7 @@ testQemuCheckpointDeleteMerge(const void *opaque)
-         return -1;
-     }
- 
--    if (!(actions = virJSONValueNewArray()))
--        return -1;
-+    actions = virJSONValueNewArray();
- 
-     if (qemuCheckpointDiscardDiskBitmaps(data->chain,
-                                          nodedata,
-diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
-index 0334f83628..2c696a2e8b 100644
---- a/tests/qemumonitorjsontest.c
-+++ b/tests/qemumonitorjsontest.c
-@@ -2948,9 +2948,8 @@ testQemuMonitorJSONTransaction(const void *opaque)
-     if (!(test = qemuMonitorTestNewSchema(data->xmlopt, data->schema)))
-         return -1;
- 
--    if (!(actions = virJSONValueNewArray()) ||
--        !(mergebitmaps = virJSONValueNewArray()))
--        return -1;
-+    actions = virJSONValueNewArray();
-+    mergebitmaps = virJSONValueNewArray();
- 
-     if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(mergebitmaps, "node1", "bitmap1") < 0 ||
-         qemuMonitorTransactionBitmapMergeSourceAddBitmap(mergebitmaps, "node2", "bitmap2") < 0)
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virSecretLookupDefCopy-Remove-return-value.patch b/SOURCES/libvirt-virSecretLookupDefCopy-Remove-return-value.patch
deleted file mode 100644
index d853a55..0000000
--- a/SOURCES/libvirt-virSecretLookupDefCopy-Remove-return-value.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From c671c037d06c761708374dba1b7e4ed4041fe9fb Mon Sep 17 00:00:00 2001
-Message-Id: <c671c037d06c761708374dba1b7e4ed4041fe9fb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 20 Mar 2020 10:28:51 +0100
-Subject: [PATCH] virSecretLookupDefCopy: Remove return value
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function always returns succes so there's no need for a return
-value.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 02f909b8a6ad8c271693fed9ceab606f0dda2294)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1814923
-Message-Id: <a2f47ac4171ea9eaf3fbee12f22670ff10a1b98c.1584696274.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virsecret.c      | 3 +--
- src/util/virsecret.h      | 4 ++--
- src/util/virstoragefile.c | 3 +--
- 3 files changed, 4 insertions(+), 6 deletions(-)
-
-diff --git a/src/util/virsecret.c b/src/util/virsecret.c
-index 174ce544c0..167ad24fdf 100644
---- a/src/util/virsecret.c
-+++ b/src/util/virsecret.c
-@@ -47,7 +47,7 @@ virSecretLookupDefClear(virSecretLookupTypeDefPtr def)
- }
- 
- 
--int
-+void
- virSecretLookupDefCopy(virSecretLookupTypeDefPtr dst,
-                        const virSecretLookupTypeDef *src)
- {
-@@ -57,7 +57,6 @@ virSecretLookupDefCopy(virSecretLookupTypeDefPtr dst,
-     } else if (dst->type == VIR_SECRET_LOOKUP_TYPE_USAGE) {
-         dst->u.usage = g_strdup(src->u.usage);
-     }
--    return 0;
- }
- 
- 
-diff --git a/src/util/virsecret.h b/src/util/virsecret.h
-index 8bc8a24e0f..780b5761f4 100644
---- a/src/util/virsecret.h
-+++ b/src/util/virsecret.h
-@@ -49,8 +49,8 @@ struct _virSecretLookupTypeDef {
- };
- 
- void virSecretLookupDefClear(virSecretLookupTypeDefPtr def);
--int virSecretLookupDefCopy(virSecretLookupTypeDefPtr dst,
--                           const virSecretLookupTypeDef *src);
-+void virSecretLookupDefCopy(virSecretLookupTypeDefPtr dst,
-+                            const virSecretLookupTypeDef *src);
- int virSecretLookupParseSecret(xmlNodePtr secretnode,
-                                virSecretLookupTypeDefPtr def);
- void virSecretLookupFormatSecret(virBufferPtr buf,
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index ce126f5cba..fa37840532 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -1792,8 +1792,7 @@ virStorageAuthDefCopy(const virStorageAuthDef *src)
-     authdef->secrettype = g_strdup(src->secrettype);
-     authdef->authType = src->authType;
- 
--    if (virSecretLookupDefCopy(&authdef->seclookupdef, &src->seclookupdef) < 0)
--        return NULL;
-+    virSecretLookupDefCopy(&authdef->seclookupdef, &src->seclookupdef);
- 
-     return g_steal_pointer(&authdef);
- }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virSecurityManagerMetadataLock-Store-locked-paths.patch b/SOURCES/libvirt-virSecurityManagerMetadataLock-Store-locked-paths.patch
deleted file mode 100644
index 9a7d0ca..0000000
--- a/SOURCES/libvirt-virSecurityManagerMetadataLock-Store-locked-paths.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 157a222a2001e3d5df4851ea3f43a00873f82be1 Mon Sep 17 00:00:00 2001
-Message-Id: <157a222a2001e3d5df4851ea3f43a00873f82be1@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 25 Feb 2020 11:24:50 +0100
-Subject: [PATCH] virSecurityManagerMetadataLock: Store locked paths
-
-So far, in the lock state we are storing only the file
-descriptors of the files we've locked. Therefore, when unlocking
-them and something does wrong the only thing we can report is FD
-number, which is not user friendly at all. But if we store paths
-among with FDs we can do better error reporting.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-(cherry picked from commit 256e01e59e922ff70dce56284e53e3463d4dc072)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1804672
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <8b12c9adde3c8553b4a2b588ac1a657d0638336b.1582626185.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/security/security_manager.c | 21 +++++++++++++++------
- 1 file changed, 15 insertions(+), 6 deletions(-)
-
-diff --git a/src/security/security_manager.c b/src/security/security_manager.c
-index f229d94570..05d20e36af 100644
---- a/src/security/security_manager.c
-+++ b/src/security/security_manager.c
-@@ -1246,8 +1246,9 @@ virSecurityManagerRestoreTPMLabels(virSecurityManagerPtr mgr,
- 
- 
- struct _virSecurityManagerMetadataLockState {
--    size_t nfds;
-+    size_t nfds; /* Captures size of both @fds and @paths */
-     int *fds;
-+    const char **paths;
- };
- 
- 
-@@ -1278,6 +1279,7 @@ cmpstringp(const void *p1, const void *p2)
-  *
-  * Lock passed @paths for metadata change. The returned state
-  * should be passed to virSecurityManagerMetadataUnlock.
-+ * Passed @paths must not be freed until the corresponding unlock call.
-  *
-  * NOTE: this function is not thread safe (because of usage of
-  * POSIX locks).
-@@ -1293,9 +1295,11 @@ virSecurityManagerMetadataLock(virSecurityManagerPtr mgr G_GNUC_UNUSED,
-     size_t i = 0;
-     size_t nfds = 0;
-     int *fds = NULL;
-+    const char **locked_paths = NULL;
-     virSecurityManagerMetadataLockStatePtr ret = NULL;
- 
--    if (VIR_ALLOC_N(fds, npaths) < 0)
-+    if (VIR_ALLOC_N(fds, npaths) < 0 ||
-+        VIR_ALLOC_N(locked_paths, npaths) < 0)
-         return NULL;
- 
-     /* Sort paths to lock in order to avoid deadlocks with other
-@@ -1372,12 +1376,14 @@ virSecurityManagerMetadataLock(virSecurityManagerPtr mgr G_GNUC_UNUSED,
-             break;
-         } while (1);
- 
-+        locked_paths[nfds] = p;
-         VIR_APPEND_ELEMENT_COPY_INPLACE(fds, nfds, fd);
-     }
- 
-     if (VIR_ALLOC(ret) < 0)
-         goto cleanup;
- 
-+    ret->paths = g_steal_pointer(&locked_paths);
-     ret->fds = g_steal_pointer(&fds);
-     ret->nfds = nfds;
-     nfds = 0;
-@@ -1386,6 +1392,7 @@ virSecurityManagerMetadataLock(virSecurityManagerPtr mgr G_GNUC_UNUSED,
-     for (i = nfds; i > 0; i--)
-         VIR_FORCE_CLOSE(fds[i - 1]);
-     VIR_FREE(fds);
-+    VIR_FREE(locked_paths);
-     return ret;
- }
- 
-@@ -1401,21 +1408,23 @@ virSecurityManagerMetadataUnlock(virSecurityManagerPtr mgr G_GNUC_UNUSED,
- 
-     for (i = 0; i < (*state)->nfds; i++) {
-         char ebuf[1024];
-+        const char *path = (*state)->paths[i];
-         int fd = (*state)->fds[i];
- 
-         /* Technically, unlock is not needed because it will
-          * happen on VIR_CLOSE() anyway. But let's play it nice. */
-         if (virFileUnlock(fd, METADATA_OFFSET, METADATA_LEN) < 0) {
--            VIR_WARN("Unable to unlock fd %d: %s",
--                     fd, virStrerror(errno, ebuf, sizeof(ebuf)));
-+            VIR_WARN("Unable to unlock fd %d path %s: %s",
-+                     fd, path, virStrerror(errno, ebuf, sizeof(ebuf)));
-         }
- 
-         if (VIR_CLOSE(fd) < 0) {
--            VIR_WARN("Unable to close fd %d: %s",
--                     fd, virStrerror(errno, ebuf, sizeof(ebuf)));
-+            VIR_WARN("Unable to close fd %d path %s: %s",
-+                     fd, path, virStrerror(errno, ebuf, sizeof(ebuf)));
-         }
-     }
- 
-     VIR_FREE((*state)->fds);
-+    VIR_FREE((*state)->paths);
-     VIR_FREE(*state);
- }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageBackendGlusterRefreshVol-Refactor-handling-of-backing-store.patch b/SOURCES/libvirt-virStorageBackendGlusterRefreshVol-Refactor-handling-of-backing-store.patch
deleted file mode 100644
index c7125d5..0000000
--- a/SOURCES/libvirt-virStorageBackendGlusterRefreshVol-Refactor-handling-of-backing-store.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 315706837bdb6f11c0bb4b48612d35afa1965454 Mon Sep 17 00:00:00 2001
-Message-Id: <315706837bdb6f11c0bb4b48612d35afa1965454@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:39 +0100
-Subject: [PATCH] virStorageBackendGlusterRefreshVol: Refactor handling of
- backing store
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Take the format of the backing store from the 'meta' object directly and
-use g_steal_pointer to steal the path.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit fee56942e2dacc64ed4b36aa2ea887f60c117659)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <8bf19c252bd0a49ef7e689c809314345d7831735.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/storage/storage_backend_gluster.c | 11 ++++-------
- 1 file changed, 4 insertions(+), 7 deletions(-)
-
-diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c
-index 4a8ee3870d..e92e9612bd 100644
---- a/src/storage/storage_backend_gluster.c
-+++ b/src/storage/storage_backend_gluster.c
-@@ -224,7 +224,6 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
-     int ret = -1;
-     glfs_fd_t *fd = NULL;
-     ssize_t len;
--    int backingFormat;
-     g_autoptr(virStorageVolDef) vol = NULL;
-     g_autoptr(virStorageSource) meta = NULL;
-     g_autofree char *header = NULL;
-@@ -277,7 +276,7 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
- 
-     if (!(meta = virStorageFileGetMetadataFromBuf(name, header, len,
-                                                   VIR_STORAGE_FILE_AUTO,
--                                                  &backingFormat)))
-+                                                  NULL)))
-         goto cleanup;
- 
-     if (meta->backingStoreRaw) {
-@@ -286,13 +285,11 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
- 
-         vol->target.backingStore->type = VIR_STORAGE_TYPE_NETWORK;
- 
--        vol->target.backingStore->path = meta->backingStoreRaw;
-+        vol->target.backingStore->path = g_steal_pointer(&meta->backingStoreRaw);
-+        vol->target.backingStore->format = meta->backingStoreRawFormat;
- 
--        if (backingFormat < 0)
-+        if (vol->target.backingStore->format < 0)
-             vol->target.backingStore->format = VIR_STORAGE_FILE_RAW;
--        else
--            vol->target.backingStore->format = backingFormat;
--        meta->backingStoreRaw = NULL;
-     }
- 
-     vol->target.format = meta->format;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageEncryptionSecretCopy-Properly-copy-internals.patch b/SOURCES/libvirt-virStorageEncryptionSecretCopy-Properly-copy-internals.patch
deleted file mode 100644
index ba630dd..0000000
--- a/SOURCES/libvirt-virStorageEncryptionSecretCopy-Properly-copy-internals.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 914a920180c9803a57c06bd71f5270724c1dc900 Mon Sep 17 00:00:00 2001
-Message-Id: <914a920180c9803a57c06bd71f5270724c1dc900@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 20 Mar 2020 10:28:52 +0100
-Subject: [PATCH] virStorageEncryptionSecretCopy: Properly copy internals
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-virStorageEncryptionSecretPtr may have a string inside it, thus we must
-copy the string too. Use virSecretLookupDefCopy to do that.
-
-Caused by non-obvious code introduced in 756b46ddd24 and later 47e88b33b
-which added a string that needed to be copied.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1814923
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 299796328c34a30295d6cdc7ebce5d65843e921f)
-Message-Id: <2e350bb771f75d9fd068f69a595401907d92ca33.1584696274.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstorageencryption.c | 8 +++-----
- 1 file changed, 3 insertions(+), 5 deletions(-)
-
-diff --git a/src/util/virstorageencryption.c b/src/util/virstorageencryption.c
-index 74836d4a00..6765fdc23a 100644
---- a/src/util/virstorageencryption.c
-+++ b/src/util/virstorageencryption.c
-@@ -85,12 +85,10 @@ virStorageEncryptionFree(virStorageEncryptionPtr enc)
- static virStorageEncryptionSecretPtr
- virStorageEncryptionSecretCopy(const virStorageEncryptionSecret *src)
- {
--    virStorageEncryptionSecretPtr ret;
--
--    if (VIR_ALLOC(ret) < 0)
--        return NULL;
-+    virStorageEncryptionSecretPtr ret = g_new0(virStorageEncryptionSecret, 1);
- 
--    memcpy(ret, src, sizeof(*src));
-+    ret->type = src->type;
-+    virSecretLookupDefCopy(&ret->seclookupdef, &src->seclookupdef);
- 
-     return ret;
- }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataFromBuf-Remove-backingFormat-argument.patch b/SOURCES/libvirt-virStorageFileGetMetadataFromBuf-Remove-backingFormat-argument.patch
deleted file mode 100644
index d97f609..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataFromBuf-Remove-backingFormat-argument.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From dfcebf2ac266805c4e144091c04b27155972222f Mon Sep 17 00:00:00 2001
-Message-Id: <dfcebf2ac266805c4e144091c04b27155972222f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:40 +0100
-Subject: [PATCH] virStorageFileGetMetadataFromBuf: Remove 'backingFormat'
- argument
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-None of the callers actually use it.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 57df35aeadd2107a3c728fe0939e0779121168c0)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <67e0987c502a062fc17ee1d2701501bfdcd0cc92.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/storage/storage_backend_gluster.c |  3 +--
- src/util/virstoragefile.c             | 16 ++++++----------
- src/util/virstoragefile.h             |  3 +--
- 3 files changed, 8 insertions(+), 14 deletions(-)
-
-diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c
-index e92e9612bd..db3df82aad 100644
---- a/src/storage/storage_backend_gluster.c
-+++ b/src/storage/storage_backend_gluster.c
-@@ -275,8 +275,7 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
-         goto cleanup;
- 
-     if (!(meta = virStorageFileGetMetadataFromBuf(name, header, len,
--                                                  VIR_STORAGE_FILE_AUTO,
--                                                  NULL)))
-+                                                  VIR_STORAGE_FILE_AUTO)))
-         goto cleanup;
- 
-     if (meta->backingStoreRaw) {
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index d80780e291..1b9bd12284 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -1109,7 +1109,6 @@ virStorageFileMetadataNew(const char *path,
-  * @buf: header bytes from @path
-  * @len: length of @buf
-  * @format: format of the storage file
-- * @backingFormat: format of @backing
-  *
-  * Extract metadata about the storage volume with the specified image format.
-  * If image format is VIR_STORAGE_FILE_AUTO, it will probe to automatically
-@@ -1119,9 +1118,10 @@ virStorageFileMetadataNew(const char *path,
-  * that might be raw if that file will then be passed to a guest, since a
-  * malicious guest can turn a raw file into any other non-raw format at will.
-  *
-- * If the returned @backingFormat is VIR_STORAGE_FILE_AUTO it indicates the
-- * image didn't specify an explicit format for its backing store. Callers are
-- * advised against probing for the backing store format in this case.
-+ * If the 'backingStoreRawFormat' field of the returned structure is
-+ * VIR_STORAGE_FILE_AUTO it indicates the image didn't specify an explicit
-+ * format for its backing store. Callers are advised against probing for the
-+ * backing store format in this case.
-  *
-  * Caller MUST free the result after use via virObjectUnref.
-  */
-@@ -1129,8 +1129,7 @@ virStorageSourcePtr
- virStorageFileGetMetadataFromBuf(const char *path,
-                                  char *buf,
-                                  size_t len,
--                                 int format,
--                                 int *backingFormat)
-+                                 int format)
- {
-     virStorageSourcePtr ret = NULL;
- 
-@@ -1142,9 +1141,6 @@ virStorageFileGetMetadataFromBuf(const char *path,
-         return NULL;
-     }
- 
--    if (backingFormat)
--        *backingFormat = ret->backingStoreRawFormat;
--
-     return ret;
- }
- 
-@@ -3991,7 +3987,7 @@ virStorageSourceUpdateCapacity(virStorageSourcePtr src,
-     if (format == VIR_STORAGE_FILE_RAW && !src->encryption) {
-         src->capacity = src->physical;
-     } else if ((meta = virStorageFileGetMetadataFromBuf(src->path, buf,
--                                                        len, format, NULL))) {
-+                                                        len, format))) {
-         src->capacity = meta->capacity ? meta->capacity : src->physical;
-         if (src->encryption && meta->encryption)
-             src->encryption->payload_offset = meta->encryption->payload_offset;
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index ecba418bb3..32f2c82147 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -386,8 +386,7 @@ virStorageSourcePtr virStorageFileGetMetadataFromFD(const char *path,
- virStorageSourcePtr virStorageFileGetMetadataFromBuf(const char *path,
-                                                      char *buf,
-                                                      size_t len,
--                                                     int format,
--                                                     int *backingFormat)
-+                                                     int format)
-     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
- int virStorageFileChainGetBroken(virStorageSourcePtr chain,
-                                  char **broken_file);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataFromFD-Remove-unused-backingFormat-argument.patch b/SOURCES/libvirt-virStorageFileGetMetadataFromFD-Remove-unused-backingFormat-argument.patch
deleted file mode 100644
index a54d876..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataFromFD-Remove-unused-backingFormat-argument.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From c813373a8e6ab6efcd90fd65e7ea15431733280f Mon Sep 17 00:00:00 2001
-Message-Id: <c813373a8e6ab6efcd90fd65e7ea15431733280f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:41 +0100
-Subject: [PATCH] virStorageFileGetMetadataFromFD: Remove unused
- 'backingFormat' argument
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit c95656c995e9af260c6dfab69c6da0da8a3ae50c)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <7e26b363b7628de0f22e2fa45b2d1ce79a81d59e.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/storage/storage_util.c |  3 +--
- src/util/virstoragefile.c  | 12 +-----------
- src/util/virstoragefile.h  |  3 +--
- 3 files changed, 3 insertions(+), 15 deletions(-)
-
-diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
-index f3e899d0ca..0e80983f1f 100644
---- a/src/storage/storage_util.c
-+++ b/src/storage/storage_util.c
-@@ -3345,8 +3345,7 @@ storageBackendProbeTarget(virStorageSourcePtr target,
- 
-     if (!(meta = virStorageFileGetMetadataFromFD(target->path,
-                                                  fd,
--                                                 VIR_STORAGE_FILE_AUTO,
--                                                 NULL)))
-+                                                 VIR_STORAGE_FILE_AUTO)))
-         return -1;
- 
-     if (meta->backingStoreRaw) {
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 1b9bd12284..0bfd9e16e9 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -1161,21 +1161,14 @@ virStorageFileGetMetadataFromBuf(const char *path,
- virStorageSourcePtr
- virStorageFileGetMetadataFromFD(const char *path,
-                                 int fd,
--                                int format,
--                                int *backingFormat)
-+                                int format)
- 
- {
-     ssize_t len = VIR_STORAGE_MAX_HEADER;
-     struct stat sb;
--    int dummy;
-     g_autofree char *buf = NULL;
-     g_autoptr(virStorageSource) meta = NULL;
- 
--    if (!backingFormat)
--        backingFormat = &dummy;
--
--    *backingFormat = VIR_STORAGE_FILE_NONE;
--
-     if (fstat(fd, &sb) < 0) {
-         virReportSystemError(errno,
-                              _("cannot stat file '%s'"), path);
-@@ -1206,9 +1199,6 @@ virStorageFileGetMetadataFromFD(const char *path,
-     if (virStorageFileGetMetadataInternal(meta, buf, len) < 0)
-         return NULL;
- 
--    if (backingFormat)
--        *backingFormat = meta->backingStoreRawFormat;
--
-     if (S_ISREG(sb.st_mode))
-         meta->type = VIR_STORAGE_TYPE_FILE;
-     else if (S_ISBLK(sb.st_mode))
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 32f2c82147..5b995d54ab 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -381,8 +381,7 @@ int virStorageFileProbeFormat(const char *path, uid_t uid, gid_t gid);
- 
- virStorageSourcePtr virStorageFileGetMetadataFromFD(const char *path,
-                                                     int fd,
--                                                    int format,
--                                                    int *backingFormat);
-+                                                    int format);
- virStorageSourcePtr virStorageFileGetMetadataFromBuf(const char *path,
-                                                      char *buf,
-                                                      size_t len,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Allow-format-probing-under-special-circumstances.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Allow-format-probing-under-special-circumstances.patch
deleted file mode 100644
index 94131af..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Allow-format-probing-under-special-circumstances.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-From 1e3921f1065972dc236bc726f19be37492a145c6 Mon Sep 17 00:00:00 2001
-Message-Id: <1e3921f1065972dc236bc726f19be37492a145c6@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:43 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Allow format probing under
- special circumstances
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow format probing to work around lazy clients which did not specify
-their format in the overlay. Format probing will be allowed only, if we
-are able to probe the image, the probing result was successful and the
-probed image does not have any backing or data file.
-
-This relaxes the restrictions which were imposed in commit 3615e8b39bad
-in cases when we know that the image probing will not result in security
-issues or data corruption.
-
-We perform the image format detection and in the case that we were able
-to probe the format and the format does not specify a backing store (or
-doesn't support backing store) we can use this format.
-
-With pre-blockdev configurations this will restore the previous
-behaviour for the images mentioned above as qemu would probe the format
-anyways. It also improves error reporting compared to the old state as
-we now report that the backing chain will be broken in case when there
-is a backing file.
-
-In blockdev configurations this ensures that libvirt will not cause data
-corruption by ending the chain prematurely without notifying the user,
-but still allows the old semantics when the users forgot to specify the
-format.
-
-Users thus don't have to re-invent when image format detection is safe
-to do.
-
-The price for this is that libvirt will need to keep the image format
-detector still current and working or replace it by invocation of
-qemu-img.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit ae9e6c2a2b75d958995c661f7bb64ed4353a6404)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <77d1d21a0ce64fd49c501b1ed3667307cbab0b73.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 52 ++++++++++++++++++++++-----------------
- 1 file changed, 30 insertions(+), 22 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 0bfd9e16e9..b88763b267 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -4986,6 +4986,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-                                  virHashTablePtr cycle,
-                                  unsigned int depth)
- {
-+    virStorageFileFormat orig_format = src->format;
-     size_t headerLen;
-     int rv;
-     g_autofree char *buf = NULL;
-@@ -4995,10 +4996,17 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-               NULLSTR(src->path), src->format,
-               (unsigned int)uid, (unsigned int)gid);
- 
-+    if (src->format == VIR_STORAGE_FILE_AUTO_SAFE)
-+        src->format = VIR_STORAGE_FILE_AUTO;
-+
-     /* exit if we can't load information about the current image */
-     rv = virStorageFileSupportsBackingChainTraversal(src);
--    if (rv <= 0)
-+    if (rv <= 0) {
-+        if (orig_format == VIR_STORAGE_FILE_AUTO)
-+            return -2;
-+
-         return rv;
-+    }
- 
-     if (virStorageFileGetMetadataRecurseReadHeader(src, parent, uid, gid,
-                                                    &buf, &headerLen, cycle) < 0)
-@@ -5007,6 +5015,18 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     if (virStorageFileGetMetadataInternal(src, buf, headerLen) < 0)
-         return -1;
- 
-+    /* If we probed the format we MUST ensure that nothing else than the current
-+     * image (this includes both backing files and external data store) is
-+     * considered for security labelling and/or recursion. */
-+    if (orig_format == VIR_STORAGE_FILE_AUTO) {
-+        if (src->backingStoreRaw || src->externalDataStoreRaw) {
-+            src->format = VIR_STORAGE_FILE_RAW;
-+            VIR_FREE(src->backingStoreRaw);
-+            VIR_FREE(src->externalDataStoreRaw);
-+            return -2;
-+        }
-+    }
-+
-     if (src->backingStoreRaw) {
-         if ((rv = virStorageSourceNewFromBacking(src, &backingStore)) < 0)
-             return -1;
-@@ -5015,33 +5035,21 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-         if (rv == 1)
-             return 0;
- 
--        if (backingStore->format == VIR_STORAGE_FILE_AUTO) {
--            /* Assuming the backing store to be raw can lead to failures. We do
--             * it only when we must not report an error to prevent losing VMs.
--             * Otherwise report an error.
--             */
--            if (report_broken) {
-+        if ((rv = virStorageFileGetMetadataRecurse(backingStore, parent,
-+                                                   uid, gid,
-+                                                   report_broken,
-+                                                   cycle, depth + 1)) < 0) {
-+            if (!report_broken)
-+                return 0;
-+
-+            if (rv == -2) {
-                 virReportError(VIR_ERR_OPERATION_INVALID,
-                                _("format of backing image '%s' of image '%s' was not specified in the image metadata "
-                                  "(See https://libvirt.org/kbase/backing_chains.html for troubleshooting)"),
-                                src->backingStoreRaw, NULLSTR(src->path));
--                return -1;
-             }
- 
--            backingStore->format = VIR_STORAGE_FILE_RAW;
--        }
--
--        if (backingStore->format == VIR_STORAGE_FILE_AUTO_SAFE)
--            backingStore->format = VIR_STORAGE_FILE_AUTO;
--
--        if (virStorageFileGetMetadataRecurse(backingStore, parent,
--                                             uid, gid,
--                                             report_broken,
--                                             cycle, depth + 1) < 0) {
--            if (report_broken)
--                return -1;
--            else
--                return 0;
-+            return -1;
-         }
- 
-         backingStore->id = depth;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Expect-NULL-src-path.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Expect-NULL-src-path.patch
deleted file mode 100644
index 7d0facd..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Expect-NULL-src-path.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From b501151fe2fb1f3b3e8d9617fb1b5a160832f480 Mon Sep 17 00:00:00 2001
-Message-Id: <b501151fe2fb1f3b3e8d9617fb1b5a160832f480@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:31 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Expect NULL src->path
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The path can be NULL e.g. for NBD disks. Use NULLSTR to prevent use of
-NULL in %s.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 157b8722cbcc57103d3dd9211aa94a2c592849b6)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <6f8aa7a68bbde2e405c83c53ee78e746d3efbf39.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 911f811ace..28d1d1aa1e 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -4973,7 +4973,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     g_autoptr(virStorageSource) backingStore = NULL;
- 
-     VIR_DEBUG("path=%s format=%d uid=%u gid=%u",
--              src->path, src->format,
-+              NULLSTR(src->path), src->format,
-               (unsigned int)uid, (unsigned int)gid);
- 
-     /* exit if we can't load information about the current image */
-@@ -4995,7 +4995,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     if (virHashLookup(cycle, uniqueName)) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("backing store for %s (%s) is self-referential"),
--                       src->path, uniqueName);
-+                       NULLSTR(src->path), uniqueName);
-         goto cleanup;
-     }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Extract-storage-access.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Extract-storage-access.patch
deleted file mode 100644
index 8137719..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Extract-storage-access.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 811785bdc008e9d0df7e6f3e723c5f67b40cf6de Mon Sep 17 00:00:00 2001
-Message-Id: <811785bdc008e9d0df7e6f3e723c5f67b40cf6de@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:33 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Extract storage access
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Extract the code that directly deals with storage. This allows further
-simplification and clarification of virStorageFileGetMetadataRecurse.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 01adad0932a583b1e2183dd4401bddd8607e77c3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <716c58c00cec06dd469b079df124bc896665f169.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 71 ++++++++++++++++++++++++++-------------
- 1 file changed, 47 insertions(+), 24 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 46d55eda96..7295cebd08 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -4955,31 +4955,18 @@ virStorageFileReportBrokenChain(int errcode,
- }
- 
- 
--/* Recursive workhorse for virStorageFileGetMetadata.  */
- static int
--virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
--                                 virStorageSourcePtr parent,
--                                 uid_t uid, gid_t gid,
--                                 bool report_broken,
--                                 virHashTablePtr cycle,
--                                 unsigned int depth)
-+virStorageFileGetMetadataRecurseReadHeader(virStorageSourcePtr src,
-+                                           virStorageSourcePtr parent,
-+                                           uid_t uid,
-+                                           gid_t gid,
-+                                           char **buf,
-+                                           size_t *headerLen,
-+                                           virHashTablePtr cycle)
- {
-     int ret = -1;
-     const char *uniqueName;
--    ssize_t headerLen;
--    int backingFormat;
--    int rv;
--    g_autofree char *buf = NULL;
--    g_autoptr(virStorageSource) backingStore = NULL;
--
--    VIR_DEBUG("path=%s format=%d uid=%u gid=%u",
--              NULLSTR(src->path), src->format,
--              (unsigned int)uid, (unsigned int)gid);
--
--    /* exit if we can't load information about the current image */
--    rv = virStorageFileSupportsBackingChainTraversal(src);
--    if (rv <= 0)
--        return rv;
-+    ssize_t len;
- 
-     if (virStorageFileInitAs(src, uid, gid) < 0)
-         return -1;
-@@ -5002,10 +4989,47 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     if (virHashAddEntry(cycle, uniqueName, NULL) < 0)
-         goto cleanup;
- 
--    if ((headerLen = virStorageFileRead(src, 0, VIR_STORAGE_MAX_HEADER,
--                                        &buf)) < 0)
-+    if ((len = virStorageFileRead(src, 0, VIR_STORAGE_MAX_HEADER, buf)) < 0)
-         goto cleanup;
- 
-+    *headerLen = len;
-+    ret = 0;
-+
-+ cleanup:
-+    virStorageFileDeinit(src);
-+    return ret;
-+}
-+
-+
-+/* Recursive workhorse for virStorageFileGetMetadata.  */
-+static int
-+virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-+                                 virStorageSourcePtr parent,
-+                                 uid_t uid, gid_t gid,
-+                                 bool report_broken,
-+                                 virHashTablePtr cycle,
-+                                 unsigned int depth)
-+{
-+    int ret = -1;
-+    size_t headerLen;
-+    int backingFormat;
-+    int rv;
-+    g_autofree char *buf = NULL;
-+    g_autoptr(virStorageSource) backingStore = NULL;
-+
-+    VIR_DEBUG("path=%s format=%d uid=%u gid=%u",
-+              NULLSTR(src->path), src->format,
-+              (unsigned int)uid, (unsigned int)gid);
-+
-+    /* exit if we can't load information about the current image */
-+    rv = virStorageFileSupportsBackingChainTraversal(src);
-+    if (rv <= 0)
-+        return rv;
-+
-+    if (virStorageFileGetMetadataRecurseReadHeader(src, parent, uid, gid,
-+                                                   &buf, &headerLen, cycle) < 0)
-+        return -1;
-+
-     if (virStorageFileGetMetadataInternal(src, buf, headerLen,
-                                           &backingFormat) < 0)
-         goto cleanup;
-@@ -5081,7 +5105,6 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     ret = 0;
- 
-  cleanup:
--    virStorageFileDeinit(src);
-     return ret;
- }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Remove-cleanup-label.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Remove-cleanup-label.patch
deleted file mode 100644
index 69739f3..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Remove-cleanup-label.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 0b9e19e4d91694f3f55318409b120d132d1db987 Mon Sep 17 00:00:00 2001
-Message-Id: <0b9e19e4d91694f3f55318409b120d132d1db987@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:34 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Remove 'cleanup' label
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There's nothing to clean up. Make it obvious what is returned.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit a570dc67675618e3946bef7e49c685f56bb258e3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <1aed0cf359219aa713ded5159d3f04b080e3042c.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 50 +++++++++++++++------------------------
- 1 file changed, 19 insertions(+), 31 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 7295cebd08..5a74034ec4 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -5010,7 +5010,6 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-                                  virHashTablePtr cycle,
-                                  unsigned int depth)
- {
--    int ret = -1;
-     size_t headerLen;
-     int backingFormat;
-     int rv;
-@@ -5030,19 +5029,16 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-                                                    &buf, &headerLen, cycle) < 0)
-         return -1;
- 
--    if (virStorageFileGetMetadataInternal(src, buf, headerLen,
--                                          &backingFormat) < 0)
--        goto cleanup;
-+    if (virStorageFileGetMetadataInternal(src, buf, headerLen, &backingFormat) < 0)
-+        return -1;
- 
-     if (src->backingStoreRaw) {
-         if ((rv = virStorageSourceNewFromBacking(src, &backingStore)) < 0)
--            goto cleanup;
-+            return -1;
- 
--        if (rv == 1) {
--            /* the backing file would not be usable for VM usage */
--            ret = 0;
--            goto cleanup;
--        }
-+        /* the backing file would not be usable for VM usage */
-+        if (rv == 1)
-+            return 0;
- 
-         backingStore->format = backingFormat;
- 
-@@ -5065,17 +5061,14 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-         if (backingStore->format == VIR_STORAGE_FILE_AUTO_SAFE)
-             backingStore->format = VIR_STORAGE_FILE_AUTO;
- 
--        if ((ret = virStorageFileGetMetadataRecurse(backingStore, parent,
--                                                    uid, gid,
--                                                    report_broken,
--                                                    cycle, depth + 1)) < 0) {
-+        if (virStorageFileGetMetadataRecurse(backingStore, parent,
-+                                             uid, gid,
-+                                             report_broken,
-+                                             cycle, depth + 1) < 0) {
-             if (report_broken)
--                goto cleanup;
--
--            /* if we fail somewhere midway, just accept and return a
--             * broken chain */
--            ret = 0;
--            goto cleanup;
-+                return -1;
-+            else
-+                return 0;
-         }
- 
-         backingStore->id = depth;
-@@ -5083,7 +5076,7 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     } else {
-         /* add terminator */
-         if (!(src->backingStore = virStorageSourceNew()))
--            goto cleanup;
-+            return -1;
-     }
- 
-     if (src->externalDataStoreRaw) {
-@@ -5091,21 +5084,16 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
- 
-         if ((rv = virStorageSourceNewFromExternalData(src,
-                                                       &externalDataStore)) < 0)
--            goto cleanup;
-+            return -1;
- 
--        if (rv == 1) {
--            /* the file would not be usable for VM usage */
--            ret = 0;
--            goto cleanup;
--        }
-+        /* the file would not be usable for VM usage */
-+        if (rv == 1)
-+            return 0;
- 
-         src->externalDataStore = g_steal_pointer(&externalDataStore);
-     }
- 
--    ret = 0;
--
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Remove-impossible-error-report.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Remove-impossible-error-report.patch
deleted file mode 100644
index 26c07e9..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Remove-impossible-error-report.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From cf65fbfb12a209e760b8b2f2b16acfd8b33e8bee Mon Sep 17 00:00:00 2001
-Message-Id: <cf65fbfb12a209e760b8b2f2b16acfd8b33e8bee@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:29 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Remove impossible error
- report
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-We call virStorageFileSupportsBackingChainTraversal which already checks
-that the 'storageFileRead' callback is non-NULL, which in turn means
-that virStorageFileRead will not return -2.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit 84df98f29e031d3b1e68e7e3c0d2651ccba14106)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <bb902dffc6692251cf12a14fcf5b25a62054a20b.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 9 +--------
- 1 file changed, 1 insertion(+), 8 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 6b83fc0e24..1f18320756 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -5003,15 +5003,8 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-         goto cleanup;
- 
-     if ((headerLen = virStorageFileRead(src, 0, VIR_STORAGE_MAX_HEADER,
--                                        &buf)) < 0) {
--        if (headerLen == -2)
--            virReportError(VIR_ERR_INTERNAL_ERROR,
--                           _("storage file reading is not supported for "
--                             "storage type %s (protocol: %s)"),
--                           virStorageTypeToString(src->type),
--                           virStorageNetProtocolTypeToString(src->protocol));
-+                                        &buf)) < 0)
-         goto cleanup;
--    }
- 
-     if (virStorageFileGetMetadataInternal(src, buf, headerLen,
-                                           &backingFormat) < 0)
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Shuffle-around-assignment-of-backing-chain-depth.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Shuffle-around-assignment-of-backing-chain-depth.patch
deleted file mode 100644
index 5a62f0e..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Shuffle-around-assignment-of-backing-chain-depth.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From e0c86b78dc5587263aeb10ae0fc8fbb5975135ee Mon Sep 17 00:00:00 2001
-Message-Id: <e0c86b78dc5587263aeb10ae0fc8fbb5975135ee@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:30 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Shuffle around assignment
- of backing chain depth
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Move the assignment to a place where we know that the backing store is
-present rather than having to check in the cleanup section.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit b347e5c7dd69e3381b073c640ece2460632830cc)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <0432e2bd0f224cd1c55104e33699cb1602013a5d.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 1f18320756..911f811ace 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -5053,14 +5053,15 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-             ret = 0;
-             goto cleanup;
-         }
-+
-+        backingStore->id = depth;
-+        src->backingStore = g_steal_pointer(&backingStore);
-     } else {
-         /* add terminator */
--        if (!(backingStore = virStorageSourceNew()))
-+        if (!(src->backingStore = virStorageSourceNew()))
-             goto cleanup;
-     }
- 
--    src->backingStore = g_steal_pointer(&backingStore);
--
-     if (src->externalDataStoreRaw) {
-         g_autoptr(virStorageSource) externalDataStore = NULL;
- 
-@@ -5080,8 +5081,6 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     ret = 0;
- 
-  cleanup:
--    if (virStorageSourceHasBacking(src))
--        src->backingStore->id = depth;
-     virStorageFileDeinit(src);
-     return ret;
- }
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Use-virHashHasEntry-instead-of-fake-pointers.patch b/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Use-virHashHasEntry-instead-of-fake-pointers.patch
deleted file mode 100644
index c7d655f..0000000
--- a/SOURCES/libvirt-virStorageFileGetMetadataRecurse-Use-virHashHasEntry-instead-of-fake-pointers.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 20f764d1837f06b10c7c327b085234b6e5f876e2 Mon Sep 17 00:00:00 2001
-Message-Id: <20f764d1837f06b10c7c327b085234b6e5f876e2@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:32 +0100
-Subject: [PATCH] virStorageFileGetMetadataRecurse: Use virHashHasEntry instead
- of fake pointers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Replacing virHashLookup by virHashHasEntry allows us to use NULL as the
-payload of the hash table rather than putting a fake '1' pointer into
-the table.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Eric Blake <eblake@redhat.com>
-(cherry picked from commit e3960f4b6d0b6d8cb8b2631f8358abf289c1cc18)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <af53b5ff04169cfa8e40664f2b66f110560486ee.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 28d1d1aa1e..46d55eda96 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -4992,14 +4992,14 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-     if (!(uniqueName = virStorageFileGetUniqueIdentifier(src)))
-         goto cleanup;
- 
--    if (virHashLookup(cycle, uniqueName)) {
-+    if (virHashHasEntry(cycle, uniqueName)) {
-         virReportError(VIR_ERR_INTERNAL_ERROR,
-                        _("backing store for %s (%s) is self-referential"),
-                        NULLSTR(src->path), uniqueName);
-         goto cleanup;
-     }
- 
--    if (virHashAddEntry(cycle, uniqueName, (void *)1) < 0)
-+    if (virHashAddEntry(cycle, uniqueName, NULL) < 0)
-         goto cleanup;
- 
-     if ((headerLen = virStorageFileRead(src, 0, VIR_STORAGE_MAX_HEADER,
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageSourceJSONDriverParser-annotate-format-drivers.patch b/SOURCES/libvirt-virStorageSourceJSONDriverParser-annotate-format-drivers.patch
deleted file mode 100644
index 916802b..0000000
--- a/SOURCES/libvirt-virStorageSourceJSONDriverParser-annotate-format-drivers.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From e551ad605fd99e92a85acdab53bc52efaa6facb2 Mon Sep 17 00:00:00 2001
-Message-Id: <e551ad605fd99e92a85acdab53bc52efaa6facb2@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:08 +0100
-Subject: [PATCH] virStorageSourceJSONDriverParser: annotate 'format' drivers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The parser was originally designed only for protocol parsers. Since
-we already have 'raw' format driver in the list we'll need to be able
-to parse it too. In later patches this will be used to prevent parsing
-nested format drivers.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 7e13ff8dc016dda5ffd50ff5c059f01c76486c82)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <ef05c98383c79aa7487ea97c7e1cbfb384c80440.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 33 +++++++++++++++++----------------
- 1 file changed, 17 insertions(+), 16 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index c97a3a9d6e..b6749b150c 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3563,6 +3563,7 @@ virStorageSourceParseBackingJSONVxHS(virStorageSourcePtr src,
- 
- struct virStorageSourceJSONDriverParser {
-     const char *drvname;
-+    bool formatdriver;
-     /**
-      * The callback gets a pre-allocated storage source @src and the JSON
-      * object to parse. The callback shall return -1 on error and report error
-@@ -3575,22 +3576,22 @@ struct virStorageSourceJSONDriverParser {
- };
- 
- static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
--    {"file", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_FILE},
--    {"host_device", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK},
--    {"host_cdrom", virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK},
--    {"http", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_HTTP},
--    {"https", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_HTTPS},
--    {"ftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTP},
--    {"ftps", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTPS},
--    {"tftp", virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP},
--    {"gluster", virStorageSourceParseBackingJSONGluster, 0},
--    {"iscsi", virStorageSourceParseBackingJSONiSCSI, 0},
--    {"nbd", virStorageSourceParseBackingJSONNbd, 0},
--    {"sheepdog", virStorageSourceParseBackingJSONSheepdog, 0},
--    {"ssh", virStorageSourceParseBackingJSONSSH, 0},
--    {"rbd", virStorageSourceParseBackingJSONRBD, 0},
--    {"raw", virStorageSourceParseBackingJSONRaw, 0},
--    {"vxhs", virStorageSourceParseBackingJSONVxHS, 0},
-+    {"file", false, virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_FILE},
-+    {"host_device", false, virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK},
-+    {"host_cdrom", false, virStorageSourceParseBackingJSONPath, VIR_STORAGE_TYPE_BLOCK},
-+    {"http", false, virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_HTTP},
-+    {"https", false, virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_HTTPS},
-+    {"ftp", false, virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTP},
-+    {"ftps", false, virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_FTPS},
-+    {"tftp", false, virStorageSourceParseBackingJSONUri, VIR_STORAGE_NET_PROTOCOL_TFTP},
-+    {"gluster", false, virStorageSourceParseBackingJSONGluster, 0},
-+    {"iscsi", false, virStorageSourceParseBackingJSONiSCSI, 0},
-+    {"nbd", false, virStorageSourceParseBackingJSONNbd, 0},
-+    {"sheepdog", false, virStorageSourceParseBackingJSONSheepdog, 0},
-+    {"ssh", false, virStorageSourceParseBackingJSONSSH, 0},
-+    {"rbd", false, virStorageSourceParseBackingJSONRBD, 0},
-+    {"raw", true, virStorageSourceParseBackingJSONRaw, 0},
-+    {"vxhs", false, virStorageSourceParseBackingJSONVxHS, 0},
- };
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virStorageSourceNetCookieValidate-Accept-quoted-cookie-value.patch b/SOURCES/libvirt-virStorageSourceNetCookieValidate-Accept-quoted-cookie-value.patch
deleted file mode 100644
index cf83fa6..0000000
--- a/SOURCES/libvirt-virStorageSourceNetCookieValidate-Accept-quoted-cookie-value.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-From ba88fc4f04428c1064bc4eee85acbdf1a3123c4c Mon Sep 17 00:00:00 2001
-Message-Id: <ba88fc4f04428c1064bc4eee85acbdf1a3123c4c@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:40 +0200
-Subject: [PATCH] virStorageSourceNetCookieValidate: Accept quoted cookie value
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The quotes are forbidden only inside the value, but the value itself may
-be enclosed in quotes. Fix the RNG schema and validator and add a test
-case.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit b9166baebe70a4b3577ddb6b2ee6af0dd4f60759)
-Message-Id: <f8f910f4e61e0e9434591a02c5d2e50b3d78edc5.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- docs/schemas/domaincommon.rng                 |  2 +-
- src/util/virstoragefile.c                     | 19 ++++++++++++++++++-
- .../disk-network-http.x86_64-latest.args      |  4 ++--
- tests/qemuxml2argvdata/disk-network-http.xml  |  4 ++--
- .../disk-network-http.x86_64-latest.xml       |  4 ++--
- 5 files changed, 25 insertions(+), 8 deletions(-)
-
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
-index 3a0edbed97..ac6f180382 100644
---- a/docs/schemas/domaincommon.rng
-+++ b/docs/schemas/domaincommon.rng
-@@ -1846,7 +1846,7 @@
-             </data>
-           </attribute>
-           <data type="string">
--            <param name="pattern">[!#$%&amp;'()*+\-./0-9:&gt;=&lt;?@A-Z\^_`\[\]a-z|~]+</param>
-+            <param name="pattern">"?[!#$%&amp;'()*+\-./0-9:&gt;=&lt;?@A-Z\^_`\[\]a-z|~]+"?</param>
-           </data>
-         </element>
-       </oneOrMore>
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 3eb32edc2a..f8d741f040 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2217,6 +2217,10 @@ static const char virStorageSourceCookieNameInvalidChars[] =
- static int
- virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
- {
-+    g_autofree char *val = g_strdup(def->value);
-+    const char *checkval = val;
-+    size_t len = strlen(val);
-+
-     /* name must have at least 1 character */
-     if (*(def->name) == '\0') {
-         virReportError(VIR_ERR_XML_ERROR, "%s",
-@@ -2233,8 +2237,21 @@ virStorageSourceNetCookieValidate(virStorageNetCookieDefPtr def)
-         return -1;
-     }
- 
-+    /* check for optional quotes around the cookie value string */
-+    if (val[0] == '"') {
-+        if (val[len - 1] != '"') {
-+            virReportError(VIR_ERR_XML_ERROR,
-+                           _("value of cookie '%s' contains invalid characters"),
-+                           def->name);
-+            return -1;
-+        }
-+
-+        val[len - 1] = '\0';
-+        checkval++;
-+    }
-+
-     /* check invalid characters in value */
--    if (virStringHasChars(def->value, virStorageSourceCookieValueInvalidChars)) {
-+    if (virStringHasChars(checkval, virStorageSourceCookieValueInvalidChars)) {
-         virReportError(VIR_ERR_XML_ERROR,
-                        _("value of cookie '%s' contains invalid characters"),
-                        def->name);
-diff --git a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-index 2f2849ebdf..46aa5f23ce 100644
---- a/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-+++ b/tests/qemuxml2argvdata/disk-network-http.x86_64-latest.args
-@@ -42,7 +42,7 @@ id=virtio-disk0,bootindex=1 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x3,drive=libvirt-3-format,\
- id=virtio-disk1 \
- -object secret,id=libvirt-2-storage-httpcookie-secret0,\
--data=DrPR9NA6GKJb7qi1KbjHad3f3UIGTTDmAmOZHHv1F5w5T8rhnk3f+uSKStHe0J2O,\
-+data=DrPR9NA6GKJb7qi1KbjHaealKEMVtOWUl2h3yvO5lgIh6cyLHemmlg+h9fcgwREA,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"http","url":"http://example.org:1234/test3.img",\
- "cookie-secret":"libvirt-2-storage-httpcookie-secret0",\
-@@ -52,7 +52,7 @@ keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=libvirt-2-format,\
- id=virtio-disk2 \
- -object secret,id=libvirt-1-storage-httpcookie-secret0,\
--data=DrPR9NA6GKJb7qi1KbjHad3f3UIGTTDmAmOZHHv1F5w5T8rhnk3f+uSKStHe0J2O,\
-+data=DrPR9NA6GKJb7qi1KbjHaealKEMVtOWUl2h3yvO5lgIh6cyLHemmlg+h9fcgwREA,\
- keyid=masterKey0,iv=AAECAwQFBgcICQoLDA0ODw==,format=base64 \
- -blockdev '{"driver":"https","url":"https://example.org:1234/test4.img",\
- "sslverify":false,"cookie-secret":"libvirt-1-storage-httpcookie-secret0",\
-diff --git a/tests/qemuxml2argvdata/disk-network-http.xml b/tests/qemuxml2argvdata/disk-network-http.xml
-index 20024c732e..93e6617433 100644
---- a/tests/qemuxml2argvdata/disk-network-http.xml
-+++ b/tests/qemuxml2argvdata/disk-network-http.xml
-@@ -35,7 +35,7 @@
-         <host name='example.org' port='1234'/>
-         <cookies>
-           <cookie name='test'>testcookievalue</cookie>
--          <cookie name='test2'>blurb</cookie>
-+          <cookie name='test2'>"blurb"</cookie>
-         </cookies>
-       </source>
-       <target dev='vdc' bus='virtio'/>
-@@ -47,7 +47,7 @@
-         <ssl verify='no'/>
-         <cookies>
-           <cookie name='test'>testcookievalue</cookie>
--          <cookie name='test2'>blurb</cookie>
-+          <cookie name='test2'>&quot;blurb&quot;</cookie>
-         </cookies>
-       </source>
-       <target dev='vdd' bus='virtio'/>
-diff --git a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-index 238a5fef58..60073c227c 100644
---- a/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-+++ b/tests/qemuxml2xmloutdata/disk-network-http.x86_64-latest.xml
-@@ -38,7 +38,7 @@
-         <host name='example.org' port='1234'/>
-         <cookies>
-           <cookie name='test'>testcookievalue</cookie>
--          <cookie name='test2'>blurb</cookie>
-+          <cookie name='test2'>&quot;blurb&quot;</cookie>
-         </cookies>
-       </source>
-       <target dev='vdc' bus='virtio'/>
-@@ -51,7 +51,7 @@
-         <ssl verify='no'/>
-         <cookies>
-           <cookie name='test'>testcookievalue</cookie>
--          <cookie name='test2'>blurb</cookie>
-+          <cookie name='test2'>&quot;blurb&quot;</cookie>
-         </cookies>
-       </source>
-       <target dev='vdd' bus='virtio'/>
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-virStorageSourceNewFromBacking-Also-transfer-the-format.patch b/SOURCES/libvirt-virStorageSourceNewFromBacking-Also-transfer-the-format.patch
deleted file mode 100644
index 7d975ae..0000000
--- a/SOURCES/libvirt-virStorageSourceNewFromBacking-Also-transfer-the-format.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 19778995ed94278db561db198a402d232027aeb8 Mon Sep 17 00:00:00 2001
-Message-Id: <19778995ed94278db561db198a402d232027aeb8@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:38 +0100
-Subject: [PATCH] virStorageSourceNewFromBacking: Also transfer the format
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When we create the new virStorageSource from the definitions stored in
-the parent we should also use the 'backingStoreRawFormat' field to
-populate the format.
-
-Callers which use virStorageSourceNewFromBacking are also fixed to stop
-setting the format manually.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 264b79c63a518df8ce32a78dda51ae554cd2d5f2)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <c9015f51f31c9a088983562298aaf61b1c43d927.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/storage/storage_util.c | 5 +----
- src/util/virstoragefile.c  | 3 +--
- 2 files changed, 2 insertions(+), 6 deletions(-)
-
-diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
-index c562cf313f..f3e899d0ca 100644
---- a/src/storage/storage_util.c
-+++ b/src/storage/storage_util.c
-@@ -3316,7 +3316,6 @@ static int
- storageBackendProbeTarget(virStorageSourcePtr target,
-                           virStorageEncryptionPtr *encryption)
- {
--    int backingStoreFormat;
-     int rc;
-     struct stat sb;
-     g_autoptr(virStorageSource) meta = NULL;
-@@ -3347,15 +3346,13 @@ storageBackendProbeTarget(virStorageSourcePtr target,
-     if (!(meta = virStorageFileGetMetadataFromFD(target->path,
-                                                  fd,
-                                                  VIR_STORAGE_FILE_AUTO,
--                                                 &backingStoreFormat)))
-+                                                 NULL)))
-         return -1;
- 
-     if (meta->backingStoreRaw) {
-         if (virStorageSourceNewFromBacking(meta, &target->backingStore) < 0)
-             return -1;
- 
--        target->backingStore->format = backingStoreFormat;
--
-         /* XXX: Remote storage doesn't play nicely with volumes backed by
-          * remote storage. To avoid trouble, just fake the backing store is RAW
-          * and put the string from the metadata as the path of the target. */
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index d594ee3695..d80780e291 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3824,6 +3824,7 @@ virStorageSourceNewFromBacking(virStorageSourcePtr parent,
-                                            backing)) < 0)
-         return rc;
- 
-+    (*backing)->format = parent->backingStoreRawFormat;
-     (*backing)->readonly = true;
-     return rc;
- }
-@@ -5028,8 +5029,6 @@ virStorageFileGetMetadataRecurse(virStorageSourcePtr src,
-         if (rv == 1)
-             return 0;
- 
--        backingStore->format = src->backingStoreRawFormat;
--
-         if (backingStore->format == VIR_STORAGE_FILE_AUTO) {
-             /* Assuming the backing store to be raw can lead to failures. We do
-              * it only when we must not report an error to prevent losing VMs.
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Allow-json-pseudo-URIs-without-file-wrapper.patch b/SOURCES/libvirt-virStorageSourceParseBackingJSON-Allow-json-pseudo-URIs-without-file-wrapper.patch
deleted file mode 100644
index 4932b4c..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Allow-json-pseudo-URIs-without-file-wrapper.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 3a01f1148ea3da0a572a196f987f29f12e397ec1 Mon Sep 17 00:00:00 2001
-Message-Id: <3a01f1148ea3da0a572a196f987f29f12e397ec1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:09 +0100
-Subject: [PATCH] virStorageSourceParseBackingJSON: Allow 'json:' pseudo URIs
- without 'file' wrapper
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are two possibilities:
-1) json:{"file":{"driver":...}}
-2) json:{"driver":...}
-
-Our code didn't work properly with the second one as it was expecting
-the 'file' wrapper. Conditionalize the removal to only the situation
-when the top level doesn't have "driver".
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit f8e097570ea9eb0b446f9ff5159b4e9c337e6b07)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <26a21da3bf0642ed6ac80184f97337fba98b0c14.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 41 +++++++++++++++++++++++++--------------
- 1 file changed, 26 insertions(+), 15 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index b6749b150c..dd05de188f 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3521,10 +3521,17 @@ virStorageSourceParseBackingJSONRaw(virStorageSourcePtr src,
-                                     const char *jsonstr,
-                                     int opaque G_GNUC_UNUSED)
- {
--    /* There are no interesting attributes in raw driver.
--     * Treat it as pass-through.
--     */
--    return virStorageSourceParseBackingJSONInternal(src, json, jsonstr);
-+    virJSONValuePtr file;
-+
-+    /* 'raw' is a format driver so it can have protocol driver children */
-+    if (!(file = virJSONValueObjectGetObject(json, "file"))) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("JSON backing volume definition '%s' lacks 'file' object"),
-+                       jsonstr);
-+        return -1;
-+    }
-+
-+    return virStorageSourceParseBackingJSONInternal(src, file, jsonstr);
- }
- 
- 
-@@ -3601,18 +3608,10 @@ virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
-                                          virJSONValuePtr json,
-                                          const char *jsonstr)
- {
--    virJSONValuePtr file;
-     const char *drvname;
-     size_t i;
- 
--    if (!(file = virJSONValueObjectGetObject(json, "file"))) {
--        virReportError(VIR_ERR_INVALID_ARG,
--                       _("JSON backing volume definition '%s' lacks 'file' object"),
--                       jsonstr);
--        return -1;
--    }
--
--    if (!(drvname = virJSONValueObjectGetString(file, "driver"))) {
-+    if (!(drvname = virJSONValueObjectGetString(json, "driver"))) {
-         virReportError(VIR_ERR_INVALID_ARG,
-                        _("JSON backing volume definition '%s' lacks driver name"),
-                        jsonstr);
-@@ -3621,7 +3620,7 @@ virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
- 
-     for (i = 0; i < G_N_ELEMENTS(jsonParsers); i++) {
-         if (STREQ(drvname, jsonParsers[i].drvname))
--            return jsonParsers[i].func(src, file, jsonstr, jsonParsers[i].opaque);
-+            return jsonParsers[i].func(src, json, jsonstr, jsonParsers[i].opaque);
-     }
- 
-     virReportError(VIR_ERR_INTERNAL_ERROR,
-@@ -3637,6 +3636,7 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src,
- {
-     g_autoptr(virJSONValue) root = NULL;
-     g_autoptr(virJSONValue) deflattened = NULL;
-+    virJSONValuePtr file = NULL;
- 
-     if (!(root = virJSONValueFromString(json)))
-         return -1;
-@@ -3644,7 +3644,18 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src,
-     if (!(deflattened = virJSONValueObjectDeflatten(root)))
-         return -1;
- 
--    return virStorageSourceParseBackingJSONInternal(src, deflattened, json);
-+    /* There are 2 possible syntaxes:
-+     * 1) json:{"file":{"driver":...}}
-+     * 2) json:{"driver":...}
-+     * Remove the 'file' wrapper object in case 1.
-+     */
-+    if (!virJSONValueObjectHasKey(deflattened, "driver"))
-+        file = virJSONValueObjectGetObject(deflattened, "file");
-+
-+    if (!file)
-+        file = deflattened;
-+
-+    return virStorageSourceParseBackingJSONInternal(src, file, json);
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Move-deflattening-of-json-URIs-out-of-recursion.patch b/SOURCES/libvirt-virStorageSourceParseBackingJSON-Move-deflattening-of-json-URIs-out-of-recursion.patch
deleted file mode 100644
index d762fcc..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Move-deflattening-of-json-URIs-out-of-recursion.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From dd5ec4a68ef2858ff8d98942d87b59fa09ab819f Mon Sep 17 00:00:00 2001
-Message-Id: <dd5ec4a68ef2858ff8d98942d87b59fa09ab819f@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:07 +0100
-Subject: [PATCH] virStorageSourceParseBackingJSON: Move deflattening of json:
- URIs out of recursion
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Originally virStorageSourceParseBackingJSON didn't recurse, but when
-the 'raw' driver support was added we need to parse it's information
-which contains nested 'file' object.
-
-Since the deflattening helper recurses already there's no need to call
-it again. Move it one level up to the entry point.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit aadb34be3428a5e467289709290b536ae6bf5d2a)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <be49eb68dbd29d1075713483472f32d5e995a263.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 05f17224f4..c97a3a9d6e 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3600,15 +3600,11 @@ virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
-                                          virJSONValuePtr json,
-                                          const char *jsonstr)
- {
--    g_autoptr(virJSONValue) deflattened = NULL;
-     virJSONValuePtr file;
-     const char *drvname;
-     size_t i;
- 
--    if (!(deflattened = virJSONValueObjectDeflatten(json)))
--        return -1;
--
--    if (!(file = virJSONValueObjectGetObject(deflattened, "file"))) {
-+    if (!(file = virJSONValueObjectGetObject(json, "file"))) {
-         virReportError(VIR_ERR_INVALID_ARG,
-                        _("JSON backing volume definition '%s' lacks 'file' object"),
-                        jsonstr);
-@@ -3639,11 +3635,15 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src,
-                                  const char *json)
- {
-     g_autoptr(virJSONValue) root = NULL;
-+    g_autoptr(virJSONValue) deflattened = NULL;
- 
-     if (!(root = virJSONValueFromString(json)))
-         return -1;
- 
--    return virStorageSourceParseBackingJSONInternal(src, root, json);
-+    if (!(deflattened = virJSONValueObjectDeflatten(root)))
-+        return -1;
-+
-+    return virStorageSourceParseBackingJSONInternal(src, deflattened, json);
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Pass-around-original-backing-file-string.patch b/SOURCES/libvirt-virStorageSourceParseBackingJSON-Pass-around-original-backing-file-string.patch
deleted file mode 100644
index 33fa270..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Pass-around-original-backing-file-string.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From 5322d68b1c1ce4b8db415e691b666e1aae14ce8b Mon Sep 17 00:00:00 2001
-Message-Id: <5322d68b1c1ce4b8db415e691b666e1aae14ce8b@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:06 +0100
-Subject: [PATCH] virStorageSourceParseBackingJSON: Pass around original
- backing file string
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are a few error messages which might want to report the original
-backing store string. Pass it around rather than trying to re-generate
-it.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 4a6bc568cd485f8f252a4750c5a67735f15ff82d)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <09648d6aeb27261a420b144c53360158b1e367d0.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 31 ++++++++++++++++++++-----------
- 1 file changed, 20 insertions(+), 11 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 7a2af0ad94..05f17224f4 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3051,12 +3051,14 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
- 
- static int
- virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
--                                         virJSONValuePtr json);
-+                                         virJSONValuePtr json,
-+                                         const char *jsonstr);
- 
- 
- static int
- virStorageSourceParseBackingJSONPath(virStorageSourcePtr src,
-                                      virJSONValuePtr json,
-+                                     const char *jsonstr G_GNUC_UNUSED,
-                                      int type)
- {
-     const char *path;
-@@ -3101,6 +3103,7 @@ virStorageSourceParseBackingJSONUriStr(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONUri(virStorageSourcePtr src,
-                                     virJSONValuePtr json,
-+                                    const char *jsonstr G_GNUC_UNUSED,
-                                     int protocol)
- {
-     const char *uri;
-@@ -3204,6 +3207,7 @@ virStorageSourceParseBackingJSONSocketAddress(virStorageNetHostDefPtr host,
- static int
- virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src,
-                                         virJSONValuePtr json,
-+                                        const char *jsonstr G_GNUC_UNUSED,
-                                         int opaque G_GNUC_UNUSED)
- {
-     const char *uri = virJSONValueObjectGetString(json, "filename");
-@@ -3257,6 +3261,7 @@ virStorageSourceParseBackingJSONGluster(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src,
-                                       virJSONValuePtr json,
-+                                      const char *jsonstr G_GNUC_UNUSED,
-                                       int opaque G_GNUC_UNUSED)
- {
-     const char *transport = virJSONValueObjectGetString(json, "transport");
-@@ -3326,6 +3331,7 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONNbd(virStorageSourcePtr src,
-                                     virJSONValuePtr json,
-+                                    const char *jsonstr G_GNUC_UNUSED,
-                                     int opaque G_GNUC_UNUSED)
- {
-     const char *path = virJSONValueObjectGetString(json, "path");
-@@ -3373,6 +3379,7 @@ virStorageSourceParseBackingJSONNbd(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONSheepdog(virStorageSourcePtr src,
-                                          virJSONValuePtr json,
-+                                         const char *jsonstr G_GNUC_UNUSED,
-                                          int opaque G_GNUC_UNUSED)
- {
-     const char *filename;
-@@ -3416,6 +3423,7 @@ virStorageSourceParseBackingJSONSheepdog(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONSSH(virStorageSourcePtr src,
-                                     virJSONValuePtr json,
-+                                    const char *jsonstr G_GNUC_UNUSED,
-                                     int opaque G_GNUC_UNUSED)
- {
-     const char *path = virJSONValueObjectGetString(json, "path");
-@@ -3458,6 +3466,7 @@ virStorageSourceParseBackingJSONSSH(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONRBD(virStorageSourcePtr src,
-                                     virJSONValuePtr json,
-+                                    const char *jsonstr G_GNUC_UNUSED,
-                                     int opaque G_GNUC_UNUSED)
- {
-     const char *filename;
-@@ -3509,18 +3518,20 @@ virStorageSourceParseBackingJSONRBD(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONRaw(virStorageSourcePtr src,
-                                     virJSONValuePtr json,
-+                                    const char *jsonstr,
-                                     int opaque G_GNUC_UNUSED)
- {
-     /* There are no interesting attributes in raw driver.
-      * Treat it as pass-through.
-      */
--    return virStorageSourceParseBackingJSONInternal(src, json);
-+    return virStorageSourceParseBackingJSONInternal(src, json, jsonstr);
- }
- 
- 
- static int
- virStorageSourceParseBackingJSONVxHS(virStorageSourcePtr src,
-                                      virJSONValuePtr json,
-+                                     const char *jsonstr G_GNUC_UNUSED,
-                                      int opaque G_GNUC_UNUSED)
- {
-     const char *vdisk_id = virJSONValueObjectGetString(json, "vdisk-id");
-@@ -3559,7 +3570,7 @@ struct virStorageSourceJSONDriverParser {
-      * can't be converted to libvirt's configuration (e.g. inline authentication
-      * credentials are present).
-      */
--    int (*func)(virStorageSourcePtr src, virJSONValuePtr json, int opaque);
-+    int (*func)(virStorageSourcePtr src, virJSONValuePtr json, const char *jsonstr, int opaque);
-     int opaque;
- };
- 
-@@ -3586,36 +3597,34 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
- 
- static int
- virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
--                                         virJSONValuePtr json)
-+                                         virJSONValuePtr json,
-+                                         const char *jsonstr)
- {
-     g_autoptr(virJSONValue) deflattened = NULL;
-     virJSONValuePtr file;
-     const char *drvname;
-     size_t i;
--    g_autofree char *str = NULL;
- 
-     if (!(deflattened = virJSONValueObjectDeflatten(json)))
-         return -1;
- 
-     if (!(file = virJSONValueObjectGetObject(deflattened, "file"))) {
--        str = virJSONValueToString(json, false);
-         virReportError(VIR_ERR_INVALID_ARG,
-                        _("JSON backing volume definition '%s' lacks 'file' object"),
--                       NULLSTR(str));
-+                       jsonstr);
-         return -1;
-     }
- 
-     if (!(drvname = virJSONValueObjectGetString(file, "driver"))) {
--        str = virJSONValueToString(json, false);
-         virReportError(VIR_ERR_INVALID_ARG,
-                        _("JSON backing volume definition '%s' lacks driver name"),
--                       NULLSTR(str));
-+                       jsonstr);
-         return -1;
-     }
- 
-     for (i = 0; i < G_N_ELEMENTS(jsonParsers); i++) {
-         if (STREQ(drvname, jsonParsers[i].drvname))
--            return jsonParsers[i].func(src, file, jsonParsers[i].opaque);
-+            return jsonParsers[i].func(src, file, jsonstr, jsonParsers[i].opaque);
-     }
- 
-     virReportError(VIR_ERR_INTERNAL_ERROR,
-@@ -3634,7 +3643,7 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src,
-     if (!(root = virJSONValueFromString(json)))
-         return -1;
- 
--    return virStorageSourceParseBackingJSONInternal(src, root);
-+    return virStorageSourceParseBackingJSONInternal(src, root, json);
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Prevent-arbitrary-nesting-with-format-drivers.patch b/SOURCES/libvirt-virStorageSourceParseBackingJSON-Prevent-arbitrary-nesting-with-format-drivers.patch
deleted file mode 100644
index 331ad39..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingJSON-Prevent-arbitrary-nesting-with-format-drivers.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 57eb21eb48d76798f0c990c839df148301e9cb0e Mon Sep 17 00:00:00 2001
-Message-Id: <57eb21eb48d76798f0c990c839df148301e9cb0e@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:10 +0100
-Subject: [PATCH] virStorageSourceParseBackingJSON: Prevent arbitrary nesting
- with format drivers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Since we parse attributes for 'raw' which is a format driver and thus
-has nested 'file' structure we must prevent that this isn't nested
-arbitrarily.
-
-Add a flag for the function which allows parsing of 'format' type
-drivers only on the first pass.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit fd70f1b4d324361bb9a708762631690aca043178)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-Message-Id: <b5ed395d736eb8570467e2eafb44288d77d416e7.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 23 +++++++++++++++++------
- 1 file changed, 17 insertions(+), 6 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index dd05de188f..b02fad92b6 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3052,7 +3052,8 @@ virStorageSourceParseBackingColon(virStorageSourcePtr src,
- static int
- virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
-                                          virJSONValuePtr json,
--                                         const char *jsonstr);
-+                                         const char *jsonstr,
-+                                         bool allowformat);
- 
- 
- static int
-@@ -3531,7 +3532,7 @@ virStorageSourceParseBackingJSONRaw(virStorageSourcePtr src,
-         return -1;
-     }
- 
--    return virStorageSourceParseBackingJSONInternal(src, file, jsonstr);
-+    return virStorageSourceParseBackingJSONInternal(src, file, jsonstr, false);
- }
- 
- 
-@@ -3606,7 +3607,8 @@ static const struct virStorageSourceJSONDriverParser jsonParsers[] = {
- static int
- virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
-                                          virJSONValuePtr json,
--                                         const char *jsonstr)
-+                                         const char *jsonstr,
-+                                         bool allowformat)
- {
-     const char *drvname;
-     size_t i;
-@@ -3619,8 +3621,17 @@ virStorageSourceParseBackingJSONInternal(virStorageSourcePtr src,
-     }
- 
-     for (i = 0; i < G_N_ELEMENTS(jsonParsers); i++) {
--        if (STREQ(drvname, jsonParsers[i].drvname))
--            return jsonParsers[i].func(src, json, jsonstr, jsonParsers[i].opaque);
-+        if (STRNEQ(drvname, jsonParsers[i].drvname))
-+            continue;
-+
-+        if (jsonParsers[i].formatdriver && !allowformat) {
-+            virReportError(VIR_ERR_INVALID_ARG,
-+                           _("JSON backing volume definition '%s' must not have nested format drivers"),
-+                           jsonstr);
-+            return -1;
-+        }
-+
-+        return jsonParsers[i].func(src, json, jsonstr, jsonParsers[i].opaque);
-     }
- 
-     virReportError(VIR_ERR_INTERNAL_ERROR,
-@@ -3655,7 +3666,7 @@ virStorageSourceParseBackingJSON(virStorageSourcePtr src,
-     if (!file)
-         file = deflattened;
- 
--    return virStorageSourceParseBackingJSONInternal(src, file, json);
-+    return virStorageSourceParseBackingJSONInternal(src, file, json, true);
- }
- 
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingJSONRaw-Parse-offset-and-size-attributes.patch b/SOURCES/libvirt-virStorageSourceParseBackingJSONRaw-Parse-offset-and-size-attributes.patch
deleted file mode 100644
index 2a16358..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingJSONRaw-Parse-offset-and-size-attributes.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 32d58910c9d5a775315a42a76666844927c4dad1 Mon Sep 17 00:00:00 2001
-Message-Id: <32d58910c9d5a775315a42a76666844927c4dad1@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Wed, 19 Feb 2020 15:10:26 +0100
-Subject: [PATCH] virStorageSourceParseBackingJSONRaw: Parse 'offset' and
- 'size' attributes
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-If the parsed 'raw' format JSON string has 'offset' or 'size' attributes
-parse them as the format slice.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1791788
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit e8a819e87f806e6c6690614c40dbeab0bd2e800e)
-Message-Id: <88f7d393b22949a8d6afdae44f8215aa06e65329.1582120424.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 20 ++++++++++++++++++++
- tests/virstoragetest.c    |  6 +++++-
- 2 files changed, 25 insertions(+), 1 deletion(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 0be4168d6e..fcbc97d96a 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3551,8 +3551,28 @@ virStorageSourceParseBackingJSONRaw(virStorageSourcePtr src,
-                                     const char *jsonstr,
-                                     int opaque G_GNUC_UNUSED)
- {
-+    bool has_offset = virJSONValueObjectHasKey(json, "offset");
-+    bool has_size = virJSONValueObjectHasKey(json, "size");
-     virJSONValuePtr file;
- 
-+    if (has_offset || has_size) {
-+        src->sliceStorage = g_new0(virStorageSourceSlice, 1);
-+
-+        if (has_offset &&
-+            virJSONValueObjectGetNumberUlong(json, "offset", &src->sliceStorage->offset) < 0) {
-+            virReportError(VIR_ERR_INVALID_ARG, "%s",
-+                           _("malformed 'offset' property of 'raw' driver"));
-+            return -1;
-+        }
-+
-+        if (has_size &&
-+            virJSONValueObjectGetNumberUlong(json, "size", &src->sliceStorage->size) < 0) {
-+            virReportError(VIR_ERR_INVALID_ARG, "%s",
-+                           _("malformed 'size' property of 'raw' driver"));
-+            return -1;
-+        }
-+    }
-+
-     /* 'raw' is a format driver so it can have protocol driver children */
-     if (!(file = virJSONValueObjectGetObject(json, "file"))) {
-         virReportError(VIR_ERR_INVALID_ARG,
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 25d41f0de4..39040bf4cb 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1600,7 +1600,11 @@ mymain(void)
-                                                 "\"filename\": \"/tmp/testfle\""
-                                               "}"
-                                   "}",
--                            "<source file='/tmp/testfle'/>\n", 0);
-+                            "<source file='/tmp/testfle'>\n"
-+                            "  <slices>\n"
-+                            "    <slice type='storage' offset='10752' size='4063232'/>\n"
-+                            "  </slices>\n"
-+                            "</source>\n", 0);
- 
- #endif /* WITH_YAJL */
- 
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingJSONUri-Handle-undocumented-value-off-for-sslverify.patch b/SOURCES/libvirt-virStorageSourceParseBackingJSONUri-Handle-undocumented-value-off-for-sslverify.patch
deleted file mode 100644
index 8627659..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingJSONUri-Handle-undocumented-value-off-for-sslverify.patch
+++ /dev/null
@@ -1,92 +0,0 @@
-From a5496b797498dc5393ccbf2775a2947e67a804eb Mon Sep 17 00:00:00 2001
-Message-Id: <a5496b797498dc5393ccbf2775a2947e67a804eb@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:08 +0100
-Subject: [PATCH] virStorageSourceParseBackingJSONUri: Handle undocumented
- value 'off' for sslverify
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-libguestfs abuses a quirk of qemu's parser to accept also other variants
-of the 'sslverify' field which would be valid on the command line but
-are not documented in the QMP schema.
-
-If we encounter the 'off' string instead of an boolean handle it rather
-than erroring out to continue support of pre-blockdev configurations.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 5179cc6b08a06fad92e8674d048fc0327d48f79e)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <8f277a7bede59b7c8b6de9db9c7726b6cbe02192.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 21 ++++++++++++++-------
- tests/virstoragetest.c    | 15 +++++++++++++++
- 2 files changed, 29 insertions(+), 7 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 931f2db6e9..9eca186e99 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3278,16 +3278,23 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src,
-     if (protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
-         protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
-         if (virJSONValueObjectHasKey(json, "sslverify")) {
-+            const char *tmpstr;
-             bool tmp;
- 
--            if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
--                virReportError(VIR_ERR_INVALID_ARG,
--                               _("malformed 'sslverify' field in backing store definition '%s'"),
--                               jsonstr);
--                return -1;
--            }
-+            /* libguestfs still uses undocumented legacy value of 'off' */
-+            if ((tmpstr = virJSONValueObjectGetString(json, "sslverify")) &&
-+                STREQ(tmpstr, "off")) {
-+                src->sslverify = VIR_TRISTATE_BOOL_NO;
-+            } else {
-+                if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
-+                    virReportError(VIR_ERR_INVALID_ARG,
-+                                   _("malformed 'sslverify' field in backing store definition '%s'"),
-+                                   jsonstr);
-+                    return -1;
-+                }
- 
--            src->sslverify = virTristateBoolFromBool(tmp);
-+                src->sslverify = virTristateBoolFromBool(tmp);
-+            }
-         }
-     }
- 
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index 63b991eb71..ca428f5ca7 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1621,6 +1621,21 @@ mymain(void)
-                            "  <timeout seconds='2000'/>\n"
-                            "</source>\n", 0);
- 
-+    TEST_BACKING_PARSE_FULL("json:{ \"file.cookie\": \"vmware_soap_session=\\\"0c8db85112873a79b7ef74f294cb70ef7f\\\"\","
-+                                   "\"file.sslverify\": \"off\","
-+                                   "\"file.driver\": \"https\","
-+                                   "\"file.url\": \"https://host/folder/esx6.5-rhel7.7-x86%5f64/esx6.5-rhel7.7-x86%5f64-flat.vmdk?dcPath=data&dsName=esx6.5-matrix\","
-+                                   "\"file.timeout\": 2000"
-+                                 "}",
-+                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk'>\n"
-+                           "  <host name='host' port='443'/>\n"
-+                           "  <ssl verify='no'/>\n"
-+                           "  <cookies>\n"
-+                           "    <cookie name='vmware_soap_session'>&quot;0c8db85112873a79b7ef74f294cb70ef7f&quot;</cookie>\n"
-+                           "  </cookies>\n"
-+                           "  <timeout seconds='2000'/>\n"
-+                           "</source>\n", 0);
-+
- #endif /* WITH_YAJL */
- 
-  cleanup:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virStorageSourceParseBackingURI-Preserve-query-string-of-URI-for-http-s.patch b/SOURCES/libvirt-virStorageSourceParseBackingURI-Preserve-query-string-of-URI-for-http-s.patch
deleted file mode 100644
index 4cd7559..0000000
--- a/SOURCES/libvirt-virStorageSourceParseBackingURI-Preserve-query-string-of-URI-for-http-s.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From a08b866ca5b7ae45d25a584d5e61855015b80794 Mon Sep 17 00:00:00 2001
-Message-Id: <a08b866ca5b7ae45d25a584d5e61855015b80794@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 30 Mar 2020 17:21:47 +0200
-Subject: [PATCH] virStorageSourceParseBackingURI: Preserve query string of URI
- for http(s)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-For http/https URIs we need to preserve the query part as it may be
-important to refer to the image.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 544ef82d05a675d9c6f939c67635ed46c094b164)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <ecddbeb737c76791d4372c861343da2fc8611371.1585581552.git.pkrempa@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virstoragefile.c | 13 ++++++++++---
- tests/virstoragetest.c    |  4 ++--
- 2 files changed, 12 insertions(+), 5 deletions(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 4082e3f5f7..aba315d93b 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -2853,9 +2853,16 @@ virStorageSourceParseBackingURI(virStorageSourcePtr src,
-         return -1;
-     }
- 
--    /* handle socket stored as a query */
--    if (uri->query)
--        src->hosts->socket = g_strdup(STRSKIP(uri->query, "socket="));
-+    if (uri->query) {
-+        if (src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTP ||
-+            src->protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS) {
-+            src->query = g_strdup(uri->query);
-+        } else {
-+            /* handle socket stored as a query */
-+            if (STRPREFIX(uri->query, "socket="))
-+                src->hosts->socket = g_strdup(STRSKIP(uri->query, "socket="));
-+        }
-+    }
- 
-     /* uri->path is NULL if the URI does not contain slash after host:
-      * transport://host:port */
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index d9244fdfe8..fe8f6dd36f 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1613,7 +1613,7 @@ mymain(void)
-                                    "\"file.url\": \"https://host/folder/esx6.5-rhel7.7-x86%5f64/esx6.5-rhel7.7-x86%5f64-flat.vmdk?dcPath=data&dsName=esx6.5-matrix\","
-                                    "\"file.timeout\": 2000"
-                                  "}",
--                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk'>\n"
-+                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk' query='dcPath=data&amp;dsName=esx6.5-matrix'>\n"
-                            "  <host name='host' port='443'/>\n"
-                            "  <ssl verify='no'/>\n"
-                            "  <cookies>\n"
-@@ -1628,7 +1628,7 @@ mymain(void)
-                                    "\"file.url\": \"https://host/folder/esx6.5-rhel7.7-x86%5f64/esx6.5-rhel7.7-x86%5f64-flat.vmdk?dcPath=data&dsName=esx6.5-matrix\","
-                                    "\"file.timeout\": 2000"
-                                  "}",
--                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk'>\n"
-+                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk' query='dcPath=data&amp;dsName=esx6.5-matrix'>\n"
-                            "  <host name='host' port='443'/>\n"
-                            "  <ssl verify='no'/>\n"
-                            "  <cookies>\n"
--- 
-2.26.0
-
diff --git a/SOURCES/libvirt-virStorageSourceUpdateCapacity-Drop-probe-argument.patch b/SOURCES/libvirt-virStorageSourceUpdateCapacity-Drop-probe-argument.patch
deleted file mode 100644
index 05c9a1f..0000000
--- a/SOURCES/libvirt-virStorageSourceUpdateCapacity-Drop-probe-argument.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From f27731da867f6a0784c1f2a222d5b7663c418784 Mon Sep 17 00:00:00 2001
-Message-Id: <f27731da867f6a0784c1f2a222d5b7663c418784@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Fri, 28 Feb 2020 10:24:36 +0100
-Subject: [PATCH] virStorageSourceUpdateCapacity: Drop 'probe' argument
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Both callers pass false. Since we frown upon format probing, remove the
-unused possibility to do the probing.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 35d1f5bd145163edf4f05c377b488ffa50d527d6)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1798148
-Message-Id: <c2cfa21552eee3b2cfca74096dfe9d301bbf4e61.1582881363.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/qemu/qemu_driver.c     |  2 +-
- src/storage/storage_util.c |  2 +-
- src/util/virstoragefile.c  | 23 ++++++-----------------
- src/util/virstoragefile.h  |  3 +--
- 4 files changed, 9 insertions(+), 21 deletions(-)
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index ac3a7ad282..d346446444 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -12221,7 +12221,7 @@ qemuStorageLimitsRefresh(virQEMUDriverPtr driver,
-     if (virStorageSourceUpdateBackingSizes(src, fd, &sb) < 0)
-         goto cleanup;
- 
--    if (virStorageSourceUpdateCapacity(src, buf, len, false) < 0)
-+    if (virStorageSourceUpdateCapacity(src, buf, len) < 0)
-         goto cleanup;
- 
-     /* If guest is not using raw disk format and is on a host block
-diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
-index ebc262278d..c562cf313f 100644
---- a/src/storage/storage_util.c
-+++ b/src/storage/storage_util.c
-@@ -1755,7 +1755,7 @@ storageBackendUpdateVolTargetInfo(virStorageVolType voltype,
-             }
-         }
- 
--        if (virStorageSourceUpdateCapacity(target, buf, len, false) < 0)
-+        if (virStorageSourceUpdateCapacity(target, buf, len) < 0)
-             return -1;
-     }
- 
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 5a74034ec4..391e2ce86f 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3964,18 +3964,15 @@ virStorageSourceUpdateBackingSizes(virStorageSourcePtr src,
-  * @src: disk source definition structure
-  * @buf: buffer to the storage file header
-  * @len: length of the storage file header
-- * @probe: allow probe
-  *
-- * Update the storage @src capacity. This may involve probing the storage
-- * @src in order to "see" if we can recognize what exists.
-+ * Update the storage @src capacity.
-  *
-  * Returns 0 on success, -1 on error.
-  */
- int
- virStorageSourceUpdateCapacity(virStorageSourcePtr src,
-                                char *buf,
--                               ssize_t len,
--                               bool probe)
-+                               ssize_t len)
- {
-     int format = src->format;
-     g_autoptr(virStorageSource) meta = NULL;
-@@ -3984,18 +3981,10 @@ virStorageSourceUpdateCapacity(virStorageSourcePtr src,
-      * the metadata has a capacity, use that, otherwise fall back to
-      * physical size.  */
-     if (format == VIR_STORAGE_FILE_NONE) {
--        if (!probe) {
--            virReportError(VIR_ERR_INTERNAL_ERROR,
--                           _("no disk format for %s and probing is disabled"),
--                           src->path);
--            return -1;
--        }
--
--        if ((format = virStorageFileProbeFormatFromBuf(src->path,
--                                                       buf, len)) < 0)
--            return -1;
--
--        src->format = format;
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("no disk format for %s was specified"),
-+                       src->path);
-+        return -1;
-     }
- 
-     if (format == VIR_STORAGE_FILE_RAW && !src->encryption) {
-diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
-index 1f41e6e357..2a684fd746 100644
---- a/src/util/virstoragefile.h
-+++ b/src/util/virstoragefile.h
-@@ -472,8 +472,7 @@ int virStorageSourceUpdatePhysicalSize(virStorageSourcePtr src,
- int virStorageSourceUpdateBackingSizes(virStorageSourcePtr src,
-                                        int fd, struct stat const *sb);
- int virStorageSourceUpdateCapacity(virStorageSourcePtr src,
--                                   char *buf, ssize_t len,
--                                   bool probe);
-+                                   char *buf, ssize_t len);
- 
- int virStorageSourceNewFromBacking(virStorageSourcePtr parent,
-                                    virStorageSourcePtr *backing);
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virbuftest-declare-testBufAddStrData-earlier.patch b/SOURCES/libvirt-virbuftest-declare-testBufAddStrData-earlier.patch
deleted file mode 100644
index 74889f6..0000000
--- a/SOURCES/libvirt-virbuftest-declare-testBufAddStrData-earlier.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 2056fea539669061bec0d707511ff0f1391953b0 Mon Sep 17 00:00:00 2001
-Message-Id: <2056fea539669061bec0d707511ff0f1391953b0@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:05 +0100
-Subject: [PATCH] virbuftest: declare testBufAddStrData earlier
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Move the declaration to the beginning of the file for reuse.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit ebd44715f19a81f16b2e263b262c0099fe94a0b6)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <5bd2b1b3dfb32ca39c8e1d10810385d483d0643a.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virbuftest.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/tests/virbuftest.c b/tests/virbuftest.c
-index bb7fa9e2e9..bb606c1c28 100644
---- a/tests/virbuftest.c
-+++ b/tests/virbuftest.c
-@@ -9,6 +9,11 @@
- 
- #define VIR_FROM_THIS VIR_FROM_NONE
- 
-+struct testBufAddStrData {
-+    const char *data;
-+    const char *expect;
-+};
-+
- static int testBufAutoIndent(const void *data G_GNUC_UNUSED)
- {
-     virBuffer bufinit = VIR_BUFFER_INITIALIZER;
-@@ -235,11 +240,6 @@ static int testBufAddBuffer(const void *data G_GNUC_UNUSED)
-     return ret;
- }
- 
--struct testBufAddStrData {
--    const char *data;
--    const char *expect;
--};
--
- static int
- testBufAddStr(const void *opaque)
- {
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virbuftest-remove-extra-G_GNUC_UNUSED-markers.patch b/SOURCES/libvirt-virbuftest-remove-extra-G_GNUC_UNUSED-markers.patch
deleted file mode 100644
index b9da409..0000000
--- a/SOURCES/libvirt-virbuftest-remove-extra-G_GNUC_UNUSED-markers.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From f6916b32bbbd89fb3faf6ad2c21cb975e15a8b18 Mon Sep 17 00:00:00 2001
-Message-Id: <f6916b32bbbd89fb3faf6ad2c21cb975e15a8b18@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:02 +0100
-Subject: [PATCH] virbuftest: remove extra G_GNUC_UNUSED markers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-These functions do use the opaque argument.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 08de39a9c7a65f17292eeef783d0598c2dfc8260)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <64efa6130de1732be0feeaf4f2e78c0aecaf38c5.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virbuftest.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tests/virbuftest.c b/tests/virbuftest.c
-index 56a6ece8f6..f8eadea25a 100644
---- a/tests/virbuftest.c
-+++ b/tests/virbuftest.c
-@@ -244,7 +244,7 @@ struct testBufAddStrData {
- };
- 
- static int
--testBufAddStr(const void *opaque G_GNUC_UNUSED)
-+testBufAddStr(const void *opaque)
- {
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-@@ -277,7 +277,7 @@ testBufAddStr(const void *opaque G_GNUC_UNUSED)
- 
- 
- static int
--testBufEscapeStr(const void *opaque G_GNUC_UNUSED)
-+testBufEscapeStr(const void *opaque)
- {
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virbuftest-remove-unnecessary-labels.patch b/SOURCES/libvirt-virbuftest-remove-unnecessary-labels.patch
deleted file mode 100644
index fa5f2bf..0000000
--- a/SOURCES/libvirt-virbuftest-remove-unnecessary-labels.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-From 868b112fabc71f2247d2e4880f207f31727b549c Mon Sep 17 00:00:00 2001
-Message-Id: <868b112fabc71f2247d2e4880f207f31727b549c@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:04 +0100
-Subject: [PATCH] virbuftest: remove unnecessary labels
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Remove the ret variables and labels from functions that no longer need
-them.
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 662876723cdfb138ca31847fdb3a84bbe3cadea5)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <8d02662ab00fa2c7088912148fb1131f24623d32.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virbuftest.c | 40 ++++++++++++----------------------------
- 1 file changed, 12 insertions(+), 28 deletions(-)
-
-diff --git a/tests/virbuftest.c b/tests/virbuftest.c
-index 2b241424ad..bb7fa9e2e9 100644
---- a/tests/virbuftest.c
-+++ b/tests/virbuftest.c
-@@ -246,7 +246,6 @@ testBufAddStr(const void *opaque)
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     g_autofree char *actual = NULL;
--    int ret = -1;
- 
-     virBufferAddLit(&buf, "<c>\n");
-     virBufferAdjustIndent(&buf, 2);
-@@ -256,19 +255,16 @@ testBufAddStr(const void *opaque)
- 
-     if (!(actual = virBufferContentAndReset(&buf))) {
-         VIR_TEST_DEBUG("buf is empty");
--        goto cleanup;
-+        return -1;
-     }
- 
-     if (STRNEQ_NULLABLE(actual, data->expect)) {
-         VIR_TEST_DEBUG("testBufAddStr(): Strings don't match:");
-         virTestDifference(stderr, data->expect, actual);
--        goto cleanup;
-+        return -1;
-     }
- 
--    ret = 0;
--
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
-@@ -278,7 +274,6 @@ testBufEscapeStr(const void *opaque)
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     g_autofree char *actual = NULL;
--    int ret = -1;
- 
-     virBufferAddLit(&buf, "<c>\n");
-     virBufferAdjustIndent(&buf, 2);
-@@ -288,19 +283,16 @@ testBufEscapeStr(const void *opaque)
- 
-     if (!(actual = virBufferContentAndReset(&buf))) {
-         VIR_TEST_DEBUG("buf is empty");
--        goto cleanup;
-+        return -1;
-     }
- 
-     if (STRNEQ_NULLABLE(actual, data->expect)) {
-         VIR_TEST_DEBUG("testBufEscapeStr(): Strings don't match:");
-         virTestDifference(stderr, data->expect, actual);
--        goto cleanup;
-+        return -1;
-     }
- 
--    ret = 0;
--
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
-@@ -310,25 +302,21 @@ testBufEscapeRegex(const void *opaque)
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     g_autofree char *actual = NULL;
--    int ret = -1;
- 
-     virBufferEscapeRegex(&buf, "%s", data->data);
- 
-     if (!(actual = virBufferContentAndReset(&buf))) {
-         VIR_TEST_DEBUG("testBufEscapeRegex: buf is empty");
--        goto cleanup;
-+        return -1;
-     }
- 
-     if (STRNEQ_NULLABLE(actual, data->expect)) {
-         VIR_TEST_DEBUG("testBufEscapeRegex: Strings don't match:");
-         virTestDifference(stderr, data->expect, actual);
--        goto cleanup;
-+        return -1;
-     }
- 
--    ret = 0;
--
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
-@@ -337,7 +325,6 @@ testBufSetIndent(const void *opaque G_GNUC_UNUSED)
- {
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
-     g_autofree char *actual = NULL;
--    int ret = -1;
- 
-     virBufferSetIndent(&buf, 11);
-     virBufferAddLit(&buf, "test\n");
-@@ -345,17 +332,14 @@ testBufSetIndent(const void *opaque G_GNUC_UNUSED)
-     virBufferAddLit(&buf, "test2\n");
- 
-     if (!(actual = virBufferContentAndReset(&buf)))
--        goto cleanup;
-+        return -1;
- 
-     if (STRNEQ(actual, "           test\n  test2\n")) {
-         VIR_TEST_DEBUG("testBufSetIndent: expected indent not set");
--        goto cleanup;
-+        return -1;
-     }
- 
--    ret = 0;
--
-- cleanup:
--    return ret;
-+    return 0;
- }
- 
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virbuftest-use-field-names-when-initalizing-test-info.patch b/SOURCES/libvirt-virbuftest-use-field-names-when-initalizing-test-info.patch
deleted file mode 100644
index 77364f5..0000000
--- a/SOURCES/libvirt-virbuftest-use-field-names-when-initalizing-test-info.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 401d5f108c69a01fca8843868e12d102e75e8dd2 Mon Sep 17 00:00:00 2001
-Message-Id: <401d5f108c69a01fca8843868e12d102e75e8dd2@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:06 +0100
-Subject: [PATCH] virbuftest: use field names when initalizing test info
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Allow adding new fields without changing all the macros.
-
-Otherwise the compiler complains that not all have been initialized:
-../../tests/virbuftest.c:419:5: error: missing field 'arg' initializer [-Werror,-Wmissing-field-initializers]
-    DO_TEST_ESCAPE("<td></td><td></td>",
-    ^
-../../tests/virbuftest.c:414:56: note: expanded from macro 'DO_TEST_ESCAPE'
-        struct testBufAddStrData info = { data, expect }; \
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit 46afdc21207d3276f0e100b6e54ca41ee5f12e99)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <b5da3d53ae4fc1a592b41230f3b838357cc57d30.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virbuftest.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/tests/virbuftest.c b/tests/virbuftest.c
-index bb606c1c28..1780b62bf4 100644
---- a/tests/virbuftest.c
-+++ b/tests/virbuftest.c
-@@ -372,9 +372,9 @@ mymain(void)
-     DO_TEST("set indent", testBufSetIndent);
-     DO_TEST("autoclean", testBufferAutoclean);
- 
--#define DO_TEST_ADD_STR(DATA, EXPECT) \
-+#define DO_TEST_ADD_STR(_data, _expect) \
-     do { \
--        struct testBufAddStrData info = { DATA, EXPECT }; \
-+        struct testBufAddStrData info = { .data = _data, .expect = _expect }; \
-         if (virTestRun("Buf: AddStr", testBufAddStr, &info) < 0) \
-             ret = -1; \
-     } while (0)
-@@ -384,9 +384,9 @@ mymain(void)
-     DO_TEST_ADD_STR("<a/>\n", "<c>\n  <a/>\n</c>");
-     DO_TEST_ADD_STR("<b>\n  <a/>\n</b>\n", "<c>\n  <b>\n    <a/>\n  </b>\n</c>");
- 
--#define DO_TEST_ESCAPE(data, expect) \
-+#define DO_TEST_ESCAPE(_data, _expect) \
-     do { \
--        struct testBufAddStrData info = { data, expect }; \
-+        struct testBufAddStrData info = { .data = _data, .expect = _expect }; \
-         if (virTestRun("Buf: EscapeStr", testBufEscapeStr, &info) < 0) \
-             ret = -1; \
-     } while (0)
-@@ -400,9 +400,9 @@ mymain(void)
-     DO_TEST_ESCAPE("\x01\x01\x02\x03\x05\x08",
-                    "<c>\n  <el></el>\n</c>");
- 
--#define DO_TEST_ESCAPE_REGEX(data, expect) \
-+#define DO_TEST_ESCAPE_REGEX(_data, _expect) \
-     do { \
--        struct testBufAddStrData info = { data, expect }; \
-+        struct testBufAddStrData info = { .data = _data, .expect = _expect }; \
-         if (virTestRun("Buf: EscapeRegex", testBufEscapeRegex, &info) < 0) \
-             ret = -1; \
-     } while (0)
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virbuftest-use-g_autofree.patch b/SOURCES/libvirt-virbuftest-use-g_autofree.patch
deleted file mode 100644
index 9a0065f..0000000
--- a/SOURCES/libvirt-virbuftest-use-g_autofree.patch
+++ /dev/null
@@ -1,148 +0,0 @@
-From e3824886db80dba4e524aa737abb3188373076a6 Mon Sep 17 00:00:00 2001
-Message-Id: <e3824886db80dba4e524aa737abb3188373076a6@dist-git>
-From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
-Date: Fri, 13 Mar 2020 13:08:03 +0100
-Subject: [PATCH] virbuftest: use g_autofree
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Ján Tomko <jtomko@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-(cherry picked from commit b0138d55f72ae64c2bf1abb4ab8cc7eea217ca04)
-
-Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <e2251697da65f2cd0566647d3270117744ff0b21.1584101247.git.mprivozn@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- tests/virbuftest.c | 21 +++++++--------------
- 1 file changed, 7 insertions(+), 14 deletions(-)
-
-diff --git a/tests/virbuftest.c b/tests/virbuftest.c
-index f8eadea25a..2b241424ad 100644
---- a/tests/virbuftest.c
-+++ b/tests/virbuftest.c
-@@ -15,7 +15,7 @@ static int testBufAutoIndent(const void *data G_GNUC_UNUSED)
-     virBufferPtr buf = &bufinit;
-     const char expected[] =
-         "  1\n  2\n  3\n  4\n  5\n  6\n  7\n  &amp;\n  8\n  9\n  10\n  ' 11'\n";
--    char *result = NULL;
-+    g_autofree char *result = NULL;
-     int ret = 0;
- 
-     if (virBufferGetIndent(buf) != 0 ||
-@@ -85,7 +85,6 @@ static int testBufAutoIndent(const void *data G_GNUC_UNUSED)
-         virTestDifference(stderr, expected, result);
-         ret = -1;
-     }
--    VIR_FREE(result);
-     return ret;
- }
- 
-@@ -93,7 +92,7 @@ static int testBufTrim(const void *data G_GNUC_UNUSED)
- {
-     virBuffer bufinit = VIR_BUFFER_INITIALIZER;
-     virBufferPtr buf = NULL;
--    char *result = NULL;
-+    g_autofree char *result = NULL;
-     const char *expected = "a,b";
-     int ret = -1;
- 
-@@ -123,7 +122,6 @@ static int testBufTrim(const void *data G_GNUC_UNUSED)
- 
-  cleanup:
-     virBufferFreeAndReset(buf);
--    VIR_FREE(result);
-     return ret;
- }
- 
-@@ -133,7 +131,7 @@ static int testBufAddBuffer(const void *data G_GNUC_UNUSED)
-     virBuffer buf2 = VIR_BUFFER_INITIALIZER;
-     virBuffer buf3 = VIR_BUFFER_INITIALIZER;
-     int ret = -1;
--    char *result = NULL;
-+    g_autofree char *result = NULL;
-     const char *expected = \
- "  A long time ago, in a galaxy far,\n" \
- "  far away...\n" \
-@@ -234,7 +232,6 @@ static int testBufAddBuffer(const void *data G_GNUC_UNUSED)
-  cleanup:
-     virBufferFreeAndReset(&buf1);
-     virBufferFreeAndReset(&buf2);
--    VIR_FREE(result);
-     return ret;
- }
- 
-@@ -248,7 +245,7 @@ testBufAddStr(const void *opaque)
- {
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
--    char *actual;
-+    g_autofree char *actual = NULL;
-     int ret = -1;
- 
-     virBufferAddLit(&buf, "<c>\n");
-@@ -271,7 +268,6 @@ testBufAddStr(const void *opaque)
-     ret = 0;
- 
-  cleanup:
--    VIR_FREE(actual);
-     return ret;
- }
- 
-@@ -281,7 +277,7 @@ testBufEscapeStr(const void *opaque)
- {
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
--    char *actual;
-+    g_autofree char *actual = NULL;
-     int ret = -1;
- 
-     virBufferAddLit(&buf, "<c>\n");
-@@ -304,7 +300,6 @@ testBufEscapeStr(const void *opaque)
-     ret = 0;
- 
-  cleanup:
--    VIR_FREE(actual);
-     return ret;
- }
- 
-@@ -314,7 +309,7 @@ testBufEscapeRegex(const void *opaque)
- {
-     const struct testBufAddStrData *data = opaque;
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
--    char *actual;
-+    g_autofree char *actual = NULL;
-     int ret = -1;
- 
-     virBufferEscapeRegex(&buf, "%s", data->data);
-@@ -333,7 +328,6 @@ testBufEscapeRegex(const void *opaque)
-     ret = 0;
- 
-  cleanup:
--    VIR_FREE(actual);
-     return ret;
- }
- 
-@@ -342,7 +336,7 @@ static int
- testBufSetIndent(const void *opaque G_GNUC_UNUSED)
- {
-     virBuffer buf = VIR_BUFFER_INITIALIZER;
--    char *actual;
-+    g_autofree char *actual = NULL;
-     int ret = -1;
- 
-     virBufferSetIndent(&buf, 11);
-@@ -361,7 +355,6 @@ testBufSetIndent(const void *opaque G_GNUC_UNUSED)
-     ret = 0;
- 
-  cleanup:
--    VIR_FREE(actual);
-     return ret;
- }
- 
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-vircgroup-correctly-free-nested-virCgroupPtr.patch b/SOURCES/libvirt-vircgroup-correctly-free-nested-virCgroupPtr.patch
deleted file mode 100644
index e72b84d..0000000
--- a/SOURCES/libvirt-vircgroup-correctly-free-nested-virCgroupPtr.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 7cdf83f2e699a9c9b8cafbc09dbd21d2cb3a3b45 Mon Sep 17 00:00:00 2001
-Message-Id: <7cdf83f2e699a9c9b8cafbc09dbd21d2cb3a3b45@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:34:01 +0100
-Subject: [PATCH] vircgroup: correctly free nested virCgroupPtr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes: 184245f53b94fc84f727eb6e8a2aa52df02d69c0
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 6a1f5e8a4f3184bb54b9dcaa3afcf8c97adccb62)
-
-Conflicts:
-    src/util/vircgroup.c
-        - missing upstream g_free rewrite
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <bc2f0207bc684ca81c45b6234a7aaba5227867d7.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/vircgroup.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
-index d0f867ba7f..0a6404e97c 100644
---- a/src/util/vircgroup.c
-+++ b/src/util/vircgroup.c
-@@ -3711,7 +3711,8 @@ virCgroupFree(virCgroupPtr *group)
-     VIR_FREE((*group)->unified.mountPoint);
-     VIR_FREE((*group)->unified.placement);
-     VIR_FREE((*group)->unitName);
--    VIR_FREE((*group)->nested);
-+
-+    virCgroupFree(&(*group)->nested);
- 
-     VIR_FREE((*group)->path);
-     VIR_FREE(*group);
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroup-enforce-range-limit-for-cpu.shares.patch b/SOURCES/libvirt-vircgroup-enforce-range-limit-for-cpu.shares.patch
deleted file mode 100644
index d800b77..0000000
--- a/SOURCES/libvirt-vircgroup-enforce-range-limit-for-cpu.shares.patch
+++ /dev/null
@@ -1,147 +0,0 @@
-From c82c32f60579d148f37064e5156e857fa3c84c2f Mon Sep 17 00:00:00 2001
-Message-Id: <c82c32f60579d148f37064e5156e857fa3c84c2f@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 4 Mar 2021 12:57:57 +0100
-Subject: [PATCH] vircgroup: enforce range limit for cpu.shares
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Before the conversion to using systemd DBus API to set the cpu.shares
-there was some magic conversion done by kernel which was documented in
-virsh manpage as well. Now systemd errors out if the value is out of
-range.
-
-Since we enforce the range for other cpu cgroup attributes 'quota' and
-'period' it makes sense to do the same for 'shares' as well.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 1d9d9961ada6c2d0b9facae0ef8be4f459cf7fc9)
-
-Conflicts:
-    docs/formatdomain.rst
-    src/conf/domain_validate.c
-        - both are not present in downstream
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <79b9ef9f98b3ab35061f8c4e4acf7b6861d28055.1614858616.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/formatdomain.html.in |  1 +
- docs/manpages/virsh.rst   |  5 +----
- src/conf/domain_conf.c    | 10 ++++++++++
- src/util/vircgroup.h      |  2 ++
- src/util/vircgroupv1.c    | 10 ++++++++++
- src/util/vircgroupv2.c    | 10 ++++++++++
- 6 files changed, 34 insertions(+), 4 deletions(-)
-
-diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
-index 4341e256a8..7ac9523684 100644
---- a/docs/formatdomain.html.in
-+++ b/docs/formatdomain.html.in
-@@ -854,6 +854,7 @@
-         it's a relative measure based on the setting of other VM,
-         e.g. A VM configured with value
-         2048 will get twice as much CPU time as a VM configured with value 1024.
-+        The value should be in range [2, 262144].
-         <span class="since">Since 0.9.0</span>
-       </dd>
-       <dt><code>period</code></dt>
-diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
-index a5b95c1123..01e1c01912 100644
---- a/docs/manpages/virsh.rst
-+++ b/docs/manpages/virsh.rst
-@@ -3704,10 +3704,7 @@ If *--live* is specified, set scheduler information of a running guest.
- If *--config* is specified, affect the next boot of a persistent guest.
- If *--current* is specified, affect the current guest state.
- 
--``Note``: The cpu_shares parameter has a valid value range of 0-262144; Negative
--values are wrapped to positive, and larger values are capped at the maximum.
--Therefore, -1 is a useful shorthand for 262144. On the Linux kernel, the
--values 0 and 1 are automatically converted to a minimal value of 2.
-+``Note``: The cpu_shares parameter has a valid value range of 2-262144.
- 
- ``Note``: The weight and cap parameters are defined only for the
- XEN_CREDIT scheduler.
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 9f6cdb0de8..444657c9a1 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -7026,6 +7026,16 @@ virDomainDefLifecycleActionValidate(const virDomainDef *def)
- static int
- virDomainDefCputuneValidate(const virDomainDef *def)
- {
-+    if (def->cputune.shares > 0 &&
-+        (def->cputune.shares < VIR_CGROUP_CPU_SHARES_MIN ||
-+         def->cputune.shares > VIR_CGROUP_CPU_SHARES_MAX)) {
-+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-+                       _("Value of cputune 'shares' must be in range [%llu, %llu]"),
-+                         VIR_CGROUP_CPU_SHARES_MIN,
-+                         VIR_CGROUP_CPU_SHARES_MAX);
-+        return -1;
-+    }
-+
-     CPUTUNE_VALIDATE_PERIOD(period);
-     CPUTUNE_VALIDATE_PERIOD(global_period);
-     CPUTUNE_VALIDATE_PERIOD(emulator_period);
-diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
-index 1c6edea0be..938cfdfbe3 100644
---- a/src/util/vircgroup.h
-+++ b/src/util/vircgroup.h
-@@ -243,6 +243,8 @@ virCgroupGetDomainTotalCpuStats(virCgroupPtr group,
- int virCgroupSetCpuShares(virCgroupPtr group, unsigned long long shares);
- int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
- 
-+#define VIR_CGROUP_CPU_SHARES_MIN 2LL
-+#define VIR_CGROUP_CPU_SHARES_MAX 262144LL
- #define VIR_CGROUP_CPU_PERIOD_MIN 1000LL
- #define VIR_CGROUP_CPU_PERIOD_MAX 1000000LL
- #define VIR_CGROUP_CPU_QUOTA_MIN 1000LL
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index 49a2cb023e..d417446447 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -1901,6 +1901,16 @@ static int
- virCgroupV1SetCpuShares(virCgroupPtr group,
-                         unsigned long long shares)
- {
-+    if (shares < VIR_CGROUP_CPU_SHARES_MIN ||
-+        shares > VIR_CGROUP_CPU_SHARES_MAX) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("shares '%llu' must be in range [%llu, %llu]"),
-+                       shares,
-+                       VIR_CGROUP_CPU_SHARES_MIN,
-+                       VIR_CGROUP_CPU_SHARES_MAX);
-+        return -1;
-+    }
-+
-     if (group->unitName) {
-         return virCgroupSetValueDBus(group->unitName, "CPUShares",
-                                      "t", shares);
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index a14fc669fb..079fe6a8ec 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -1499,6 +1499,16 @@ static int
- virCgroupV2SetCpuShares(virCgroupPtr group,
-                         unsigned long long shares)
- {
-+    if (shares < VIR_CGROUP_CPU_SHARES_MIN ||
-+        shares > VIR_CGROUP_CPU_SHARES_MAX) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("shares '%llu' must be in range [%llu, %llu]"),
-+                       shares,
-+                       VIR_CGROUP_CPU_SHARES_MIN,
-+                       VIR_CGROUP_CPU_SHARES_MAX);
-+        return -1;
-+    }
-+
-     if (group->unitName) {
-         return virCgroupSetValueDBus(group->unitName, "CPUWeight",
-                                      "t", shares);
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroup-fix-cpu-quota-maximum-limit.patch b/SOURCES/libvirt-vircgroup-fix-cpu-quota-maximum-limit.patch
deleted file mode 100644
index c744ed7..0000000
--- a/SOURCES/libvirt-vircgroup-fix-cpu-quota-maximum-limit.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 92b7a56b1a23d1cf39e810a58a6d7d0b1f500e69 Mon Sep 17 00:00:00 2001
-Message-Id: <92b7a56b1a23d1cf39e810a58a6d7d0b1f500e69@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 21 Jan 2021 10:24:06 -0300
-Subject: [PATCH] vircgroup: fix cpu quota maximum limit
-
-Kernel commit <d505b8af58912ae1e1a211fabc9995b19bd40828> added proper
-check for cpu quota maximum limit to prevent internal overflow.
-
-Even though this change is not present in all kernels it makes sense
-to enforce the same limit in libvirt.
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1750315
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit ed1ba69f5a8132f8c1e73d2a1f142d70de0b564a)
-
-https://bugzilla.redhat.com/1915733
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20210121132406.337681-5-dbarboza@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- src/util/vircgroup.h | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h
-index 83fa74840f..1c6edea0be 100644
---- a/src/util/vircgroup.h
-+++ b/src/util/vircgroup.h
-@@ -246,7 +246,9 @@ int virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares);
- #define VIR_CGROUP_CPU_PERIOD_MIN 1000LL
- #define VIR_CGROUP_CPU_PERIOD_MAX 1000000LL
- #define VIR_CGROUP_CPU_QUOTA_MIN 1000LL
--#define VIR_CGROUP_CPU_QUOTA_MAX 18446744073709551LL
-+/* Based on kernel code ((1ULL << MAX_BW_BITS) - 1) where MAX_BW_BITS is
-+ * (64 - BW_SHIFT) and BW_SHIFT is 20 */
-+#define VIR_CGROUP_CPU_QUOTA_MAX 17592186044415LL
- 
- int virCgroupSetCpuCfsPeriod(virCgroupPtr group, unsigned long long cfs_period);
- int virCgroupGetCpuCfsPeriod(virCgroupPtr group, unsigned long long *cfs_period);
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroup-introduce-nested-cgroup-to-properly-work-with-systemd.patch b/SOURCES/libvirt-vircgroup-introduce-nested-cgroup-to-properly-work-with-systemd.patch
deleted file mode 100644
index 435dc6a..0000000
--- a/SOURCES/libvirt-vircgroup-introduce-nested-cgroup-to-properly-work-with-systemd.patch
+++ /dev/null
@@ -1,879 +0,0 @@
-From 2593f2e4626fbb6dfef2317bceea4d1b8275f9d8 Mon Sep 17 00:00:00 2001
-Message-Id: <2593f2e4626fbb6dfef2317bceea4d1b8275f9d8@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:59 +0100
-Subject: [PATCH] vircgroup: introduce nested cgroup to properly work with
- systemd
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When running on host with systemd we register VMs with machined.
-In this case systemd creates the root VM cgroup for us. This has some
-implications where one of them is that systemd owns all files inside
-the root VM cgroup and we should not touch them.
-
-We already use DBus calls for some of the APIs but for the remaining
-ones we will continue accessing the files directly. Systemd doesn't
-support threaded cgroups so we need to do this.
-
-The reason why we don't use DBus for most of the APIs is that we already
-have a code that works with files and we would have to check if systemd
-supports each API.
-
-This change introduces new topology on systemd hosts:
-
-$ROOT
-  |
-  +- machine.slice
-     |
-     +- machine-qemu\x2d1\x2dvm1.scope
-        |
-        +- libvirt
-           |
-           +- emulator
-           +- vcpu0
-           +- vcpu0
-
-compared to the previous topology:
-
-$ROOT
-  |
-  +- machine.slice
-     |
-     +- machine-qemu\x2d1\x2dvm1.scope
-        |
-        +- emulator
-        +- vcpu0
-        +- vcpu0
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 184245f53b94fc84f727eb6e8a2aa52df02d69c0)
-
-Conflicts:
-    src/util/vircgroup.c
-        - missing upstream g_free and g_autofree rewrite
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <51312c8b520e4ed794f8cd8a77b77c228387bb15.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- docs/cgroups.html.in     |  29 +++--
- src/util/vircgroup.c     | 256 +++++++++++++++++++++++++++++++--------
- src/util/vircgrouppriv.h |   4 +
- src/util/vircgroupv1.c   |  15 ++-
- src/util/vircgroupv2.c   |   6 +
- 5 files changed, 245 insertions(+), 65 deletions(-)
-
-diff --git a/docs/cgroups.html.in b/docs/cgroups.html.in
-index 78dede1bba..412a9360ff 100644
---- a/docs/cgroups.html.in
-+++ b/docs/cgroups.html.in
-@@ -117,21 +117,27 @@ $ROOT
-       |
-       +- machine-qemu\x2d1\x2dvm1.scope
-       |   |
--      |   +- emulator
--      |   +- vcpu0
--      |   +- vcpu1
-+      |   +- libvirt
-+      |       |
-+      |       +- emulator
-+      |       +- vcpu0
-+      |       +- vcpu1
-       |
-       +- machine-qemu\x2d2\x2dvm2.scope
-       |   |
--      |   +- emulator
--      |   +- vcpu0
--      |   +- vcpu1
-+      |   +- libvirt
-+      |       |
-+      |       +- emulator
-+      |       +- vcpu0
-+      |       +- vcpu1
-       |
-       +- machine-qemu\x2d3\x2dvm3.scope
-       |   |
--      |   +- emulator
--      |   +- vcpu0
--      |   +- vcpu1
-+      |   +- libvirt
-+      |       |
-+      |       +- emulator
-+      |       +- vcpu0
-+      |       +- vcpu1
-       |
-       +- machine-engineering.slice
-       |   |
-@@ -148,6 +154,11 @@ $ROOT
-           +- machine-lxc\x2d33333\x2dcontainer3.scope
-     </pre>
- 
-+    <p>
-+      Prior libvirt 7.1.0 the topology doesn't have extra
-+      <code>libvirt</code> directory.
-+    </p>
-+
-     <h3><a id="currentLayoutGeneric">Non-systemd cgroups layout</a></h3>
- 
-     <p>
-diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
-index 8f5bcd94f4..d0f867ba7f 100644
---- a/src/util/vircgroup.c
-+++ b/src/util/vircgroup.c
-@@ -639,6 +639,22 @@ virCgroupMakeGroup(virCgroupPtr parent,
- }
- 
- 
-+static bool
-+virCgroupExists(virCgroupPtr group)
-+{
-+    size_t i;
-+
-+    for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
-+        if (group->backends[i] &&
-+            !group->backends[i]->exists(group)) {
-+            return false;
-+        }
-+    }
-+
-+    return true;
-+}
-+
-+
- /**
-  * virCgroupNew:
-  * @path: path for the new group
-@@ -695,10 +711,11 @@ virCgroupAddTaskInternal(virCgroupPtr group,
-                          unsigned int flags)
- {
-     size_t i;
-+    virCgroupPtr parent = virCgroupGetNested(group);
- 
-     for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
--        if (group->backends[i] &&
--            group->backends[i]->addTask(group, pid, flags) < 0) {
-+        if (parent->backends[i] &&
-+            parent->backends[i]->addTask(parent, pid, flags) < 0) {
-             return -1;
-         }
-     }
-@@ -871,6 +888,30 @@ virCgroupNewPartition(const char *path,
- }
- 
- 
-+static int
-+virCgroupNewNested(virCgroupPtr parent,
-+                   int controllers,
-+                   bool create,
-+                   pid_t pid,
-+                   virCgroupPtr *nested)
-+{
-+    virCgroupPtr new = NULL;
-+
-+    if (virCgroupNew(-1, "libvirt", parent, controllers, &new) < 0)
-+        return -1;
-+
-+    if (create) {
-+        if (virCgroupMakeGroup(parent, new, create, pid, VIR_CGROUP_NONE) < 0) {
-+            virCgroupFree(&new);
-+            return -1;
-+        }
-+    }
-+
-+    *nested = g_steal_pointer(&new);
-+    return 0;
-+}
-+
-+
- /**
- * virCgroupNewSelf:
- *
-@@ -954,6 +995,7 @@ virCgroupNewThread(virCgroupPtr domain,
-                    virCgroupPtr *group)
- {
-     g_autofree char *name = NULL;
-+    virCgroupPtr parent = NULL;
-     int controllers;
- 
-     switch (nameval) {
-@@ -976,10 +1018,12 @@ virCgroupNewThread(virCgroupPtr domain,
-                    (1 << VIR_CGROUP_CONTROLLER_CPUACCT) |
-                    (1 << VIR_CGROUP_CONTROLLER_CPUSET));
- 
--    if (virCgroupNew(-1, name, domain, controllers, group) < 0)
-+    parent = virCgroupGetNested(domain);
-+
-+    if (virCgroupNew(-1, name, parent, controllers, group) < 0)
-         return -1;
- 
--    if (virCgroupMakeGroup(domain, *group, create, -1, VIR_CGROUP_THREAD) < 0) {
-+    if (virCgroupMakeGroup(parent, *group, create, -1, VIR_CGROUP_THREAD) < 0) {
-         virCgroupFree(group);
-         return -1;
-     }
-@@ -1009,6 +1053,7 @@ virCgroupNewDetectMachine(const char *name,
-                           virCgroupPtr *group)
- {
-     size_t i;
-+    virCgroupPtr nested = NULL;
- 
-     if (virCgroupNewDetect(pid, controllers, group) < 0) {
-         if (virCgroupNewIgnoreError())
-@@ -1032,6 +1077,14 @@ virCgroupNewDetectMachine(const char *name,
-     if (virSystemdHasMachined() == 0 && !(*group)->unitName)
-         return -1;
- 
-+    if (virCgroupNewNested((*group), controllers, false, -1, &nested) < 0)
-+        return -1;
-+
-+    if (virCgroupExists(nested))
-+        (*group)->nested = g_steal_pointer(&nested);
-+
-+    virCgroupFree(&nested);
-+
-     return 0;
- }
- 
-@@ -1107,6 +1160,7 @@ virCgroupNewMachineSystemd(const char *name,
- {
-     int rv;
-     virCgroupPtr init;
-+    virCgroupPtr nested = NULL;
-     g_autofree char *path = NULL;
-     size_t i;
- 
-@@ -1157,6 +1211,13 @@ virCgroupNewMachineSystemd(const char *name,
-         return -1;
-     }
- 
-+    if (virCgroupNewNested((*group), controllers, true, pidleader, &nested) < 0) {
-+        virCgroupFree(group);
-+        return -1;
-+    }
-+
-+    (*group)->nested = nested;
-+
-     if (virCgroupAddProcess(*group, pidleader) < 0) {
-         virErrorPtr saved;
- 
-@@ -1349,7 +1410,9 @@ virCgroupGetBlkioIoServiced(virCgroupPtr group,
-                             long long *requests_read,
-                             long long *requests_write)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             getBlkioIoServiced, -1,
-                             bytes_read, bytes_write,
-                             requests_read, requests_write);
-@@ -1376,7 +1439,9 @@ virCgroupGetBlkioIoDeviceServiced(virCgroupPtr group,
-                                   long long *requests_read,
-                                   long long *requests_write)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             getBlkioIoDeviceServiced, -1,
-                             path, bytes_read, bytes_write,
-                             requests_read, requests_write);
-@@ -1427,7 +1492,9 @@ virCgroupSetBlkioDeviceReadIops(virCgroupPtr group,
-                                 const char *path,
-                                 unsigned int riops)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             setBlkioDeviceReadIops, -1, path, riops);
- }
- 
-@@ -1445,7 +1512,9 @@ virCgroupSetBlkioDeviceWriteIops(virCgroupPtr group,
-                                  const char *path,
-                                  unsigned int wiops)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             setBlkioDeviceWriteIops, -1, path, wiops);
- }
- 
-@@ -1463,7 +1532,9 @@ virCgroupSetBlkioDeviceReadBps(virCgroupPtr group,
-                                const char *path,
-                                unsigned long long rbps)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             setBlkioDeviceReadBps, -1, path, rbps);
- }
- 
-@@ -1480,7 +1551,9 @@ virCgroupSetBlkioDeviceWriteBps(virCgroupPtr group,
-                                 const char *path,
-                                 unsigned long long wbps)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             setBlkioDeviceWriteBps, -1, path, wbps);
- }
- 
-@@ -1516,7 +1589,9 @@ virCgroupGetBlkioDeviceReadIops(virCgroupPtr group,
-                                 const char *path,
-                                 unsigned int *riops)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             getBlkioDeviceReadIops, -1, path, riops);
- }
- 
-@@ -1533,7 +1608,9 @@ virCgroupGetBlkioDeviceWriteIops(virCgroupPtr group,
-                                  const char *path,
-                                  unsigned int *wiops)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             getBlkioDeviceWriteIops, -1, path, wiops);
- }
- 
-@@ -1550,7 +1627,9 @@ virCgroupGetBlkioDeviceReadBps(virCgroupPtr group,
-                                const char *path,
-                                unsigned long long *rbps)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             getBlkioDeviceReadBps, -1, path, rbps);
- }
- 
-@@ -1567,7 +1646,9 @@ virCgroupGetBlkioDeviceWriteBps(virCgroupPtr group,
-                                 const char *path,
-                                 unsigned long long *wbps)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_BLKIO,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_BLKIO,
-                             getBlkioDeviceWriteBps, -1, path, wbps);
- }
- 
-@@ -1600,7 +1681,9 @@ virCgroupGetBlkioDeviceWeight(virCgroupPtr group,
- int
- virCgroupSetMemory(virCgroupPtr group, unsigned long long kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             setMemory, -1, kb);
- }
- 
-@@ -1627,7 +1710,9 @@ virCgroupGetMemoryStat(virCgroupPtr group,
-                        unsigned long long *inactiveFile,
-                        unsigned long long *unevictable)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             getMemoryStat, -1, cache,
-                             activeAnon, inactiveAnon,
-                             activeFile, inactiveFile,
-@@ -1646,7 +1731,9 @@ virCgroupGetMemoryStat(virCgroupPtr group,
- int
- virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             getMemoryUsage, -1, kb);
- }
- 
-@@ -1662,7 +1749,9 @@ virCgroupGetMemoryUsage(virCgroupPtr group, unsigned long *kb)
- int
- virCgroupSetMemoryHardLimit(virCgroupPtr group, unsigned long long kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             setMemoryHardLimit, -1, kb);
- }
- 
-@@ -1678,7 +1767,9 @@ virCgroupSetMemoryHardLimit(virCgroupPtr group, unsigned long long kb)
- int
- virCgroupGetMemoryHardLimit(virCgroupPtr group, unsigned long long *kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             getMemoryHardLimit, -1, kb);
- }
- 
-@@ -1694,7 +1785,9 @@ virCgroupGetMemoryHardLimit(virCgroupPtr group, unsigned long long *kb)
- int
- virCgroupSetMemorySoftLimit(virCgroupPtr group, unsigned long long kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             setMemorySoftLimit, -1, kb);
- }
- 
-@@ -1710,7 +1803,9 @@ virCgroupSetMemorySoftLimit(virCgroupPtr group, unsigned long long kb)
- int
- virCgroupGetMemorySoftLimit(virCgroupPtr group, unsigned long long *kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             getMemorySoftLimit, -1, kb);
- }
- 
-@@ -1726,7 +1821,9 @@ virCgroupGetMemorySoftLimit(virCgroupPtr group, unsigned long long *kb)
- int
- virCgroupSetMemSwapHardLimit(virCgroupPtr group, unsigned long long kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             setMemSwapHardLimit, -1, kb);
- }
- 
-@@ -1742,7 +1839,9 @@ virCgroupSetMemSwapHardLimit(virCgroupPtr group, unsigned long long kb)
- int
- virCgroupGetMemSwapHardLimit(virCgroupPtr group, unsigned long long *kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             getMemSwapHardLimit, -1, kb);
- }
- 
-@@ -1758,7 +1857,9 @@ virCgroupGetMemSwapHardLimit(virCgroupPtr group, unsigned long long *kb)
- int
- virCgroupGetMemSwapUsage(virCgroupPtr group, unsigned long long *kb)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_MEMORY,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_MEMORY,
-                             getMemSwapUsage, -1, kb);
- }
- 
-@@ -1774,7 +1875,9 @@ virCgroupGetMemSwapUsage(virCgroupPtr group, unsigned long long *kb)
- int
- virCgroupSetCpusetMems(virCgroupPtr group, const char *mems)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUSET,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUSET,
-                             setCpusetMems, -1, mems);
- }
- 
-@@ -1790,7 +1893,9 @@ virCgroupSetCpusetMems(virCgroupPtr group, const char *mems)
- int
- virCgroupGetCpusetMems(virCgroupPtr group, char **mems)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUSET,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUSET,
-                             getCpusetMems, -1, mems);
- }
- 
-@@ -1806,7 +1911,9 @@ virCgroupGetCpusetMems(virCgroupPtr group, char **mems)
- int
- virCgroupSetCpusetMemoryMigrate(virCgroupPtr group, bool migrate)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUSET,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUSET,
-                             setCpusetMemoryMigrate, -1, migrate);
- }
- 
-@@ -1822,7 +1929,9 @@ virCgroupSetCpusetMemoryMigrate(virCgroupPtr group, bool migrate)
- int
- virCgroupGetCpusetMemoryMigrate(virCgroupPtr group, bool *migrate)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUSET,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUSET,
-                             getCpusetMemoryMigrate, -1, migrate);
- }
- 
-@@ -1838,7 +1947,9 @@ virCgroupGetCpusetMemoryMigrate(virCgroupPtr group, bool *migrate)
- int
- virCgroupSetCpusetCpus(virCgroupPtr group, const char *cpus)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUSET,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUSET,
-                             setCpusetCpus, -1, cpus);
- }
- 
-@@ -1854,7 +1965,9 @@ virCgroupSetCpusetCpus(virCgroupPtr group, const char *cpus)
- int
- virCgroupGetCpusetCpus(virCgroupPtr group, char **cpus)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUSET,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUSET,
-                             getCpusetCpus, -1, cpus);
- }
- 
-@@ -1869,7 +1982,9 @@ virCgroupGetCpusetCpus(virCgroupPtr group, char **cpus)
- int
- virCgroupDenyAllDevices(virCgroupPtr group)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_DEVICES,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_DEVICES,
-                             denyAllDevices, -1);
- }
- 
-@@ -1890,7 +2005,9 @@ virCgroupDenyAllDevices(virCgroupPtr group)
- int
- virCgroupAllowAllDevices(virCgroupPtr group, int perms)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_DEVICES,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_DEVICES,
-                             allowAllDevices, -1, perms);
- }
- 
-@@ -1910,7 +2027,9 @@ int
- virCgroupAllowDevice(virCgroupPtr group, char type, int major, int minor,
-                      int perms)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_DEVICES,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_DEVICES,
-                             allowDevice, -1, type, major, minor, perms);
- }
- 
-@@ -1936,6 +2055,7 @@ virCgroupAllowDevicePath(virCgroupPtr group,
-                          bool ignoreEacces)
- {
-     struct stat sb;
-+    virCgroupPtr parent = virCgroupGetNested(group);
- 
-     if (stat(path, &sb) < 0) {
-         if (errno == EACCES && ignoreEacces)
-@@ -1950,7 +2070,7 @@ virCgroupAllowDevicePath(virCgroupPtr group,
-     if (!S_ISCHR(sb.st_mode) && !S_ISBLK(sb.st_mode))
-         return 1;
- 
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_DEVICES,
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_DEVICES,
-                             allowDevice, -1,
-                             S_ISCHR(sb.st_mode) ? 'c' : 'b',
-                             major(sb.st_rdev),
-@@ -1974,7 +2094,9 @@ int
- virCgroupDenyDevice(virCgroupPtr group, char type, int major, int minor,
-                     int perms)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_DEVICES,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_DEVICES,
-                             denyDevice, -1, type, major, minor, perms);
- }
- 
-@@ -2000,6 +2122,7 @@ virCgroupDenyDevicePath(virCgroupPtr group,
-                         bool ignoreEacces)
- {
-     struct stat sb;
-+    virCgroupPtr parent = virCgroupGetNested(group);
- 
-     if (stat(path, &sb) < 0) {
-         if (errno == EACCES && ignoreEacces)
-@@ -2014,7 +2137,7 @@ virCgroupDenyDevicePath(virCgroupPtr group,
-     if (!S_ISCHR(sb.st_mode) && !S_ISBLK(sb.st_mode))
-         return 1;
- 
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_DEVICES,
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_DEVICES,
-                             denyDevice, -1,
-                             S_ISCHR(sb.st_mode) ? 'c' : 'b',
-                             major(sb.st_rdev),
-@@ -2282,7 +2405,9 @@ virCgroupGetCpuShares(virCgroupPtr group, unsigned long long *shares)
- int
- virCgroupSetCpuCfsPeriod(virCgroupPtr group, unsigned long long cfs_period)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPU,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPU,
-                             setCpuCfsPeriod, -1, cfs_period);
- }
- 
-@@ -2298,7 +2423,9 @@ virCgroupSetCpuCfsPeriod(virCgroupPtr group, unsigned long long cfs_period)
- int
- virCgroupGetCpuCfsPeriod(virCgroupPtr group, unsigned long long *cfs_period)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPU,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPU,
-                             getCpuCfsPeriod, -1, cfs_period);
- }
- 
-@@ -2315,7 +2442,9 @@ virCgroupGetCpuCfsPeriod(virCgroupPtr group, unsigned long long *cfs_period)
- int
- virCgroupSetCpuCfsQuota(virCgroupPtr group, long long cfs_quota)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPU,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPU,
-                             setCpuCfsQuota, -1, cfs_quota);
- }
- 
-@@ -2323,7 +2452,9 @@ virCgroupSetCpuCfsQuota(virCgroupPtr group, long long cfs_quota)
- int
- virCgroupGetCpuacctPercpuUsage(virCgroupPtr group, char **usage)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUACCT,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUACCT,
-                             getCpuacctPercpuUsage, -1, usage);
- }
- 
-@@ -2669,7 +2800,9 @@ virCgroupKillPainfully(virCgroupPtr group)
- int
- virCgroupGetCpuCfsQuota(virCgroupPtr group, long long *cfs_quota)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPU,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPU,
-                             getCpuCfsQuota, -1, cfs_quota);
- }
- 
-@@ -2677,7 +2810,9 @@ virCgroupGetCpuCfsQuota(virCgroupPtr group, long long *cfs_quota)
- int
- virCgroupGetCpuacctUsage(virCgroupPtr group, unsigned long long *usage)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUACCT,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUACCT,
-                             getCpuacctUsage, -1, usage);
- }
- 
-@@ -2686,7 +2821,9 @@ int
- virCgroupGetCpuacctStat(virCgroupPtr group, unsigned long long *user,
-                         unsigned long long *sys)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_CPUACCT,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPUACCT,
-                             getCpuacctStat, -1, user, sys);
- }
- 
-@@ -2694,7 +2831,9 @@ virCgroupGetCpuacctStat(virCgroupPtr group, unsigned long long *user,
- int
- virCgroupSetFreezerState(virCgroupPtr group, const char *state)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_FREEZER,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_FREEZER,
-                             setFreezerState, -1, state);
- }
- 
-@@ -2702,7 +2841,9 @@ virCgroupSetFreezerState(virCgroupPtr group, const char *state)
- int
- virCgroupGetFreezerState(virCgroupPtr group, char **state)
- {
--    VIR_CGROUP_BACKEND_CALL(group, VIR_CGROUP_CONTROLLER_FREEZER,
-+    virCgroupPtr parent = virCgroupGetNested(group);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_FREEZER,
-                             getFreezerState, -1, state);
- }
- 
-@@ -2712,10 +2853,11 @@ virCgroupBindMount(virCgroupPtr group, const char *oldroot,
-                    const char *mountopts)
- {
-     size_t i;
-+    virCgroupPtr parent = virCgroupGetNested(group);
- 
-     for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
--        if (group->backends[i] &&
--            group->backends[i]->bindMount(group, oldroot, mountopts) < 0) {
-+        if (parent->backends[i] &&
-+            parent->backends[i]->bindMount(parent, oldroot, mountopts) < 0) {
-             return -1;
-         }
-     }
-@@ -2730,10 +2872,11 @@ int virCgroupSetOwner(virCgroupPtr cgroup,
-                       int controllers)
- {
-     size_t i;
-+    virCgroupPtr parent = virCgroupGetNested(cgroup);
- 
-     for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
--        if (cgroup->backends[i] &&
--            cgroup->backends[i]->setOwner(cgroup, uid, gid, controllers) < 0) {
-+        if (parent->backends[i] &&
-+            parent->backends[i]->setOwner(parent, uid, gid, controllers) < 0) {
-             return -1;
-         }
-     }
-@@ -2752,7 +2895,9 @@ int virCgroupSetOwner(virCgroupPtr cgroup,
- bool
- virCgroupSupportsCpuBW(virCgroupPtr cgroup)
- {
--    VIR_CGROUP_BACKEND_CALL(cgroup, VIR_CGROUP_CONTROLLER_CPU,
-+    virCgroupPtr parent = virCgroupGetNested(cgroup);
-+
-+    VIR_CGROUP_BACKEND_CALL(parent, VIR_CGROUP_CONTROLLER_CPU,
-                             supportsCpuBW, false);
- }
- 
-@@ -2760,10 +2905,11 @@ int
- virCgroupHasEmptyTasks(virCgroupPtr cgroup, int controller)
- {
-     size_t i;
-+    virCgroupPtr parent = virCgroupGetNested(cgroup);
- 
-     for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
--        if (cgroup->backends[i]) {
--            int rc = cgroup->backends[i]->hasEmptyTasks(cgroup, controller);
-+        if (parent->backends[i]) {
-+            int rc = parent->backends[i]->hasEmptyTasks(parent, controller);
-             if (rc <= 0)
-                 return rc;
-         }
-@@ -3565,6 +3711,7 @@ virCgroupFree(virCgroupPtr *group)
-     VIR_FREE((*group)->unified.mountPoint);
-     VIR_FREE((*group)->unified.placement);
-     VIR_FREE((*group)->unitName);
-+    VIR_FREE((*group)->nested);
- 
-     VIR_FREE((*group)->path);
-     VIR_FREE(*group);
-@@ -3577,9 +3724,12 @@ virCgroupDelThread(virCgroupPtr cgroup,
-                    int idx)
- {
-     virCgroupPtr new_cgroup = NULL;
-+    virCgroupPtr parent = NULL;
- 
-     if (cgroup) {
--        if (virCgroupNewThread(cgroup, nameval, idx, false, &new_cgroup) < 0)
-+        parent = virCgroupGetNested(cgroup);
-+
-+        if (virCgroupNewThread(parent, nameval, idx, false, &new_cgroup) < 0)
-             return -1;
- 
-         /* Remove the offlined cgroup */
-diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
-index b4a9e0b379..104d74e4d7 100644
---- a/src/util/vircgrouppriv.h
-+++ b/src/util/vircgrouppriv.h
-@@ -69,8 +69,12 @@ struct _virCgroup {
-     virCgroupV2Controller unified;
- 
-     char *unitName;
-+    virCgroupPtr nested;
- };
- 
-+#define virCgroupGetNested(cgroup) \
-+    (cgroup->nested ? cgroup->nested : cgroup)
-+
- #define virCgroupSetValueDBus(unitName, key, ...) \
-     ({ \
-         int __ret = -1; \
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index 57d617cb69..49a2cb023e 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -338,6 +338,8 @@ virCgroupV1DetectPlacement(virCgroupPtr group,
- 
-     for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
-         const char *typestr = virCgroupV1ControllerTypeToString(i);
-+        g_autofree char* placement = NULL;
-+        char *tmp = NULL;
- 
-         if (!virCgroupV1MountOptsMatchController(controllers, typestr))
-             continue;
-@@ -348,17 +350,24 @@ virCgroupV1DetectPlacement(virCgroupPtr group,
-         if (group->legacy[i].placement)
-             continue;
- 
-+        /* On systemd we create a nested cgroup for some cgroup tasks
-+         * but the placement should point to the root cgroup. */
-+        placement = g_strdup(selfpath);
-+        tmp = g_strrstr(placement, "/libvirt");
-+        if (tmp)
-+            *tmp = '\0';
-+
-         /*
-          * selfpath == "/" + path="" -> "/"
-          * selfpath == "/libvirt.service" + path == "" -> "/libvirt.service"
-          * selfpath == "/libvirt.service" + path == "foo" -> "/libvirt.service/foo"
-          */
-         if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) {
--            group->legacy[i].placement = g_strdup(selfpath);
-+            group->legacy[i].placement = g_strdup(placement);
-         } else {
--            bool delim = STREQ(selfpath, "/") || STREQ(path, "");
-+            bool delim = STREQ(placement, "/") || STREQ(path, "");
- 
--            group->legacy[i].placement = g_strdup_printf("%s%s%s", selfpath,
-+            group->legacy[i].placement = g_strdup_printf("%s%s%s", placement,
-                                                          delim ? "" : "/",
-                                                          path);
-         }
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index d15e2354cf..a14fc669fb 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -210,6 +210,12 @@ virCgroupV2DetectPlacement(virCgroupPtr group,
-     if (tmp)
-         *tmp = '\0';
- 
-+    /* On systemd we create a nested cgroup for some cgroup tasks
-+     * but the placement should point to the root cgroup. */
-+    tmp = g_strrstr(placement, "/libvirt");
-+    if (tmp)
-+        *tmp = '\0';
-+
-     /*
-      * selfpath == "/" + path="" -> "/"
-      * selfpath == "/libvirt.service" + path == "" -> "/libvirt.service"
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroup-introduce-virCgroupV1Exists-and-virCgroupV2Exists.patch b/SOURCES/libvirt-vircgroup-introduce-virCgroupV1Exists-and-virCgroupV2Exists.patch
deleted file mode 100644
index c73bf43..0000000
--- a/SOURCES/libvirt-vircgroup-introduce-virCgroupV1Exists-and-virCgroupV2Exists.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-From f835b834d7922bed1ccda35885e42ab7c3f4a70f Mon Sep 17 00:00:00 2001
-Message-Id: <f835b834d7922bed1ccda35885e42ab7c3f4a70f@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:58 +0100
-Subject: [PATCH] vircgroup: introduce virCgroupV1Exists and virCgroupV2Exists
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This will check if the cgroup actually exists on the system.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit badc2bcc7398d8c0a739998a80411ddebf129512)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <14297ed923f0f23cc52506e61e637c8f45e331ee.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/vircgroupbackend.h |  4 ++++
- src/util/vircgroupv1.c      | 27 +++++++++++++++++++++++++++
- src/util/vircgroupv2.c      | 15 +++++++++++++++
- 3 files changed, 46 insertions(+)
-
-diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h
-index ac7b3ae517..dabc7bd4b4 100644
---- a/src/util/vircgroupbackend.h
-+++ b/src/util/vircgroupbackend.h
-@@ -115,6 +115,9 @@ typedef int
-                                const char *key,
-                                char **path);
- 
-+typedef bool
-+(*virCgroupExistsCB)(virCgroupPtr group);
-+
- typedef int
- (*virCgroupMakeGroupCB)(virCgroupPtr parent,
-                         virCgroupPtr group,
-@@ -378,6 +381,7 @@ struct _virCgroupBackend {
-     virCgroupGetAnyControllerCB getAnyController;
-     virCgroupPathOfControllerCB pathOfController;
-     virCgroupMakeGroupCB makeGroup;
-+    virCgroupExistsCB exists;
-     virCgroupRemoveCB remove;
-     virCgroupAddTaskCB addTask;
-     virCgroupHasEmptyTasksCB hasEmptyTasks;
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index eb2b611cee..57d617cb69 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -670,6 +670,32 @@ virCgroupV1MakeGroup(virCgroupPtr parent,
- }
- 
- 
-+static bool
-+virCgroupV1Exists(virCgroupPtr group)
-+{
-+    size_t i;
-+
-+    for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
-+        g_autofree char *path = NULL;
-+
-+        if (i == VIR_CGROUP_CONTROLLER_SYSTEMD)
-+            continue;
-+
-+        if (!group->legacy[i].mountPoint)
-+            continue;
-+
-+        if (virCgroupV1PathOfController(group, i, "", &path) < 0)
-+            return false;
-+
-+        if (!virFileExists(path)) {
-+            return false;
-+        }
-+    }
-+
-+    return true;
-+}
-+
-+
- static int
- virCgroupV1Remove(virCgroupPtr group)
- {
-@@ -2136,6 +2162,7 @@ virCgroupBackend virCgroupV1Backend = {
-     .getAnyController = virCgroupV1GetAnyController,
-     .pathOfController = virCgroupV1PathOfController,
-     .makeGroup = virCgroupV1MakeGroup,
-+    .exists = virCgroupV1Exists,
-     .remove = virCgroupV1Remove,
-     .addTask = virCgroupV1AddTask,
-     .hasEmptyTasks = virCgroupV1HasEmptyTasks,
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index 5e19ed8332..d15e2354cf 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -493,6 +493,20 @@ virCgroupV2MakeGroup(virCgroupPtr parent,
- }
- 
- 
-+static bool
-+virCgroupV2Exists(virCgroupPtr group)
-+{
-+    g_autofree char *path = NULL;
-+    int controller;
-+
-+    controller = virCgroupV2GetAnyController(group);
-+    if (virCgroupV2PathOfController(group, controller, "", &path) < 0)
-+        return false;
-+
-+    return virFileExists(path);
-+}
-+
-+
- static int
- virCgroupV2Remove(virCgroupPtr group)
- {
-@@ -1886,6 +1900,7 @@ virCgroupBackend virCgroupV2Backend = {
-     .getAnyController = virCgroupV2GetAnyController,
-     .pathOfController = virCgroupV2PathOfController,
-     .makeGroup = virCgroupV2MakeGroup,
-+    .exists = virCgroupV2Exists,
-     .remove = virCgroupV2Remove,
-     .addTask = virCgroupV2AddTask,
-     .hasEmptyTasks = virCgroupV2HasEmptyTasks,
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroup-use-DBus-call-to-systemd-for-some-APIs.patch b/SOURCES/libvirt-vircgroup-use-DBus-call-to-systemd-for-some-APIs.patch
deleted file mode 100644
index 8d300b3..0000000
--- a/SOURCES/libvirt-vircgroup-use-DBus-call-to-systemd-for-some-APIs.patch
+++ /dev/null
@@ -1,310 +0,0 @@
-From 205289d2792aacf68ed2cb8563d1860bd36137a0 Mon Sep 17 00:00:00 2001
-Message-Id: <205289d2792aacf68ed2cb8563d1860bd36137a0@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:55 +0100
-Subject: [PATCH] vircgroup: use DBus call to systemd for some APIs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When running on host with systemd we register VMs with machined.
-In this case systemd creates the root VM cgroup for us. This has some
-implications where one of them is that systemd owns all files inside
-the root VM cgroup and we should not touch them.
-
-If we change any value in file that systemd knows about it will be
-changed to what systemd thinks it should be when executing
-`systemctl daemon-reload`.
-
-These are the APIs that we need to call using systemd because they set
-limits that are proportional to sibling cgroups.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 9c1693eff427661616ce1bd2795688f87288a412)
-
-Conflicts:
-    src/util/vircgroup.c
-        - missing upstream g_autofree rewrite
-        - missing upstream glib dbus rewrite, hence the ugly macro
-          instead of a function
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <5d22d307112333f1da565cb642ea9001a7b8b55b.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/vircgroup.c     | 11 ++++++++++
- src/util/vircgrouppriv.h | 25 +++++++++++++++++++++++
- src/util/vircgroupv1.c   | 44 +++++++++++++++++++++++++++-------------
- src/util/vircgroupv2.c   | 44 +++++++++++++++++++++++++++-------------
- tests/Makefile.am        |  1 +
- 5 files changed, 97 insertions(+), 28 deletions(-)
-
-diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
-index a45c2e7f2f..10b934291c 100644
---- a/src/util/vircgroup.c
-+++ b/src/util/vircgroup.c
-@@ -1027,6 +1027,10 @@ virCgroupNewDetectMachine(const char *name,
-         }
-     }
- 
-+    (*group)->unitName = virSystemdGetMachineUnitByPID(pid);
-+    if (virSystemdHasMachined() == 0 && !(*group)->unitName)
-+        return -1;
-+
-     return 0;
- }
- 
-@@ -1146,6 +1150,12 @@ virCgroupNewMachineSystemd(const char *name,
-         return -1;
-     }
- 
-+    (*group)->unitName = virSystemdGetMachineUnitByPID(pidleader);
-+    if (!(*group)->unitName) {
-+        virCgroupFree(group);
-+        return -1;
-+    }
-+
-     if (virCgroupAddProcess(*group, pidleader) < 0) {
-         virErrorPtr saved;
- 
-@@ -3553,6 +3563,7 @@ virCgroupFree(virCgroupPtr *group)
- 
-     VIR_FREE((*group)->unified.mountPoint);
-     VIR_FREE((*group)->unified.placement);
-+    VIR_FREE((*group)->unitName);
- 
-     VIR_FREE((*group)->path);
-     VIR_FREE(*group);
-diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h
-index f2a80aeb82..b4a9e0b379 100644
---- a/src/util/vircgrouppriv.h
-+++ b/src/util/vircgrouppriv.h
-@@ -27,6 +27,7 @@
- 
- #include "vircgroup.h"
- #include "vircgroupbackend.h"
-+#include "virdbus.h"
- 
- struct _virCgroupV1Controller {
-     int type;
-@@ -66,8 +67,32 @@ struct _virCgroup {
- 
-     virCgroupV1Controller legacy[VIR_CGROUP_CONTROLLER_LAST];
-     virCgroupV2Controller unified;
-+
-+    char *unitName;
- };
- 
-+#define virCgroupSetValueDBus(unitName, key, ...) \
-+    ({ \
-+        int __ret = -1; \
-+        do { \
-+            DBusConnection *__conn; \
-+            if (!(__conn = virDBusGetSystemBus())) \
-+                break; \
-+            __ret = virDBusCallMethod(__conn, NULL, NULL, \
-+                                      "org.freedesktop.systemd1", \
-+                                      "/org/freedesktop/systemd1", \
-+                                      "org.freedesktop.systemd1.Manager", \
-+                                      "SetUnitProperties", \
-+                                      "sba(sv)", \
-+                                      unitName, \
-+                                      true, \
-+                                      1, \
-+                                      key, \
-+                                      __VA_ARGS__); \
-+        } while (0); \
-+        __ret; \
-+    })
-+
- int virCgroupSetValueRaw(const char *path,
-                          const char *value);
- 
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index c35088a3c4..7ec8f3a316 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -931,7 +931,6 @@ virCgroupV1SetBlkioWeight(virCgroupPtr group,
-                           unsigned int weight)
- {
-     g_autofree char *path = NULL;
--    g_autofree char *value = NULL;
- 
-     if (virCgroupV1PathOfController(group, VIR_CGROUP_CONTROLLER_BLKIO,
-                                     "blkio.bfq.weight", &path) < 0) {
-@@ -953,9 +952,14 @@ virCgroupV1SetBlkioWeight(virCgroupPtr group,
-         return -1;
-     }
- 
--    value = g_strdup_printf("%u", weight);
-+    if (group->unitName) {
-+        return virCgroupSetValueDBus(group->unitName, "BlockIOWeight",
-+                                     "t", (unsigned long long) weight);
-+    } else {
-+        g_autofree char *value = g_strdup_printf("%u", weight);
- 
--    return virCgroupSetValueRaw(path, value);
-+        return virCgroupSetValueRaw(path, value);
-+    }
- }
- 
- 
-@@ -1188,15 +1192,8 @@ virCgroupV1SetBlkioDeviceWeight(virCgroupPtr group,
-                                 const char *devPath,
-                                 unsigned int weight)
- {
--    g_autofree char *str = NULL;
--    g_autofree char *blkstr = NULL;
-     g_autofree char *path = NULL;
- 
--    if (!(blkstr = virCgroupGetBlockDevString(devPath)))
--        return -1;
--
--    str = g_strdup_printf("%s%d", blkstr, weight);
--
-     if (virCgroupV1PathOfController(group, VIR_CGROUP_CONTROLLER_BLKIO,
-                                     "blkio.weight_device", &path) < 0) {
-         return -1;
-@@ -1208,7 +1205,21 @@ virCgroupV1SetBlkioDeviceWeight(virCgroupPtr group,
-         return -1;
-     }
- 
--    return virCgroupSetValueRaw(path, str);
-+    if (group->unitName) {
-+        return virCgroupSetValueDBus(group->unitName, "BlockIODeviceWeight",
-+                                     "a(st)",
-+                                     1, path, (unsigned long long) weight);
-+    } else {
-+        g_autofree char *str = NULL;
-+        g_autofree char *blkstr = NULL;
-+
-+        if (!(blkstr = virCgroupGetBlockDevString(devPath)))
-+            return -1;
-+
-+        str = g_strdup_printf("%s%d", blkstr, weight);
-+
-+        return virCgroupSetValueRaw(path, str);
-+    }
- }
- 
- 
-@@ -1849,9 +1860,14 @@ static int
- virCgroupV1SetCpuShares(virCgroupPtr group,
-                         unsigned long long shares)
- {
--    return virCgroupSetValueU64(group,
--                                VIR_CGROUP_CONTROLLER_CPU,
--                                "cpu.shares", shares);
-+    if (group->unitName) {
-+        return virCgroupSetValueDBus(group->unitName, "CPUShares",
-+                                     "t", shares);
-+    } else {
-+        return virCgroupSetValueU64(group,
-+                                    VIR_CGROUP_CONTROLLER_CPU,
-+                                    "cpu.shares", shares);
-+    }
- }
- 
- 
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index 4682a6a920..8fe4894a9e 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -606,7 +606,6 @@ virCgroupV2SetBlkioWeight(virCgroupPtr group,
-                           unsigned int weight)
- {
-     g_autofree char *path = NULL;
--    g_autofree char *value = NULL;
-     const char *format = "%u";
- 
-     if (virCgroupV2PathOfController(group, VIR_CGROUP_CONTROLLER_BLKIO,
-@@ -630,9 +629,14 @@ virCgroupV2SetBlkioWeight(virCgroupPtr group,
-         return -1;
-     }
- 
--    value = g_strdup_printf(format, weight);
-+    if (group->unitName) {
-+        return virCgroupSetValueDBus(group->unitName, "IOWeight",
-+                                     "t", (unsigned long long) weight);
-+    } else {
-+        g_autofree char *value = g_strdup_printf(format, weight);
- 
--    return virCgroupSetValueRaw(path, value);
-+        return virCgroupSetValueRaw(path, value);
-+    }
- }
- 
- 
-@@ -817,13 +821,6 @@ virCgroupV2SetBlkioDeviceWeight(virCgroupPtr group,
-                                 unsigned int weight)
- {
-     g_autofree char *path = NULL;
--    g_autofree char *str = NULL;
--    g_autofree char *blkstr = NULL;
--
--    if (!(blkstr = virCgroupGetBlockDevString(devPath)))
--        return -1;
--
--    str = g_strdup_printf("%s%d", blkstr, weight);
- 
-     if (virCgroupV2PathOfController(group, VIR_CGROUP_CONTROLLER_BLKIO,
-                                     "io.weight", &path) < 0) {
-@@ -836,7 +833,21 @@ virCgroupV2SetBlkioDeviceWeight(virCgroupPtr group,
-         return -1;
-     }
- 
--    return virCgroupSetValueRaw(path, str);
-+    if (group->unitName) {
-+        return virCgroupSetValueDBus(group->unitName, "IODeviceWeight",
-+                                     "a(st)",
-+                                     1, path, (unsigned long long) weight);
-+    } else {
-+        g_autofree char *str = NULL;
-+        g_autofree char *blkstr = NULL;
-+
-+        if (!(blkstr = virCgroupGetBlockDevString(devPath)))
-+            return -1;
-+
-+        str = g_strdup_printf("%s%d", blkstr, weight);
-+
-+        return virCgroupSetValueRaw(path, str);
-+    }
- }
- 
- 
-@@ -1455,9 +1466,14 @@ static int
- virCgroupV2SetCpuShares(virCgroupPtr group,
-                         unsigned long long shares)
- {
--    return virCgroupSetValueU64(group,
--                                VIR_CGROUP_CONTROLLER_CPU,
--                                "cpu.weight", shares);
-+    if (group->unitName) {
-+        return virCgroupSetValueDBus(group->unitName, "CPUWeight",
-+                                     "t", shares);
-+    } else {
-+        return virCgroupSetValueU64(group,
-+                                    VIR_CGROUP_CONTROLLER_CPU,
-+                                    "cpu.weight", shares);
-+    }
- }
- 
- 
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index f957c7d1ba..b030d0e8f6 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -1188,6 +1188,7 @@ libvirportallocatormock_la_LIBADD = $(MOCKLIBS_LIBS)
- 
- vircgrouptest_SOURCES = \
- 	vircgrouptest.c testutils.h testutils.c
-+vircgrouptest_CFLAGS = $(DBUS_CFLAGS) $(AM_CFLAGS)
- vircgrouptest_LDADD = $(LDADDS)
- 
- libvircgroupmock_la_SOURCES = \
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroupv1-refactor-virCgroupV1DetectPlacement.patch b/SOURCES/libvirt-vircgroupv1-refactor-virCgroupV1DetectPlacement.patch
deleted file mode 100644
index d8035c1..0000000
--- a/SOURCES/libvirt-vircgroupv1-refactor-virCgroupV1DetectPlacement.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From a88996cc6c72a6f7fd034c0890747c54cc377484 Mon Sep 17 00:00:00 2001
-Message-Id: <a88996cc6c72a6f7fd034c0890747c54cc377484@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:56 +0100
-Subject: [PATCH] vircgroupv1: refactor virCgroupV1DetectPlacement
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Remove one level of indentation by splitting the condition.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 5f56dd7c83493f14a471bb9e33415b04329a08bf)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <ce477880853d3a9988389789611b68c458834600.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/vircgroupv1.c | 39 ++++++++++++++++++++++-----------------
- 1 file changed, 22 insertions(+), 17 deletions(-)
-
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index 7ec8f3a316..09165ece4d 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -339,23 +339,28 @@ virCgroupV1DetectPlacement(virCgroupPtr group,
-     for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
-         const char *typestr = virCgroupV1ControllerTypeToString(i);
- 
--        if (virCgroupV1MountOptsMatchController(controllers, typestr) &&
--            group->legacy[i].mountPoint != NULL &&
--            group->legacy[i].placement == NULL) {
--            /*
--             * selfpath == "/" + path="" -> "/"
--             * selfpath == "/libvirt.service" + path == "" -> "/libvirt.service"
--             * selfpath == "/libvirt.service" + path == "foo" -> "/libvirt.service/foo"
--             */
--            if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) {
--                group->legacy[i].placement = g_strdup(selfpath);
--            } else {
--                bool delim = STREQ(selfpath, "/") || STREQ(path, "");
--
--                group->legacy[i].placement = g_strdup_printf("%s%s%s", selfpath,
--                                                             delim ? "" : "/",
--                                                             path);
--            }
-+        if (!virCgroupV1MountOptsMatchController(controllers, typestr))
-+            continue;
-+
-+        if (!group->legacy[i].mountPoint)
-+            continue;
-+
-+        if (group->legacy[i].placement)
-+            continue;
-+
-+        /*
-+         * selfpath == "/" + path="" -> "/"
-+         * selfpath == "/libvirt.service" + path == "" -> "/libvirt.service"
-+         * selfpath == "/libvirt.service" + path == "foo" -> "/libvirt.service/foo"
-+         */
-+        if (i == VIR_CGROUP_CONTROLLER_SYSTEMD) {
-+            group->legacy[i].placement = g_strdup(selfpath);
-+        } else {
-+            bool delim = STREQ(selfpath, "/") || STREQ(path, "");
-+
-+            group->legacy[i].placement = g_strdup_printf("%s%s%s", selfpath,
-+                                                         delim ? "" : "/",
-+                                                         path);
-         }
-     }
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroupv1-use-defines-for-cpu-period-and-quota-limits.patch b/SOURCES/libvirt-vircgroupv1-use-defines-for-cpu-period-and-quota-limits.patch
deleted file mode 100644
index 649bb1e..0000000
--- a/SOURCES/libvirt-vircgroupv1-use-defines-for-cpu-period-and-quota-limits.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 2fb78d18ea95c2dcb4c5b0e29171636e51bb2149 Mon Sep 17 00:00:00 2001
-Message-Id: <2fb78d18ea95c2dcb4c5b0e29171636e51bb2149@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 21 Jan 2021 10:24:04 -0300
-Subject: [PATCH] vircgroupv1: use defines for cpu period and quota limits
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit bc760f4d7c4f964fadcb2a73e126b0053e7a9b06)
-
-https://bugzilla.redhat.com/1915733
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20210121132406.337681-3-dbarboza@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- src/util/vircgroupv1.c | 23 ++++++++++++-----------
- 1 file changed, 12 insertions(+), 11 deletions(-)
-
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index d2ec7106db..c35088a3c4 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -1869,13 +1869,13 @@ static int
- virCgroupV1SetCpuCfsPeriod(virCgroupPtr group,
-                            unsigned long long cfs_period)
- {
--    /* The cfs_period should be greater or equal than 1ms, and less or equal
--     * than 1s.
--     */
--    if (cfs_period < 1000 || cfs_period > 1000000) {
-+    if (cfs_period < VIR_CGROUP_CPU_PERIOD_MIN ||
-+        cfs_period > VIR_CGROUP_CPU_PERIOD_MAX) {
-         virReportError(VIR_ERR_INVALID_ARG,
--                       _("cfs_period '%llu' must be in range (1000, 1000000)"),
--                       cfs_period);
-+                       _("cfs_period '%llu' must be in range (%llu, %llu)"),
-+                       cfs_period,
-+                       VIR_CGROUP_CPU_PERIOD_MIN,
-+                       VIR_CGROUP_CPU_PERIOD_MAX);
-         return -1;
-     }
- 
-@@ -1899,13 +1899,14 @@ static int
- virCgroupV1SetCpuCfsQuota(virCgroupPtr group,
-                           long long cfs_quota)
- {
--    /* The cfs_quota should be greater or equal than 1ms */
-     if (cfs_quota >= 0 &&
--        (cfs_quota < 1000 ||
--         cfs_quota > ULLONG_MAX / 1000)) {
-+        (cfs_quota < VIR_CGROUP_CPU_QUOTA_MIN ||
-+         cfs_quota > VIR_CGROUP_CPU_QUOTA_MAX)) {
-         virReportError(VIR_ERR_INVALID_ARG,
--                       _("cfs_quota '%lld' must be in range (1000, %llu)"),
--                       cfs_quota, ULLONG_MAX / 1000);
-+                       _("cfs_quota '%lld' must be in range (%llu, %llu)"),
-+                       cfs_quota,
-+                       VIR_CGROUP_CPU_QUOTA_MIN,
-+                       VIR_CGROUP_CPU_QUOTA_MAX);
-         return -1;
-     }
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroupv2-move-task-into-cgroup-before-enabling-controllers.patch b/SOURCES/libvirt-vircgroupv2-move-task-into-cgroup-before-enabling-controllers.patch
deleted file mode 100644
index 7a161d9..0000000
--- a/SOURCES/libvirt-vircgroupv2-move-task-into-cgroup-before-enabling-controllers.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-From 41a7547b32786b1a84c8ee7bad0c4cf9559ea4b9 Mon Sep 17 00:00:00 2001
-Message-Id: <41a7547b32786b1a84c8ee7bad0c4cf9559ea4b9@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:57 +0100
-Subject: [PATCH] vircgroupv2: move task into cgroup before enabling
- controllers
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When we create a new child cgroup and the parent cgroup has any process
-attached to it enabling controllers for the child cgroup fails with
-error. We need to move the process into the child cgroup first before
-enabling any controllers.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 382fa15cde538cba3888a89b301fd3d9a0ce69ea)
-
-Conflicts:
-    src/util/vircgroup.c
-        - missing upstream g_autofree rewrite
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <85d34403caacb571cb78539d5c4f56eee9484d57.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/vircgroup.c        | 13 +++++++------
- src/util/vircgroupbackend.h |  1 +
- src/util/vircgroupv1.c      |  1 +
- src/util/vircgroupv2.c      | 13 +++++++++++++
- 4 files changed, 22 insertions(+), 6 deletions(-)
-
-diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
-index 10b934291c..8f5bcd94f4 100644
---- a/src/util/vircgroup.c
-+++ b/src/util/vircgroup.c
-@@ -622,13 +622,14 @@ static int
- virCgroupMakeGroup(virCgroupPtr parent,
-                    virCgroupPtr group,
-                    bool create,
-+                   pid_t pid,
-                    unsigned int flags)
- {
-     size_t i;
- 
-     for (i = 0; i < VIR_CGROUP_BACKEND_TYPE_LAST; i++) {
-         if (group->backends[i] &&
--            group->backends[i]->makeGroup(parent, group, create, flags) < 0) {
-+            group->backends[i]->makeGroup(parent, group, create, pid, flags) < 0) {
-             virCgroupRemove(group);
-             return -1;
-         }
-@@ -857,8 +858,8 @@ virCgroupNewPartition(const char *path,
-         goto cleanup;
- 
-     if (parent) {
--        if (virCgroupMakeGroup(parent, *group, create, VIR_CGROUP_NONE) < 0)
--            goto cleanup;
-+        if (virCgroupMakeGroup(parent, *group, create, -1, VIR_CGROUP_NONE) < 0)
-+            return -1;
-     }
- 
-     ret = 0;
-@@ -924,7 +925,7 @@ virCgroupNewDomainPartition(virCgroupPtr partition,
-      * a group for driver, is to avoid overhead to track
-      * cumulative usage that we don't need.
-      */
--    if (virCgroupMakeGroup(partition, *group, create,
-+    if (virCgroupMakeGroup(partition, *group, create, -1,
-                            VIR_CGROUP_MEM_HIERACHY) < 0) {
-         virCgroupFree(group);
-         return -1;
-@@ -978,7 +979,7 @@ virCgroupNewThread(virCgroupPtr domain,
-     if (virCgroupNew(-1, name, domain, controllers, group) < 0)
-         return -1;
- 
--    if (virCgroupMakeGroup(domain, *group, create, VIR_CGROUP_THREAD) < 0) {
-+    if (virCgroupMakeGroup(domain, *group, create, -1, VIR_CGROUP_THREAD) < 0) {
-         virCgroupFree(group);
-         return -1;
-     }
-@@ -1065,7 +1066,7 @@ virCgroupEnableMissingControllers(char *path,
-                          &tmp) < 0)
-             goto cleanup;
- 
--        if (virCgroupMakeGroup(parent, tmp, true, VIR_CGROUP_SYSTEMD) < 0) {
-+        if (virCgroupMakeGroup(parent, tmp, true, -1, VIR_CGROUP_SYSTEMD) < 0) {
-             virCgroupFree(&tmp);
-             goto cleanup;
-         }
-diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h
-index e12a2e8b9d..ac7b3ae517 100644
---- a/src/util/vircgroupbackend.h
-+++ b/src/util/vircgroupbackend.h
-@@ -119,6 +119,7 @@ typedef int
- (*virCgroupMakeGroupCB)(virCgroupPtr parent,
-                         virCgroupPtr group,
-                         bool create,
-+                        pid_t pid,
-                         unsigned int flags);
- 
- typedef int
-diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
-index 09165ece4d..eb2b611cee 100644
---- a/src/util/vircgroupv1.c
-+++ b/src/util/vircgroupv1.c
-@@ -601,6 +601,7 @@ static int
- virCgroupV1MakeGroup(virCgroupPtr parent,
-                      virCgroupPtr group,
-                      bool create,
-+                     pid_t pid G_GNUC_UNUSED,
-                      unsigned int flags)
- {
-     size_t i;
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index 8fe4894a9e..5e19ed8332 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -398,10 +398,17 @@ virCgroupV2EnableController(virCgroupPtr group,
- }
- 
- 
-+static int
-+virCgroupV2AddTask(virCgroupPtr group,
-+                   pid_t pid,
-+                   unsigned int flags);
-+
-+
- static int
- virCgroupV2MakeGroup(virCgroupPtr parent,
-                      virCgroupPtr group,
-                      bool create,
-+                     pid_t pid,
-                      unsigned int flags)
- {
-     g_autofree char *path = NULL;
-@@ -449,6 +456,12 @@ virCgroupV2MakeGroup(virCgroupPtr parent,
-             }
-         } else {
-             size_t i;
-+
-+            if (pid > 0) {
-+                if (virCgroupV2AddTask(group, pid, VIR_CGROUP_TASK_PROCESS) < 0)
-+                    return -1;
-+            }
-+
-             for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
-                 int rc;
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroupv2-properly-detect-placement-of-running-VM.patch b/SOURCES/libvirt-vircgroupv2-properly-detect-placement-of-running-VM.patch
deleted file mode 100644
index 799b56b..0000000
--- a/SOURCES/libvirt-vircgroupv2-properly-detect-placement-of-running-VM.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From 9cf56b5a0d1394fef10afdd763dc8005457bbaf5 Mon Sep 17 00:00:00 2001
-Message-Id: <9cf56b5a0d1394fef10afdd763dc8005457bbaf5@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:51 +0100
-Subject: [PATCH] vircgroupv2: properly detect placement of running VM
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-When libvirtd starts a VM it internally stores a path to the main
-cgroup. When we restart libvirtd we should get to the same state.
-
-When we start a VM on host with systemd the cgroup is created for us and
-the process is already placed into that cgroup and we detect the path
-created by systemd using /proc/$PID/cgroup. After that we create
-sub-cgroups and move all threads there.
-
-Once libvirtd is restarted we again detect the cgroup path using
-/proc/$PID/cgroup, but in this case we will get a different path because
-the main thread was moved to a "emulator" cgroup.
-
-Instead of ignoring the "emulator" directory when validating cgroups
-remove it completely when detecting cgroup otherwise cgroups will not
-work properly when libvirtd is restarted.
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 902c6644a8ec292789d561b3188e576c37a86872)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <10fb6b61cbb4f9caf8e8ba7706ec01d1da41fc67.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/vircgroupv2.c | 17 ++++++++++-------
- 1 file changed, 10 insertions(+), 7 deletions(-)
-
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index 92ae3ec839..4682a6a920 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -121,12 +121,6 @@ virCgroupV2ValidateMachineGroup(virCgroupPtr group,
-     if (!(tmp = strrchr(group->unified.placement, '/')))
-         return false;
- 
--    if (STREQ(tmp, "/emulator")) {
--        *tmp = '\0';
--
--        if (!(tmp = strrchr(group->unified.placement, '/')))
--            return false;
--    }
-     tmp++;
- 
-     if (STRNEQ(tmp, partmachinename) &&
-@@ -197,6 +191,9 @@ virCgroupV2DetectPlacement(virCgroupPtr group,
-                            const char *controllers,
-                            const char *selfpath)
- {
-+    g_autofree char *placement = g_strdup(selfpath);
-+    char *tmp = NULL;
-+
-     if (group->unified.placement)
-         return 0;
- 
-@@ -207,12 +204,18 @@ virCgroupV2DetectPlacement(virCgroupPtr group,
-     if (STRNEQ(controllers, ""))
-         return 0;
- 
-+    /* Running VM will have the main thread placed in emulator cgroup
-+     * but we need to get the main cgroup. */
-+    tmp = g_strrstr(placement, "/emulator");
-+    if (tmp)
-+        *tmp = '\0';
-+
-     /*
-      * selfpath == "/" + path="" -> "/"
-      * selfpath == "/libvirt.service" + path == "" -> "/libvirt.service"
-      * selfpath == "/libvirt.service" + path == "foo" -> "/libvirt.service/foo"
-      */
--    group->unified.placement = g_strdup_printf("%s%s%s", selfpath,
-+    group->unified.placement = g_strdup_printf("%s%s%s", placement,
-                                                (STREQ(selfpath, "/") || STREQ(path, "") ? "" : "/"), path);
- 
-     return 0;
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vircgroupv2-use-defines-for-cpu-period-and-quota-limits.patch b/SOURCES/libvirt-vircgroupv2-use-defines-for-cpu-period-and-quota-limits.patch
deleted file mode 100644
index bcb1769..0000000
--- a/SOURCES/libvirt-vircgroupv2-use-defines-for-cpu-period-and-quota-limits.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From b96501e90f7b3fbea1427ab6adeade7d8e707d07 Mon Sep 17 00:00:00 2001
-Message-Id: <b96501e90f7b3fbea1427ab6adeade7d8e707d07@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Thu, 21 Jan 2021 10:24:05 -0300
-Subject: [PATCH] vircgroupv2: use defines for cpu period and quota limits
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-(cherry picked from commit 98a09ca48ed4fc011abf2aa290e02ce1b8f1bb5f)
-
-https://bugzilla.redhat.com/1915733
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20210121132406.337681-4-dbarboza@redhat.com>
-Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
----
- src/util/vircgroupv2.c | 25 +++++++++++++------------
- 1 file changed, 13 insertions(+), 12 deletions(-)
-
-diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c
-index 1d8c599f6a..92ae3ec839 100644
---- a/src/util/vircgroupv2.c
-+++ b/src/util/vircgroupv2.c
-@@ -1476,12 +1476,12 @@ virCgroupV2SetCpuCfsPeriod(virCgroupPtr group,
-     g_autofree char *str = NULL;
-     char *tmp;
- 
--    /* The cfs_period should be greater or equal than 1ms, and less or equal
--     * than 1s.
--     */
--    if (cfs_period < 1000 || cfs_period > 1000000) {
-+    if (cfs_period < VIR_CGROUP_CPU_PERIOD_MIN ||
-+        cfs_period > VIR_CGROUP_CPU_PERIOD_MAX) {
-         virReportError(VIR_ERR_INVALID_ARG,
--                       _("cfs_period '%llu' must be in range (1000, 1000000)"),
-+                       _("cfs_period '%llu' must be in range (%llu, %llu)"),
-+                       VIR_CGROUP_CPU_PERIOD_MIN,
-+                       VIR_CGROUP_CPU_PERIOD_MAX,
-                        cfs_period);
-         return -1;
-     }
-@@ -1537,17 +1537,18 @@ static int
- virCgroupV2SetCpuCfsQuota(virCgroupPtr group,
-                           long long cfs_quota)
- {
--    /* The cfs_quota should be greater or equal than 1ms */
-     if (cfs_quota >= 0 &&
--        (cfs_quota < 1000 ||
--         cfs_quota > ULLONG_MAX / 1000)) {
-+        (cfs_quota < VIR_CGROUP_CPU_QUOTA_MIN ||
-+         cfs_quota > VIR_CGROUP_CPU_QUOTA_MAX)) {
-         virReportError(VIR_ERR_INVALID_ARG,
--                       _("cfs_quota '%lld' must be in range (1000, %llu)"),
--                       cfs_quota, ULLONG_MAX / 1000);
-+                       _("cfs_quota '%lld' must be in range (%llu, %llu)"),
-+                       cfs_quota,
-+                       VIR_CGROUP_CPU_QUOTA_MIN,
-+                       VIR_CGROUP_CPU_QUOTA_MAX);
-         return -1;
-     }
- 
--    if (cfs_quota == ULLONG_MAX / 1000) {
-+    if (cfs_quota == VIR_CGROUP_CPU_QUOTA_MAX) {
-         return virCgroupSetValueStr(group,
-                                     VIR_CGROUP_CONTROLLER_CPU,
-                                     "cpu.max", "max");
-@@ -1572,7 +1573,7 @@ virCgroupV2GetCpuCfsQuota(virCgroupPtr group,
-     }
- 
-     if (STREQLEN(str, "max", 3)) {
--        *cfs_quota = ULLONG_MAX / 1000;
-+        *cfs_quota = VIR_CGROUP_CPU_QUOTA_MAX;
-         return 0;
-     }
- 
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-virdevmapper-Don-t-cache-device-mapper-major.patch b/SOURCES/libvirt-virdevmapper-Don-t-cache-device-mapper-major.patch
deleted file mode 100644
index c02e3ab..0000000
--- a/SOURCES/libvirt-virdevmapper-Don-t-cache-device-mapper-major.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From bc406e0919e72b1f108ded76a380212b179c8572 Mon Sep 17 00:00:00 2001
-Message-Id: <bc406e0919e72b1f108ded76a380212b179c8572@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 25 Aug 2020 17:16:05 +0200
-Subject: [PATCH] virdevmapper: Don't cache device-mapper major
-
-The device mapper major is needed in virIsDevMapperDevice() which
-determines whether given device is managed by device-mapper. This
-number is obtained by parsing /proc/devices and then stored in a
-global variable so that the file doesn't have to be parsed again.
-However, as it turns out this logic is flawed - the major number
-is not static and can change as it can be specified as a
-parameter when loading the dm-mod module.
-
-Unfortunately, I was not able to come up with a good solution and
-thus the /proc/devices file is being parsed every time we need
-the device mapper major.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit 82bb167f0d15b733b23931205be3488b83cb9ec6)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <64b6d6124918bc8cfe220464752eac93cd6d6734.1598364552.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virdevmapper.c | 17 +++++------------
- 1 file changed, 5 insertions(+), 12 deletions(-)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index a471504176..b43dbefa9a 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -46,11 +46,9 @@
- 
- G_STATIC_ASSERT(BUF_SIZE > sizeof(struct dm_ioctl));
- 
--static unsigned int virDMMajor;
--
- 
- static int
--virDevMapperOnceInit(void)
-+virDevMapperGetMajor(unsigned int *major)
- {
-     g_autofree char *buf = NULL;
-     VIR_AUTOSTRINGLIST lines = NULL;
-@@ -69,7 +67,7 @@ virDevMapperOnceInit(void)
- 
-         if (sscanf(lines[i], "%u %ms\n", &maj, &dev) == 2 &&
-             STREQ(dev, DM_NAME)) {
--            virDMMajor = maj;
-+            *major = maj;
-             break;
-         }
-     }
-@@ -85,9 +83,6 @@ virDevMapperOnceInit(void)
- }
- 
- 
--VIR_ONCE_GLOBAL_INIT(virDevMapper);
--
--
- static void *
- virDMIoctl(int controlFD, int cmd, struct dm_ioctl *dm, char **buf)
- {
-@@ -305,9 +300,6 @@ virDevMapperGetTargets(const char *path,
-      * consist of devices or yet another targets. If that's the
-      * case, we have to stop recursion somewhere. */
- 
--    if (virDevMapperInitialize() < 0)
--        return -1;
--
-     if ((controlFD = virDMOpen()) < 0)
-         return -1;
- 
-@@ -319,13 +311,14 @@ bool
- virIsDevMapperDevice(const char *dev_name)
- {
-     struct stat buf;
-+    unsigned int major;
- 
--    if (virDevMapperInitialize() < 0)
-+    if (virDevMapperGetMajor(&major) < 0)
-         return false;
- 
-     if (!stat(dev_name, &buf) &&
-         S_ISBLK(buf.st_mode) &&
--        major(buf.st_rdev) == virDMMajor)
-+        major(buf.st_rdev) == major)
-         return true;
- 
-     return false;
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virdevmapper-Don-t-use-libdevmapper-to-obtain-dependencies.patch b/SOURCES/libvirt-virdevmapper-Don-t-use-libdevmapper-to-obtain-dependencies.patch
deleted file mode 100644
index 27647cd..0000000
--- a/SOURCES/libvirt-virdevmapper-Don-t-use-libdevmapper-to-obtain-dependencies.patch
+++ /dev/null
@@ -1,467 +0,0 @@
-From 7ba9a0bbdf30984c13e7719e0646fffc7539f853 Mon Sep 17 00:00:00 2001
-Message-Id: <7ba9a0bbdf30984c13e7719e0646fffc7539f853@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 27 Jul 2020 12:36:52 +0200
-Subject: [PATCH] virdevmapper: Don't use libdevmapper to obtain dependencies
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CVE-2020-14339
-
-When building domain's private /dev in a namespace, libdevmapper
-is consulted for getting full dependency tree of domain's disks.
-The reason is that for a multipath devices all dependent devices
-must be created in the namespace and allowed in CGroups.
-
-However, this approach is very fragile as building of namespace
-happens in the forked off child process, after mass close of FDs
-and just before dropping privileges and execing QEMU. And it so
-happens that when calling libdevmapper APIs, one of them opens
-/dev/mapper/control and saves the FD into a global variable. The
-FD is kept open until the lib is unlinked or dm_lib_release() is
-called explicitly. We are doing neither.
-
-However, the virDevMapperGetTargets() function is called also
-from libvirtd (when setting up CGroups) and thus has to be thread
-safe. Unfortunately, libdevmapper APIs are not thread safe (nor
-async signal safe) and thus we can't use them. Reimplement what
-libdevmapper would do using plain C (ioctl()-s, /proc/devices
-parsing, /dev/mapper dirwalking, and so on).
-
-Fixes: a30078cb832646177defd256e77c632905f1e6d0
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1858260
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit 22494556542c676d1b9e7f1c1f2ea13ac17e1e3e)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Conflicts:
-- po/POTFILES.in - In c6a0d3ff8b4ead3b1f38a40668df65f152cc2f32
-  (po: change the format of POTFILES.in) we've changed the format
-  of the file and haven't backported it, yet.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <bf0ad2c93723aab2579368496aab4289701a94d8.1595846084.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- po/POTFILES.in          |   1 +
- src/util/virdevmapper.c | 300 +++++++++++++++++++++++++++++-----------
- 2 files changed, 217 insertions(+), 84 deletions(-)
-
-diff --git a/po/POTFILES.in b/po/POTFILES.in
-index 29984042f4..49348292eb 100644
---- a/po/POTFILES.in
-+++ b/po/POTFILES.in
-@@ -238,6 +238,7 @@
- @SRCDIR@/src/util/vircrypto.c
- @SRCDIR@/src/util/virdbus.c
- @SRCDIR@/src/util/virdnsmasq.c
-+@SRCDIR@/src/util/virdevmapper.c
- @SRCDIR@/src/util/virerror.c
- @SRCDIR@/src/util/virerror.h
- @SRCDIR@/src/util/virevent.c
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index 44c4731fb4..a471504176 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -20,38 +20,67 @@
- 
- #include <config.h>
- 
-+#include "virdevmapper.h"
-+#include "internal.h"
-+
- #ifdef __linux__
- # include <sys/sysmacros.h>
--#endif
-+# include <linux/dm-ioctl.h>
-+# include <sys/ioctl.h>
-+# include <sys/types.h>
-+# include <sys/stat.h>
-+# include <fcntl.h>
- 
--#ifdef WITH_DEVMAPPER
--# include <libdevmapper.h>
--#endif
-+# include "virthread.h"
-+# include "viralloc.h"
-+# include "virstring.h"
-+# include "virfile.h"
-+
-+# define VIR_FROM_THIS VIR_FROM_STORAGE
-+
-+# define PROC_DEVICES "/proc/devices"
-+# define DM_NAME "device-mapper"
-+# define DEV_DM_DIR "/dev/" DM_DIR
-+# define CONTROL_PATH DEV_DM_DIR "/" DM_CONTROL_NODE
-+# define BUF_SIZE (16 * 1024)
-+
-+G_STATIC_ASSERT(BUF_SIZE > sizeof(struct dm_ioctl));
-+
-+static unsigned int virDMMajor;
- 
--#include "virdevmapper.h"
--#include "internal.h"
--#include "virthread.h"
--#include "viralloc.h"
--#include "virstring.h"
--
--#ifdef WITH_DEVMAPPER
--static void
--virDevMapperDummyLogger(int level G_GNUC_UNUSED,
--                        const char *file G_GNUC_UNUSED,
--                        int line G_GNUC_UNUSED,
--                        int dm_errno G_GNUC_UNUSED,
--                        const char *fmt G_GNUC_UNUSED,
--                        ...)
--{
--    return;
--}
- 
- static int
- virDevMapperOnceInit(void)
- {
--    /* Ideally, we would not need this. But libdevmapper prints
--     * error messages to stderr by default. Sad but true. */
--    dm_log_with_errno_init(virDevMapperDummyLogger);
-+    g_autofree char *buf = NULL;
-+    VIR_AUTOSTRINGLIST lines = NULL;
-+    size_t i;
-+
-+    if (virFileReadAll(PROC_DEVICES, BUF_SIZE, &buf) < 0)
-+        return -1;
-+
-+    lines = virStringSplit(buf, "\n", 0);
-+    if (!lines)
-+        return -1;
-+
-+    for (i = 0; lines[i]; i++) {
-+        g_autofree char *dev = NULL;
-+        unsigned int maj;
-+
-+        if (sscanf(lines[i], "%u %ms\n", &maj, &dev) == 2 &&
-+            STREQ(dev, DM_NAME)) {
-+            virDMMajor = maj;
-+            break;
-+        }
-+    }
-+
-+    if (!lines[i]) {
-+        virReportError(VIR_ERR_INTERNAL_ERROR,
-+                       _("Unable to find major for %s"),
-+                       DM_NAME);
-+        return -1;
-+    }
-+
-     return 0;
- }
- 
-@@ -59,94 +88,190 @@ virDevMapperOnceInit(void)
- VIR_ONCE_GLOBAL_INIT(virDevMapper);
- 
- 
-+static void *
-+virDMIoctl(int controlFD, int cmd, struct dm_ioctl *dm, char **buf)
-+{
-+    size_t bufsize = BUF_SIZE;
-+
-+ reread:
-+    *buf = g_new0(char, bufsize);
-+
-+    dm->version[0] = DM_VERSION_MAJOR;
-+    dm->version[1] = 0;
-+    dm->version[2] = 0;
-+    dm->data_size = bufsize;
-+    dm->data_start = sizeof(struct dm_ioctl);
-+
-+    memcpy(*buf, dm, sizeof(struct dm_ioctl));
-+
-+    if (ioctl(controlFD, cmd, *buf) < 0) {
-+        VIR_FREE(*buf);
-+        return NULL;
-+    }
-+
-+    memcpy(dm, *buf, sizeof(struct dm_ioctl));
-+
-+    if (dm->flags & DM_BUFFER_FULL_FLAG) {
-+        bufsize += BUF_SIZE;
-+        VIR_FREE(*buf);
-+        goto reread;
-+    }
-+
-+    return *buf + dm->data_start;
-+}
-+
-+
- static int
--virDevMapperGetTargetsImpl(const char *path,
-+virDMOpen(void)
-+{
-+    VIR_AUTOCLOSE controlFD = -1;
-+    struct dm_ioctl dm;
-+    g_autofree char *tmp = NULL;
-+    int ret;
-+
-+    memset(&dm, 0, sizeof(dm));
-+
-+    if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0)
-+        return -1;
-+
-+    if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) {
-+        virReportSystemError(errno, "%s",
-+                             _("Unable to get device-mapper version"));
-+        return -1;
-+    }
-+
-+    if (dm.version[0] != DM_VERSION_MAJOR) {
-+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
-+                       _("Unsupported device-mapper version. Expected %d got %d"),
-+                       DM_VERSION_MAJOR, dm.version[0]);
-+        return -1;
-+    }
-+
-+    ret = controlFD;
-+    controlFD = -1;
-+    return ret;
-+}
-+
-+
-+static char *
-+virDMSanitizepath(const char *path)
-+{
-+    g_autofree char *dmDirPath = NULL;
-+    struct dirent *ent = NULL;
-+    struct stat sb[2];
-+    DIR *dh = NULL;
-+    const char *p;
-+    char *ret = NULL;
-+    int rc;
-+
-+    /* If a path is NOT provided then assume it's DM name */
-+    p = strrchr(path, '/');
-+
-+    if (!p)
-+        return g_strdup(path);
-+    else
-+        p++;
-+
-+    /* It's a path. Check if the last component is DM name */
-+    if (stat(path, &sb[0]) < 0) {
-+        virReportError(errno,
-+                       _("Unable to stat %p"),
-+                       path);
-+        return NULL;
-+    }
-+
-+    dmDirPath = g_strdup_printf(DEV_DM_DIR "/%s", p);
-+
-+    if (stat(dmDirPath, &sb[1]) == 0 &&
-+        sb[0].st_rdev == sb[1].st_rdev) {
-+        return g_strdup(p);
-+    }
-+
-+    /* The last component of @path wasn't DM name. Let's check if
-+     * there's a device under /dev/mapper/ with the same rdev. */
-+    if (virDirOpen(&dh, DEV_DM_DIR) < 0)
-+        return NULL;
-+
-+    while ((rc = virDirRead(dh, &ent, DEV_DM_DIR)) > 0) {
-+        g_autofree char *tmp = g_strdup_printf(DEV_DM_DIR "/%s", ent->d_name);
-+
-+        if (stat(tmp, &sb[1]) == 0 &&
-+            sb[0].st_rdev == sb[0].st_rdev) {
-+            ret = g_steal_pointer(&tmp);
-+            break;
-+        }
-+    }
-+
-+    virDirClose(&dh);
-+    return ret;
-+}
-+
-+
-+static int
-+virDevMapperGetTargetsImpl(int controlFD,
-+                           const char *path,
-                            char ***devPaths_ret,
-                            unsigned int ttl)
- {
--    struct dm_task *dmt = NULL;
--    struct dm_deps *deps;
--    struct dm_info info;
-+    g_autofree char *sanitizedPath = NULL;
-+    g_autofree char *buf = NULL;
-+    struct dm_ioctl dm;
-+    struct dm_target_deps *deps = NULL;
-     VIR_AUTOSTRINGLIST devPaths = NULL;
-     size_t i;
--    int ret = -1;
- 
-+    memset(&dm, 0, sizeof(dm));
-     *devPaths_ret = NULL;
- 
--    if (virDevMapperInitialize() < 0)
--        return ret;
--
-     if (ttl == 0) {
-         errno = ELOOP;
--        return ret;
-+        return -1;
-     }
- 
-     if (!virIsDevMapperDevice(path))
-         return 0;
- 
--    if (!(dmt = dm_task_create(DM_DEVICE_DEPS))) {
--        if (errno == ENOENT || errno == ENODEV) {
--            /* It's okay. Kernel is probably built without
--             * devmapper support. */
--            ret = 0;
--        }
--        return ret;
--    }
--
--    if (!dm_task_set_name(dmt, path)) {
--        if (errno == ENOENT) {
--            /* It's okay, @path is not managed by devmapper =>
--             * not a devmapper device. */
--            ret = 0;
--        }
--        goto cleanup;
--    }
--
--    dm_task_no_open_count(dmt);
-+    if (!(sanitizedPath = virDMSanitizepath(path)))
-+        return 0;
- 
--    if (!dm_task_run(dmt)) {
--        if (errno == ENXIO) {
--            /* If @path = "/dev/mapper/control" ENXIO is returned. */
--            ret = 0;
--        }
--        goto cleanup;
-+    if (virStrncpy(dm.name, sanitizedPath, -1, DM_TABLE_DEPS) < 0) {
-+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
-+                       _("Resolved device mapper name too long"));
-+        return -1;
-     }
- 
--    if (!dm_task_get_info(dmt, &info))
--        goto cleanup;
-+    deps = virDMIoctl(controlFD, DM_TABLE_DEPS, &dm, &buf);
-+    if (!deps) {
-+        if (errno == ENXIO)
-+            return 0;
- 
--    if (!info.exists) {
--        ret = 0;
--        goto cleanup;
-+        virReportSystemError(errno,
-+                             _("Unable to query dependencies for %s"),
-+                             path);
-+        return -1;
-     }
- 
--    if (!(deps = dm_task_get_deps(dmt)))
--        goto cleanup;
--
-     if (VIR_ALLOC_N_QUIET(devPaths, deps->count + 1) < 0)
--        goto cleanup;
-+        return -1;
- 
-     for (i = 0; i < deps->count; i++) {
-         devPaths[i] = g_strdup_printf("/dev/block/%u:%u",
--                                      major(deps->device[i]),
--                                      minor(deps->device[i]));
-+                                      major(deps->dev[i]),
-+                                      minor(deps->dev[i]));
-     }
- 
-     for (i = 0; i < deps->count; i++) {
-         VIR_AUTOSTRINGLIST tmpPaths = NULL;
- 
--        if (virDevMapperGetTargetsImpl(devPaths[i], &tmpPaths, ttl - 1) < 0)
--            goto cleanup;
-+        if (virDevMapperGetTargetsImpl(controlFD, devPaths[i], &tmpPaths, ttl - 1) < 0)
-+            return -1;
- 
-         if (virStringListMerge(&devPaths, &tmpPaths) < 0)
--            goto cleanup;
-+            return -1;
-     }
- 
-     *devPaths_ret = g_steal_pointer(&devPaths);
--    ret = 0;
-- cleanup:
--    dm_task_destroy(dmt);
--    return ret;
-+    return 0;
- }
- 
- 
-@@ -165,9 +290,6 @@ virDevMapperGetTargetsImpl(const char *path,
-  * If @path consists of yet another devmapper targets these are
-  * consulted recursively.
-  *
-- * If we don't have permissions to talk to kernel, -1 is returned
-- * and errno is set to EBADF.
-- *
-  * Returns 0 on success,
-  *        -1 otherwise (with errno set, no libvirt error is
-  *        reported)
-@@ -176,13 +298,20 @@ int
- virDevMapperGetTargets(const char *path,
-                        char ***devPaths)
- {
-+    VIR_AUTOCLOSE controlFD = -1;
-     const unsigned int ttl = 32;
- 
-     /* Arbitrary limit on recursion level. A devmapper target can
-      * consist of devices or yet another targets. If that's the
-      * case, we have to stop recursion somewhere. */
- 
--    return virDevMapperGetTargetsImpl(path, devPaths, ttl);
-+    if (virDevMapperInitialize() < 0)
-+        return -1;
-+
-+    if ((controlFD = virDMOpen()) < 0)
-+        return -1;
-+
-+    return virDevMapperGetTargetsImpl(controlFD, path, devPaths, ttl);
- }
- 
- 
-@@ -191,15 +320,18 @@ virIsDevMapperDevice(const char *dev_name)
- {
-     struct stat buf;
- 
-+    if (virDevMapperInitialize() < 0)
-+        return false;
-+
-     if (!stat(dev_name, &buf) &&
-         S_ISBLK(buf.st_mode) &&
--        dm_is_dm_major(major(buf.st_rdev)))
--            return true;
-+        major(buf.st_rdev) == virDMMajor)
-+        return true;
- 
-     return false;
- }
- 
--#else /* ! WITH_DEVMAPPER */
-+#else /* !defined(__linux__)  */
- 
- int
- virDevMapperGetTargets(const char *path G_GNUC_UNUSED,
-@@ -215,4 +347,4 @@ virIsDevMapperDevice(const char *dev_name G_GNUC_UNUSED)
- {
-     return false;
- }
--#endif /* ! WITH_DEVMAPPER */
-+#endif /* ! defined(__linux__) */
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virdevmapper-Handle-kernel-without-device-mapper-support.patch b/SOURCES/libvirt-virdevmapper-Handle-kernel-without-device-mapper-support.patch
deleted file mode 100644
index c55aa74..0000000
--- a/SOURCES/libvirt-virdevmapper-Handle-kernel-without-device-mapper-support.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From a9c950dcbac1f708bcd01111d4ec9b550db37fe3 Mon Sep 17 00:00:00 2001
-Message-Id: <a9c950dcbac1f708bcd01111d4ec9b550db37fe3@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 25 Aug 2020 17:16:06 +0200
-Subject: [PATCH] virdevmapper: Handle kernel without device-mapper support
-
-In one of my latest patch (v6.6.0~30) I was trying to remove
-libdevmapper use in favor of our own implementation. However, the
-code did not take into account that device mapper can be not
-compiled into the kernel (e.g. be a separate module that's not
-loaded) in which case /proc/devices won't have the device-mapper
-major number and thus virDevMapperGetTargets() and/or
-virIsDevMapperDevice() fails.
-
-However, such failure is safe to ignore, because if device mapper
-is missing then there can't be any multipath devices and thus we
-don't need to allow the deps in CGroups, nor create them in the
-domain private namespace, etc.
-
-Fixes: 22494556542c676d1b9e7f1c1f2ea13ac17e1e3e
-Reported-by: Andrea Bolognani <abologna@redhat.com>
-Reported-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-(cherry picked from commit feb8564a3cc63bc8f68284063d53ec0d2d81a1cc)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <71fcd93071dffdf4942ccce8671af7fcbcec397f.1598364552.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virdevmapper.c | 20 ++++++++++++++++++--
- 1 file changed, 18 insertions(+), 2 deletions(-)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index b43dbefa9a..a81e2edee4 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -54,6 +54,9 @@ virDevMapperGetMajor(unsigned int *major)
-     VIR_AUTOSTRINGLIST lines = NULL;
-     size_t i;
- 
-+    if (!virFileExists(CONTROL_PATH))
-+        return -2;
-+
-     if (virFileReadAll(PROC_DEVICES, BUF_SIZE, &buf) < 0)
-         return -1;
- 
-@@ -126,8 +129,13 @@ virDMOpen(void)
- 
-     memset(&dm, 0, sizeof(dm));
- 
--    if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0)
-+    if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) {
-+        if (errno == ENOENT)
-+            return -2;
-+
-+        virReportSystemError(errno, _("Unable to open %s"), CONTROL_PATH);
-         return -1;
-+    }
- 
-     if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) {
-         virReportSystemError(errno, "%s",
-@@ -300,8 +308,16 @@ virDevMapperGetTargets(const char *path,
-      * consist of devices or yet another targets. If that's the
-      * case, we have to stop recursion somewhere. */
- 
--    if ((controlFD = virDMOpen()) < 0)
-+    if ((controlFD = virDMOpen()) < 0) {
-+        if (controlFD == -2) {
-+            /* The CONTROL_PATH doesn't exist. Probably the
-+             * module isn't loaded, yet. Don't error out, just
-+             * exit. */
-+            return 0;
-+        }
-+
-         return -1;
-+    }
- 
-     return virDevMapperGetTargetsImpl(controlFD, path, devPaths, ttl);
- }
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virdevmapper-Ignore-all-errors-when-opening-dev-mapper-control.patch b/SOURCES/libvirt-virdevmapper-Ignore-all-errors-when-opening-dev-mapper-control.patch
deleted file mode 100644
index d7ab070..0000000
--- a/SOURCES/libvirt-virdevmapper-Ignore-all-errors-when-opening-dev-mapper-control.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From b38ab86a0a2cf3453d37a5fe96b2e022d8a1d48a Mon Sep 17 00:00:00 2001
-Message-Id: <b38ab86a0a2cf3453d37a5fe96b2e022d8a1d48a@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Tue, 25 Aug 2020 17:16:07 +0200
-Subject: [PATCH] virdevmapper: Ignore all errors when opening
- /dev/mapper/control
-
-So far, only ENOENT is ignored (to deal with kernels without
-devmapper). However, as reported on the list, under certain
-scenarios a different error can occur. For instance, when libvirt
-is running inside a container which doesn't have permissions to
-talk to the devmapper. If this is the case, then open() returns
--1 and sets errno=EPERM.
-
-Assuming that multipath devices are fairly narrow use case and
-using them in a restricted container is even more narrow the best
-fix seems to be to ignore all open errors BUT produce a warning
-on failure. To avoid flooding logs with warnings on kernels
-without devmapper the level is reduced to a plain debug message.
-
-Reported-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 53d9af1e7924757e3b5f661131dd707d7110d094)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <e1b69d69e7d242829995208c6d59ed0477208920.1598364552.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virdevmapper.c | 23 +++++++++++++++--------
- 1 file changed, 15 insertions(+), 8 deletions(-)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index a81e2edee4..ee2fab5ae3 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -35,9 +35,12 @@
- # include "viralloc.h"
- # include "virstring.h"
- # include "virfile.h"
-+# include "virlog.h"
- 
- # define VIR_FROM_THIS VIR_FROM_STORAGE
- 
-+VIR_LOG_INIT("util.virdevmapper");
-+
- # define PROC_DEVICES "/proc/devices"
- # define DM_NAME "device-mapper"
- # define DEV_DM_DIR "/dev/" DM_DIR
-@@ -130,11 +133,15 @@ virDMOpen(void)
-     memset(&dm, 0, sizeof(dm));
- 
-     if ((controlFD = open(CONTROL_PATH, O_RDWR)) < 0) {
--        if (errno == ENOENT)
--            return -2;
--
--        virReportSystemError(errno, _("Unable to open %s"), CONTROL_PATH);
--        return -1;
-+        /* We can't talk to devmapper. Produce a warning and let
-+         * the caller decide what to do next. */
-+        if (errno == ENOENT) {
-+            VIR_DEBUG("device mapper not available");
-+        } else {
-+            VIR_WARN("unable to open %s: %s",
-+                     CONTROL_PATH, g_strerror(errno));
-+        }
-+        return -2;
-     }
- 
-     if (!virDMIoctl(controlFD, DM_VERSION, &dm, &tmp)) {
-@@ -310,9 +317,9 @@ virDevMapperGetTargets(const char *path,
- 
-     if ((controlFD = virDMOpen()) < 0) {
-         if (controlFD == -2) {
--            /* The CONTROL_PATH doesn't exist. Probably the
--             * module isn't loaded, yet. Don't error out, just
--             * exit. */
-+            /* The CONTROL_PATH doesn't exist or is unusable.
-+             * Probably the module isn't loaded, yet. Don't error
-+             * out, just exit. */
-             return 0;
-         }
- 
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virdevmapper.c-Join-two-WITH_DEVMAPPER-sections-together.patch b/SOURCES/libvirt-virdevmapper.c-Join-two-WITH_DEVMAPPER-sections-together.patch
deleted file mode 100644
index c3b6b78..0000000
--- a/SOURCES/libvirt-virdevmapper.c-Join-two-WITH_DEVMAPPER-sections-together.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 4e021109613173e72df17eca6bff970ebb86b47f Mon Sep 17 00:00:00 2001
-Message-Id: <4e021109613173e72df17eca6bff970ebb86b47f@dist-git>
-From: Michal Privoznik <mprivozn@redhat.com>
-Date: Mon, 27 Jul 2020 12:36:50 +0200
-Subject: [PATCH] virdevmapper.c: Join two WITH_DEVMAPPER sections together
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-There are two distinct WITH_DEVMAPPER sections in the file, for
-different functions each. Rearrange the code to make some of
-future commits smaller.
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
-(cherry picked from commit ae5752aabc09f435675504246e30a0b9c4795d79)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1860421
-
-Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
-Message-Id: <2b5410a10bb23e8a9526c663052afbb6f37b0a0c.1595846084.git.mprivozn@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virdevmapper.c | 21 +++++++++------------
- 1 file changed, 9 insertions(+), 12 deletions(-)
-
-diff --git a/src/util/virdevmapper.c b/src/util/virdevmapper.c
-index 40a82285f9..118dc82e94 100644
---- a/src/util/virdevmapper.c
-+++ b/src/util/virdevmapper.c
-@@ -195,19 +195,7 @@ virDevMapperGetTargets(const char *path,
-     return virDevMapperGetTargetsImpl(path, devPaths, ttl);
- }
- 
--#else /* ! WITH_DEVMAPPER */
--
--int
--virDevMapperGetTargets(const char *path G_GNUC_UNUSED,
--                       char ***devPaths G_GNUC_UNUSED)
--{
--    errno = ENOSYS;
--    return -1;
--}
--#endif /* ! WITH_DEVMAPPER */
- 
--
--#if WITH_DEVMAPPER
- bool
- virIsDevMapperDevice(const char *dev_name)
- {
-@@ -223,6 +211,15 @@ virIsDevMapperDevice(const char *dev_name)
- 
- #else /* ! WITH_DEVMAPPER */
- 
-+int
-+virDevMapperGetTargets(const char *path G_GNUC_UNUSED,
-+                       char ***devPaths G_GNUC_UNUSED)
-+{
-+    errno = ENOSYS;
-+    return -1;
-+}
-+
-+
- bool
- virIsDevMapperDevice(const char *dev_name G_GNUC_UNUSED)
- {
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virhash-Fix-the-expectations-of-virHashKeyEqual-implementations.patch b/SOURCES/libvirt-virhash-Fix-the-expectations-of-virHashKeyEqual-implementations.patch
deleted file mode 100644
index be07d36..0000000
--- a/SOURCES/libvirt-virhash-Fix-the-expectations-of-virHashKeyEqual-implementations.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 946b656463d4947801be9ac138113feec1f0cf48 Mon Sep 17 00:00:00 2001
-Message-Id: <946b656463d4947801be9ac138113feec1f0cf48@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Tue, 4 Feb 2020 15:08:19 +0100
-Subject: [PATCH] virhash: Fix the expectations of virHashKeyEqual
- implementations
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Tweak the return value expectation comment so that it doesn't
-necessarily require to allocate memory and refactor the implementations.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 6cf3ec4428c6b3f3dae30286e50bb7396615cf56)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1207659
-Message-Id: <2b3b0d52d6baa6ddb67b26520cfae1a5f247d803.1580824112.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/conf/domain_addr.c | 5 +----
- src/util/virhash.c     | 4 +---
- src/util/virhash.h     | 3 ++-
- 3 files changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
-index f07b3d9725..e0be655772 100644
---- a/src/conf/domain_addr.c
-+++ b/src/conf/domain_addr.c
-@@ -997,10 +997,7 @@ virZPCIAddrKeyEqual(const void *namea,
- static void *
- virZPCIAddrKeyCopy(const void *name)
- {
--    unsigned int *copy;
--
--    if (VIR_ALLOC(copy) < 0)
--        return NULL;
-+    unsigned int *copy = g_new0(unsigned int, 1);
- 
-     *copy = *((unsigned int *)name);
-     return (void *)copy;
-diff --git a/src/util/virhash.c b/src/util/virhash.c
-index d5c5e017a1..c57d9f8292 100644
---- a/src/util/virhash.c
-+++ b/src/util/virhash.c
-@@ -94,9 +94,7 @@ static bool virHashStrEqual(const void *namea, const void *nameb)
- 
- static void *virHashStrCopy(const void *name)
- {
--    char *ret;
--    ret = g_strdup(name);
--    return ret;
-+    return g_strdup(name);
- }
- 
- 
-diff --git a/src/util/virhash.h b/src/util/virhash.h
-index 08f99d8a3d..cb59fb639b 100644
---- a/src/util/virhash.h
-+++ b/src/util/virhash.h
-@@ -83,7 +83,8 @@ typedef bool (*virHashKeyEqual)(const void *namea, const void *nameb);
-  * Create a copy of the hash key, duplicating
-  * memory allocation where applicable
-  *
-- * Returns a newly allocated copy of @name
-+ * Returns a copy of @name which will eventually be passed to the
-+ * 'virHashKeyFree' callback at the end of its lifetime.
-  */
- typedef void *(*virHashKeyCopy)(const void *name);
- /**
--- 
-2.25.0
-
diff --git a/SOURCES/libvirt-virhostcpu.c-fix-die_id-parsing-for-Power-hosts.patch b/SOURCES/libvirt-virhostcpu.c-fix-die_id-parsing-for-Power-hosts.patch
deleted file mode 100644
index 2257052..0000000
--- a/SOURCES/libvirt-virhostcpu.c-fix-die_id-parsing-for-Power-hosts.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From b5aa3a33bc770714f8a68954c05ea362fcfd4d47 Mon Sep 17 00:00:00 2001
-Message-Id: <b5aa3a33bc770714f8a68954c05ea362fcfd4d47@dist-git>
-From: Daniel Henrique Barboza <danielhb413@gmail.com>
-Date: Mon, 5 Oct 2020 10:25:30 -0400
-Subject: [PATCH] virhostcpu.c: fix 'die_id' parsing for Power hosts
-
-Commit 7b79ee2f78 makes assumptions about die_id parsing in
-the sysfs that aren't true for Power hosts. In both Power8
-and Power9, running 5.6 and 4.18 kernel respectively,
-'die_id' is set to -1:
-
-$ cat /sys/devices/system/cpu/cpu0/topology/die_id
--1
-
-This breaks virHostCPUGetDie() parsing because it is trying to
-retrieve an unsigned integer, causing problems during VM start:
-
-virFileReadValueUint:4128 : internal error: Invalid unsigned integer
-value '-1' in file '/sys/devices/system/cpu/cpu0/topology/die_id'
-
-This isn't necessarily a PowerPC only behavior. Linux kernel commit
-0e344d8c70 added in the former Documentation/cputopology.txt, now
-Documentation/admin-guide/cputopology.rst, that:
-
-  To be consistent on all architectures, include/linux/topology.h
-  provides default definitions for any of the above macros that are
-  not defined by include/asm-XXX/topology.h:
-
-  1) topology_physical_package_id: -1
-  2) topology_die_id: -1
-  (...)
-
-This means that it might be expected that an architecture that
-does not implement the die_id element will mark it as -1 in
-sysfs.
-
-It is not required to change die_id implementation from uInt to
-Int because of that. Instead, let's change the parsing of the
-die_id in virHostCPUGetDie() to read an integer value and, in
-case it's -1, default it to zero like in case of file not found.
-This is enough to solve the issue Power hosts are experiencing.
-
-Fixes: 7b79ee2f78bbf2af76df2f6466919e19ae05aeeb
-Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 0137bf0dab2738d5443e2f407239856e2aa25bb3)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1876742
-
-Signed-off-by: Daniel Henrique Barboza <dbarboza@redhat.com>
-Message-Id: <20201005142530.3961036-1-dbarboza@redhat.com>
-Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
----
- src/util/virhostcpu.c | 21 ++++++++++++++-------
- 1 file changed, 14 insertions(+), 7 deletions(-)
-
-diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c
-index 09c959cd25..218272d7ec 100644
---- a/src/util/virhostcpu.c
-+++ b/src/util/virhostcpu.c
-@@ -221,16 +221,23 @@ virHostCPUGetSocket(unsigned int cpu, unsigned int *socket)
- int
- virHostCPUGetDie(unsigned int cpu, unsigned int *die)
- {
--    int ret = virFileReadValueUint(die,
--                                   "%s/cpu/cpu%u/topology/die_id",
--                                   SYSFS_SYSTEM_PATH, cpu);
-+    int die_id;
-+    int ret = virFileReadValueInt(&die_id,
-+                                  "%s/cpu/cpu%u/topology/die_id",
-+                                  SYSFS_SYSTEM_PATH, cpu);
- 
--    /* If the file is not there, it's 0 */
--    if (ret == -2)
--        *die = 0;
--    else if (ret < 0)
-+    if (ret == -1)
-         return -1;
- 
-+    /* If the file is not there, it's 0.
-+     * Another alternative is die_id set to -1, meaning that
-+     * the arch does not have die_id support. Set @die to
-+     * 0 in this case too. */
-+    if (ret == -2 || die_id < 0)
-+        *die = 0;
-+    else
-+        *die = die_id;
-+
-     return 0;
- }
- 
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virsh-nodedev-ability-to-filter-CSS-capabilities.patch b/SOURCES/libvirt-virsh-nodedev-ability-to-filter-CSS-capabilities.patch
deleted file mode 100644
index ec533f6..0000000
--- a/SOURCES/libvirt-virsh-nodedev-ability-to-filter-CSS-capabilities.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From 09ce043fb64e92147992898ccdfc9a6c31c6051e Mon Sep 17 00:00:00 2001
-Message-Id: <09ce043fb64e92147992898ccdfc9a6c31c6051e@dist-git>
-From: Boris Fiuczynski <fiuczy@linux.ibm.com>
-Date: Thu, 8 Oct 2020 11:06:58 -0400
-Subject: [PATCH] virsh: nodedev: ability to filter CSS capabilities
-
-Allow to filter for CSS devices.
-
-Reviewed-by: Bjoern Walk <bwalk@linux.ibm.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
-Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
-(cherry picked from commit ab655afa186a81ddfd247d2c187c160dd05740e5)
-https://bugzilla.redhat.com/show_bug.cgi?id=1853289
-https://bugzilla.redhat.com/show_bug.cgi?id=1865932
-Message-Id: <20201008150700.52157-4-bfiuczyn@redhat.com>
-Reviewed-by: Erik Skultety <eskultet@redhat.com>
----
- docs/formatnode.html.in           | 12 ++++++++++++
- docs/manpages/virsh.rst           |  2 +-
- include/libvirt/libvirt-nodedev.h |  1 +
- src/conf/node_device_conf.h       |  3 ++-
- src/conf/virnodedeviceobj.c       |  3 ++-
- src/libvirt-nodedev.c             |  1 +
- tools/virsh-nodedev.c             |  2 ++
- 7 files changed, 21 insertions(+), 3 deletions(-)
-
-diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in
-index c2a8f8fb7a..0e9658fd29 100644
---- a/docs/formatnode.html.in
-+++ b/docs/formatnode.html.in
-@@ -341,6 +341,18 @@
-               <dd>The device number.</dd>
-             </dl>
-           </dd>
-+          <dt><code>css</code></dt>
-+          <dd>Describes a Channel SubSystem (CSS) device commonly found on
-+          the S390 architecture. Sub-elements include:
-+            <dl>
-+              <dt><code>cssid</code></dt>
-+              <dd>The channel subsystem identifier.</dd>
-+              <dt><code>ssid</code></dt>
-+              <dd>The subchannel-set identifier.</dd>
-+              <dt><code>devno</code></dt>
-+              <dd>The device number.</dd>
-+            </dl>
-+          </dd>
-         </dl>
-       </dd>
-     </dl>
-diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst
-index c637caa583..0804465d44 100644
---- a/docs/manpages/virsh.rst
-+++ b/docs/manpages/virsh.rst
-@@ -4886,7 +4886,7 @@ List all of the devices available on the node that are known by libvirt.
- separated by comma, e.g. --cap pci,scsi. Valid capability types include
- 'system', 'pci', 'usb_device', 'usb', 'net', 'scsi_host', 'scsi_target',
- 'scsi', 'storage', 'fc_host', 'vports', 'scsi_generic', 'drm', 'mdev',
--'mdev_types', 'ccw'.
-+'mdev_types', 'ccw', 'css'.
- If *--tree* is used, the output is formatted in a tree representing parents of each
- node.  *cap* and *--tree* are mutually exclusive.
- 
-diff --git a/include/libvirt/libvirt-nodedev.h b/include/libvirt/libvirt-nodedev.h
-index a2ad61ac6d..dd2ffd5782 100644
---- a/include/libvirt/libvirt-nodedev.h
-+++ b/include/libvirt/libvirt-nodedev.h
-@@ -81,6 +81,7 @@ typedef enum {
-     VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES    = 1 << 13, /* Capable of mediated devices */
-     VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV          = 1 << 14, /* Mediated device */
-     VIR_CONNECT_LIST_NODE_DEVICES_CAP_CCW_DEV       = 1 << 15, /* CCW device */
-+    VIR_CONNECT_LIST_NODE_DEVICES_CAP_CSS_DEV       = 1 << 16, /* CSS device */
- } virConnectListAllNodeDeviceFlags;
- 
- int                     virConnectListAllNodeDevices (virConnectPtr conn,
-diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h
-index 19ea3fc7c2..6fe51ed04c 100644
---- a/src/conf/node_device_conf.h
-+++ b/src/conf/node_device_conf.h
-@@ -364,7 +364,8 @@ virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps);
-                  VIR_CONNECT_LIST_NODE_DEVICES_CAP_DRM           | \
-                  VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES    | \
-                  VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV          | \
--                 VIR_CONNECT_LIST_NODE_DEVICES_CAP_CCW_DEV)
-+                 VIR_CONNECT_LIST_NODE_DEVICES_CAP_CCW_DEV       | \
-+                 VIR_CONNECT_LIST_NODE_DEVICES_CAP_CSS_DEV)
- 
- int
- virNodeDeviceGetSCSIHostCaps(virNodeDevCapSCSIHostPtr scsi_host);
-diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
-index 8c8ffd6d24..a27a84355a 100644
---- a/src/conf/virnodedeviceobj.c
-+++ b/src/conf/virnodedeviceobj.c
-@@ -827,7 +827,8 @@ virNodeDeviceObjMatch(virNodeDeviceObjPtr obj,
-               MATCH(DRM)           ||
-               MATCH(MDEV_TYPES)    ||
-               MATCH(MDEV)          ||
--              MATCH(CCW_DEV)))
-+              MATCH(CCW_DEV)       ||
-+              MATCH(CSS_DEV)))
-             return false;
-     }
- 
-diff --git a/src/libvirt-nodedev.c b/src/libvirt-nodedev.c
-index dce46b7181..71d81f6278 100644
---- a/src/libvirt-nodedev.c
-+++ b/src/libvirt-nodedev.c
-@@ -101,6 +101,7 @@ virNodeNumOfDevices(virConnectPtr conn, const char *cap, unsigned int flags)
-  *   VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV_TYPES
-  *   VIR_CONNECT_LIST_NODE_DEVICES_CAP_MDEV
-  *   VIR_CONNECT_LIST_NODE_DEVICES_CAP_CCW_DEV
-+ *   VIR_CONNECT_LIST_NODE_DEVICES_CAP_CSS_DEV
-  *
-  * Returns the number of node devices found or -1 and sets @devices to NULL in
-  * case of error.  On success, the array stored into @devices is guaranteed to
-diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
-index 26b3acc608..f4e402c35d 100644
---- a/tools/virsh-nodedev.c
-+++ b/tools/virsh-nodedev.c
-@@ -462,6 +462,8 @@ cmdNodeListDevices(vshControl *ctl, const vshCmd *cmd G_GNUC_UNUSED)
-             flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_CCW_DEV;
-             break;
-         case VIR_NODE_DEV_CAP_CSS_DEV:
-+            flags |= VIR_CONNECT_LIST_NODE_DEVICES_CAP_CSS_DEV;
-+            break;
-         case VIR_NODE_DEV_CAP_LAST:
-             break;
-         }
--- 
-2.28.0
-
diff --git a/SOURCES/libvirt-virstoragefile-Add-JSON-parser-for-sslverify-readahead-cookies-and-timeout.patch b/SOURCES/libvirt-virstoragefile-Add-JSON-parser-for-sslverify-readahead-cookies-and-timeout.patch
deleted file mode 100644
index d81170f..0000000
--- a/SOURCES/libvirt-virstoragefile-Add-JSON-parser-for-sslverify-readahead-cookies-and-timeout.patch
+++ /dev/null
@@ -1,183 +0,0 @@
-From 1fdf4e4f9180b74d59882c1a70ad99e1d5165a14 Mon Sep 17 00:00:00 2001
-Message-Id: <1fdf4e4f9180b74d59882c1a70ad99e1d5165a14@dist-git>
-From: Peter Krempa <pkrempa@redhat.com>
-Date: Mon, 16 Mar 2020 22:12:07 +0100
-Subject: [PATCH] virstoragefile: Add JSON parser for 'sslverify', 'readahead',
- 'cookies' and 'timeout'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Add support for parsing the recently added fields from backing file
-pseudo-protocol strings.
-
-Signed-off-by: Peter Krempa <pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-(cherry picked from commit 77194db01c4ab785a4668257bc9409b164f059aa)
-https://bugzilla.redhat.com/show_bug.cgi?id=1804750
-Message-Id: <9c5ef44994a5e60b08ad421762acefa26cde5a28.1584391727.git.pkrempa@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virstoragefile.c | 91 ++++++++++++++++++++++++++++++++++++++-
- tests/qemublocktest.c     |  6 +++
- tests/virstoragetest.c    | 15 +++++++
- 3 files changed, 111 insertions(+), 1 deletion(-)
-
-diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
-index 7893e054c3..931f2db6e9 100644
---- a/src/util/virstoragefile.c
-+++ b/src/util/virstoragefile.c
-@@ -3210,10 +3210,61 @@ virStorageSourceParseBackingJSONUriStr(virStorageSourcePtr src,
- }
- 
- 
-+static int
-+virStorageSourceParseBackingJSONUriCookies(virStorageSourcePtr src,
-+                                           virJSONValuePtr json,
-+                                           const char *jsonstr)
-+{
-+    const char *cookiestr;
-+    VIR_AUTOSTRINGLIST cookies = NULL;
-+    size_t ncookies = 0;
-+    size_t i;
-+
-+    if (!virJSONValueObjectHasKey(json, "cookie"))
-+        return 0;
-+
-+    if (!(cookiestr = virJSONValueObjectGetString(json, "cookie"))) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("wrong format of 'cookie' field in backing store definition '%s'"),
-+                       jsonstr);
-+        return -1;
-+    }
-+
-+    if (!(cookies = virStringSplitCount(cookiestr, ";", 0, &ncookies)))
-+        return -1;
-+
-+    src->cookies = g_new0(virStorageNetCookieDefPtr, ncookies);
-+    src->ncookies = ncookies;
-+
-+    for (i = 0; i < ncookies; i++) {
-+        char *cookiename = cookies[i];
-+        char *cookievalue;
-+
-+        virSkipSpaces((const char **) &cookiename);
-+
-+        if (!(cookievalue = strchr(cookiename, '='))) {
-+            virReportError(VIR_ERR_INVALID_ARG,
-+                           _("malformed http cookie '%s' in backing store definition '%s'"),
-+                           cookies[i], jsonstr);
-+            return -1;
-+        }
-+
-+        *cookievalue = '\0';
-+        cookievalue++;
-+
-+        src->cookies[i] = g_new0(virStorageNetCookieDef, 1);
-+        src->cookies[i]->name = g_strdup(cookiename);
-+        src->cookies[i]->value = g_strdup(cookievalue);
-+    }
-+
-+    return 0;
-+}
-+
-+
- static int
- virStorageSourceParseBackingJSONUri(virStorageSourcePtr src,
-                                     virJSONValuePtr json,
--                                    const char *jsonstr G_GNUC_UNUSED,
-+                                    const char *jsonstr,
-                                     int protocol)
- {
-     const char *uri;
-@@ -3224,6 +3275,44 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src,
-         return -1;
-     }
- 
-+    if (protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
-+        protocol == VIR_STORAGE_NET_PROTOCOL_FTPS) {
-+        if (virJSONValueObjectHasKey(json, "sslverify")) {
-+            bool tmp;
-+
-+            if (virJSONValueObjectGetBoolean(json, "sslverify", &tmp) < 0) {
-+                virReportError(VIR_ERR_INVALID_ARG,
-+                               _("malformed 'sslverify' field in backing store definition '%s'"),
-+                               jsonstr);
-+                return -1;
-+            }
-+
-+            src->sslverify = virTristateBoolFromBool(tmp);
-+        }
-+    }
-+
-+    if (protocol == VIR_STORAGE_NET_PROTOCOL_HTTPS ||
-+        protocol == VIR_STORAGE_NET_PROTOCOL_HTTP) {
-+        if (virStorageSourceParseBackingJSONUriCookies(src, json, jsonstr) < 0)
-+            return -1;
-+    }
-+
-+    if (virJSONValueObjectHasKey(json, "readahead") &&
-+        virJSONValueObjectGetNumberUlong(json, "readahead", &src->readahead) < 0) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("malformed 'readahead' field in backing store definition '%s'"),
-+                       jsonstr);
-+        return -1;
-+    }
-+
-+    if (virJSONValueObjectHasKey(json, "timeout") &&
-+        virJSONValueObjectGetNumberUlong(json, "timeout", &src->timeout) < 0) {
-+        virReportError(VIR_ERR_INVALID_ARG,
-+                       _("malformed 'timeout' field in backing store definition '%s'"),
-+                       jsonstr);
-+        return -1;
-+    }
-+
-     return virStorageSourceParseBackingJSONUriStr(src, uri, protocol);
- }
- 
-diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
-index 29af0781fc..3057db6930 100644
---- a/tests/qemublocktest.c
-+++ b/tests/qemublocktest.c
-@@ -913,6 +913,12 @@ mymain(void)
-     TEST_JSON_FORMAT_NET("<source protocol='https' name='file'>\n"
-                          "  <host name='example.com' port='432'/>\n"
-                          "</source>\n");
-+    TEST_JSON_FORMAT_NET("<source protocol='https' name='file'>\n"
-+                         "  <host name='example.com' port='432'/>\n"
-+                         "  <ssl verify='no'/>\n"
-+                         "  <readahead size='1024'/>\n"
-+                         "  <timeout seconds='1337'/>\n"
-+                         "</source>\n");
-     TEST_JSON_FORMAT_NET("<source protocol='gluster' name='vol/file'>\n"
-                          "  <host name='example.com' port='24007'/>\n"
-                          "</source>\n");
-diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
-index e7794d6168..63b991eb71 100644
---- a/tests/virstoragetest.c
-+++ b/tests/virstoragetest.c
-@@ -1606,6 +1606,21 @@ mymain(void)
-                             "  </slices>\n"
-                             "</source>\n", 0);
- 
-+    TEST_BACKING_PARSE_FULL("json:{ \"file.cookie\": \"vmware_soap_session=\\\"0c8db85112873a79b7ef74f294cb70ef7f\\\"\","
-+                                   "\"file.sslverify\": false,"
-+                                   "\"file.driver\": \"https\","
-+                                   "\"file.url\": \"https://host/folder/esx6.5-rhel7.7-x86%5f64/esx6.5-rhel7.7-x86%5f64-flat.vmdk?dcPath=data&dsName=esx6.5-matrix\","
-+                                   "\"file.timeout\": 2000"
-+                                 "}",
-+                           "<source protocol='https' name='folder/esx6.5-rhel7.7-x86_64/esx6.5-rhel7.7-x86_64-flat.vmdk'>\n"
-+                           "  <host name='host' port='443'/>\n"
-+                           "  <ssl verify='no'/>\n"
-+                           "  <cookies>\n"
-+                           "    <cookie name='vmware_soap_session'>&quot;0c8db85112873a79b7ef74f294cb70ef7f&quot;</cookie>\n"
-+                           "  </cookies>\n"
-+                           "  <timeout seconds='2000'/>\n"
-+                           "</source>\n", 0);
-+
- #endif /* WITH_YAJL */
- 
-  cleanup:
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-virsystemd-export-virSystemdHasMachined.patch b/SOURCES/libvirt-virsystemd-export-virSystemdHasMachined.patch
deleted file mode 100644
index df82c03..0000000
--- a/SOURCES/libvirt-virsystemd-export-virSystemdHasMachined.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From c8fb30409d501e5d9299ac7c08c43917b199a72b Mon Sep 17 00:00:00 2001
-Message-Id: <c8fb30409d501e5d9299ac7c08c43917b199a72b@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:52 +0100
-Subject: [PATCH] virsystemd: export virSystemdHasMachined
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit a51147d9065217d9087449b4e601e3294c0a22cf)
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <9a861adc0dc51679d7178e464255c80465247333.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt_private.syms | 1 +
- src/util/virsystemd.c    | 2 +-
- src/util/virsystemd.h    | 2 ++
- 3 files changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index 9d87e2a27b..a869d1f7a4 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -3243,6 +3243,7 @@ virSystemdGetActivation;
- virSystemdGetMachineNameByPID;
- virSystemdHasLogind;
- virSystemdHasLogindResetCachedValue;
-+virSystemdHasMachined;
- virSystemdHasMachinedResetCachedValue;
- virSystemdMakeScopeName;
- virSystemdMakeSliceName;
-diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
-index 96d43e5440..ca708cd1bd 100644
---- a/src/util/virsystemd.c
-+++ b/src/util/virsystemd.c
-@@ -153,7 +153,7 @@ void virSystemdHasLogindResetCachedValue(void)
-  * -1 = error
-  *  0 = machine1 is available
-  */
--static int
-+int
- virSystemdHasMachined(void)
- {
-     int ret;
-diff --git a/src/util/virsystemd.h b/src/util/virsystemd.h
-index dfea75948b..9ce16b7de1 100644
---- a/src/util/virsystemd.h
-+++ b/src/util/virsystemd.h
-@@ -57,6 +57,8 @@ int virSystemdTerminateMachine(const char *name);
- 
- void virSystemdNotifyStartup(void);
- 
-+int virSystemdHasMachined(void);
-+
- int virSystemdHasLogind(void);
- 
- int virSystemdCanSuspend(bool *result);
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-virsystemd-introduce-virSystemdGetMachineByPID.patch b/SOURCES/libvirt-virsystemd-introduce-virSystemdGetMachineByPID.patch
deleted file mode 100644
index c7242c1..0000000
--- a/SOURCES/libvirt-virsystemd-introduce-virSystemdGetMachineByPID.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-From a3a5c16f04d044502eecedbef6043bce79043df9 Mon Sep 17 00:00:00 2001
-Message-Id: <a3a5c16f04d044502eecedbef6043bce79043df9@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:53 +0100
-Subject: [PATCH] virsystemd: introduce virSystemdGetMachineByPID
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit 385704d5a4e1c02c21fb5779fa5067cf0d8ab56c)
-
-Conflicts:
-    src/util/virsystemd.c
-        - missing upstream glib dbus rewrite
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <7de7eae45f139e79c45731263924ae078f3e33c5.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/util/virsystemd.c | 46 +++++++++++++++++++++++++++++++++----------
- 1 file changed, 36 insertions(+), 10 deletions(-)
-
-diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
-index ca708cd1bd..394eb13f38 100644
---- a/src/util/virsystemd.c
-+++ b/src/util/virsystemd.c
-@@ -200,19 +200,24 @@ virSystemdHasLogind(void)
- }
- 
- 
--char *
--virSystemdGetMachineNameByPID(pid_t pid)
-+/**
-+ * virSystemdGetMachineByPID:
-+ * @conn: dbus connection
-+ * @pid: pid of running VM
-+ *
-+ * Returns dbus object path to VM registered with machined.
-+ * On error returns NULL.
-+ */
-+static char *
-+virSystemdGetMachineByPID(DBusConnection *conn,
-+                          pid_t pid)
- {
--    DBusConnection *conn;
-     DBusMessage *reply = NULL;
--    char *name = NULL, *object = NULL;
-+    char *object = NULL;
- 
-     if (virSystemdHasMachined() < 0)
-         goto cleanup;
- 
--    if (!(conn = virDBusGetSystemBus()))
--        goto cleanup;
--
-     if (virDBusCallMethod(conn, &reply, NULL,
-                           "org.freedesktop.machine1",
-                           "/org/freedesktop/machine1",
-@@ -224,12 +229,33 @@ virSystemdGetMachineNameByPID(pid_t pid)
-     if (virDBusMessageDecode(reply, "o", &object) < 0)
-         goto cleanup;
- 
--    virDBusMessageUnref(reply);
--    reply = NULL;
--
-     VIR_DEBUG("Domain with pid %lld has object path '%s'",
-               (long long) pid, object);
- 
-+ cleanup:
-+    virDBusMessageUnref(reply);
-+
-+    return object;
-+}
-+
-+
-+char *
-+virSystemdGetMachineNameByPID(pid_t pid)
-+{
-+    DBusConnection *conn;
-+    DBusMessage *reply = NULL;
-+    char *name = NULL, *object = NULL;
-+
-+    if (virSystemdHasMachined() < 0)
-+        goto cleanup;
-+
-+    if (!(conn = virDBusGetSystemBus()))
-+        goto cleanup;
-+
-+    object = virSystemdGetMachineByPID(conn, pid);
-+    if (!object)
-+        goto cleanup;
-+
-     if (virDBusCallMethod(conn, &reply, NULL,
-                           "org.freedesktop.machine1",
-                           object,
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-virsystemd-introduce-virSystemdGetMachineUnitByPID.patch b/SOURCES/libvirt-virsystemd-introduce-virSystemdGetMachineUnitByPID.patch
deleted file mode 100644
index 5918571..0000000
--- a/SOURCES/libvirt-virsystemd-introduce-virSystemdGetMachineUnitByPID.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-From 9ec1193393c48198fd05b795bcce0d607b45d4ee Mon Sep 17 00:00:00 2001
-Message-Id: <9ec1193393c48198fd05b795bcce0d607b45d4ee@dist-git>
-From: Pavel Hrdina <phrdina@redhat.com>
-Date: Fri, 19 Feb 2021 13:33:54 +0100
-Subject: [PATCH] virsystemd: introduce virSystemdGetMachineUnitByPID
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
-(cherry picked from commit d3fb774b1ed548c0338b3338a87094dafea32aa2)
-
-Conflicts:
-    src/util/virsystemd.c
-    tests/virsystemdtest.c
-        - missing upstream glib dbus rewrite
-
-Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1798463
-
-Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
-Message-Id: <28be8d962cde455d215fe9ee09fbdcc4145e931f.1613737828.git.phrdina@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/libvirt_private.syms |  1 +
- src/util/virsystemd.c    | 48 ++++++++++++++++++++++++++++++++
- src/util/virsystemd.h    |  2 ++
- tests/virsystemdtest.c   | 59 ++++++++++++++++++++++++++++++++++------
- 4 files changed, 101 insertions(+), 9 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index a869d1f7a4..af6f32fb1e 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -3241,6 +3241,7 @@ virSystemdCanSuspend;
- virSystemdCreateMachine;
- virSystemdGetActivation;
- virSystemdGetMachineNameByPID;
-+virSystemdGetMachineUnitByPID;
- virSystemdHasLogind;
- virSystemdHasLogindResetCachedValue;
- virSystemdHasMachined;
-diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c
-index 394eb13f38..0b8e21ae46 100644
---- a/src/util/virsystemd.c
-+++ b/src/util/virsystemd.c
-@@ -280,6 +280,54 @@ virSystemdGetMachineNameByPID(pid_t pid)
- }
- 
- 
-+/**
-+ * virSystemdGetMachineUnitByPID:
-+ * @pid: pid of running VM
-+ *
-+ * Returns systemd Unit name of a running VM registered with machined.
-+ * On error returns NULL.
-+ */
-+char *
-+virSystemdGetMachineUnitByPID(pid_t pid)
-+{
-+    DBusConnection *conn;
-+    DBusMessage *reply = NULL;
-+    char *unit = NULL, *object = NULL;
-+
-+    if (virSystemdHasMachined() < 0)
-+        goto cleanup;
-+
-+    if (!(conn = virDBusGetSystemBus()))
-+        goto cleanup;
-+
-+    object = virSystemdGetMachineByPID(conn, pid);
-+    if (!object)
-+        goto cleanup;
-+
-+    if (virDBusCallMethod(conn, &reply, NULL,
-+                          "org.freedesktop.machine1",
-+                          object,
-+                          "org.freedesktop.DBus.Properties",
-+                          "Get",
-+                          "ss",
-+                          "org.freedesktop.machine1.Machine",
-+                          "Unit") < 0)
-+        goto cleanup;
-+
-+    if (virDBusMessageDecode(reply, "v", "s", &unit) < 0)
-+        goto cleanup;
-+
-+    VIR_DEBUG("Domain with pid %lld has unit name '%s'",
-+              (long long) pid, unit);
-+
-+ cleanup:
-+    VIR_FREE(object);
-+    virDBusMessageUnref(reply);
-+
-+    return unit;
-+}
-+
-+
- /**
-  * virSystemdCreateMachine:
-  * @name: driver unique name of the machine
-diff --git a/src/util/virsystemd.h b/src/util/virsystemd.h
-index 9ce16b7de1..cd329c49f9 100644
---- a/src/util/virsystemd.h
-+++ b/src/util/virsystemd.h
-@@ -69,6 +69,8 @@ int virSystemdCanHybridSleep(bool *result);
- 
- char *virSystemdGetMachineNameByPID(pid_t pid);
- 
-+char *virSystemdGetMachineUnitByPID(pid_t pid);
-+
- int virSystemdGetActivation(virSystemdActivationMap *map,
-                             size_t nmap,
-                             virSystemdActivationPtr *act);
-diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c
-index eb510b40e4..475bf8debc 100644
---- a/tests/virsystemdtest.c
-+++ b/tests/virsystemdtest.c
-@@ -69,19 +69,42 @@ VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
-                                                     &object_path))
-                     goto error;
-             } else if (STREQ(member, "Get")) {
--                const char *name = "qemu-demo";
-+                const char *name = NULL;
-+                char *iface = NULL;
-+                char *prop = NULL;
-                 DBusMessageIter iter;
-                 DBusMessageIter sub;
- 
--                dbus_message_iter_init_append(reply, &iter);
--                dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
--                                                 "s", &sub);
--
--                if (!dbus_message_iter_append_basic(&sub,
--                                                    DBUS_TYPE_STRING,
--                                                    &name))
-+                if (virDBusMessageDecode(message, "ss", &iface, &prop) < 0)
-                     goto error;
--                dbus_message_iter_close_container(&iter, &sub);
-+
-+                VIR_FREE(iface);
-+
-+                if (STREQ(prop, "Name")) {
-+                    name = "qemu-demo";
-+                } else if (STREQ(prop, "Unit")) {
-+                    name = "machine-qemu-demo.scope";
-+                } else {
-+                    dbus_set_error_const(error,
-+                                         "org.freedesktop.systemd.badthing",
-+                                         "Unknown machine property");
-+                }
-+
-+                VIR_FREE(prop);
-+
-+                if (name) {
-+                    dbus_message_iter_init_append(reply, &iter);
-+
-+                    dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT,
-+                                                     "s", &sub);
-+
-+                    if (!dbus_message_iter_append_basic(&sub,
-+                                                        DBUS_TYPE_STRING,
-+                                                        &name))
-+                        goto error;
-+
-+                    dbus_message_iter_close_container(&iter, &sub);
-+                }
-             }
-         }
-     } else if (STREQ(service, "org.freedesktop.login1")) {
-@@ -376,6 +399,23 @@ testGetMachineName(const void *opaque G_GNUC_UNUSED)
- }
- 
- 
-+static int
-+testGetMachineUnit(const void *opaque G_GNUC_UNUSED)
-+{
-+    g_autofree char *tmp = virSystemdGetMachineUnitByPID(1234);
-+
-+    if (!tmp) {
-+        fprintf(stderr, "%s", "Failed to create get machine unit\n");
-+        return -1;
-+    }
-+
-+    if (STREQ(tmp, "machine-qemu-demo.scope"))
-+        return 0;
-+
-+    return -1;
-+}
-+
-+
- struct testNameData {
-     const char *name;
-     const char *expected;
-@@ -698,6 +738,7 @@ mymain(void)
-     DO_TEST("Test create bad systemd ", testCreateBadSystemd);
-     DO_TEST("Test create with network ", testCreateNetwork);
-     DO_TEST("Test getting machine name ", testGetMachineName);
-+    DO_TEST("Test getting machine unit ", testGetMachineUnit);
- 
- # define TEST_SCOPE(_name, unitname, _legacy) \
-     do { \
--- 
-2.30.0
-
diff --git a/SOURCES/libvirt-vmx-make-fileName-optional-for-CD-ROMs.patch b/SOURCES/libvirt-vmx-make-fileName-optional-for-CD-ROMs.patch
deleted file mode 100644
index 1171d7a..0000000
--- a/SOURCES/libvirt-vmx-make-fileName-optional-for-CD-ROMs.patch
+++ /dev/null
@@ -1,196 +0,0 @@
-From f600a3df720e1d68c621e739acbed0554f5f5fb0 Mon Sep 17 00:00:00 2001
-Message-Id: <f600a3df720e1d68c621e739acbed0554f5f5fb0@dist-git>
-From: Pino Toscano <ptoscano@redhat.com>
-Date: Fri, 20 Mar 2020 13:25:39 +0100
-Subject: [PATCH] vmx: make 'fileName' optional for CD-ROMs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It seems like CD-ROMs may have no 'fileName' property specified in case
-there is nothing configured as attachment for the drive. Hence, make
-sure that virVMXParseDisk() do not consider it mandatory anymore,
-considering it an empty block cdrom device. Sadly virVMXParseDisk() is
-used also to parse disk and floppies, so make sure that a NULL fileName
-is handled in cdrom- and floppy-related paths.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1808610
-
-Signed-off-by: Pino Toscano <ptoscano@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Tested-by: Richard W.M. Jones <rjones@redhat.com>
-(cherry picked from commit c5ee737bc5c0fc61451e45ff41526270bdf0113c)
-Signed-off-by: Pino Toscano <ptoscano@redhat.com>
-Message-Id: <20200320122539.141785-3-ptoscano@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/vmx/vmx.c                                 | 25 ++++++++++---------
- .../vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx |  4 +++
- .../vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml | 23 +++++++++++++++++
- tests/vmx2xmltest.c                           |  1 +
- 4 files changed, 41 insertions(+), 12 deletions(-)
- create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx
- create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml
-
-diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
-index fc4fa1c22b..d0bcb9c2de 100644
---- a/src/vmx/vmx.c
-+++ b/src/vmx/vmx.c
-@@ -2206,7 +2206,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-         goto cleanup;
- 
-     /* vmx:fileName -> def:src, def:type */
--    if (virVMXGetConfigString(conf, fileName_name, &fileName, false) < 0)
-+    if (virVMXGetConfigString(conf, fileName_name, &fileName, true) < 0)
-         goto cleanup;
- 
-     /* vmx:writeThrough -> def:cachemode */
-@@ -2217,7 +2217,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
- 
-     /* Setup virDomainDiskDef */
-     if (device == VIR_DOMAIN_DISK_DEVICE_DISK) {
--        if (virStringHasCaseSuffix(fileName, ".iso") ||
-+        if (fileName == NULL ||
-+            virStringHasCaseSuffix(fileName, ".iso") ||
-             STREQ(fileName, "emptyBackingString") ||
-             (deviceType &&
-              (STRCASEEQ(deviceType, "atapi-cdrom") ||
-@@ -2276,7 +2277,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             goto cleanup;
-         }
-     } else if (device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
--        if (virStringHasCaseSuffix(fileName, ".vmdk")) {
-+        if (fileName && virStringHasCaseSuffix(fileName, ".vmdk")) {
-             /*
-              * This function was called in order to parse a CDROM device, but
-              * .vmdk files are for harddisk devices only. Just ignore it,
-@@ -2284,7 +2285,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-              * handle it.
-              */
-             goto ignore;
--        } else if (virStringHasCaseSuffix(fileName, ".iso")) {
-+        } else if (fileName && virStringHasCaseSuffix(fileName, ".iso")) {
-             char *tmp;
- 
-             if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) {
-@@ -2305,7 +2306,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-         } else if (deviceType && STRCASEEQ(deviceType, "atapi-cdrom")) {
-             virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK);
- 
--            if (STRCASEEQ(fileName, "auto detect")) {
-+            if (fileName && STRCASEEQ(fileName, "auto detect")) {
-                 ignore_value(virDomainDiskSetSource(*def, NULL));
-                 (*def)->startupPolicy = VIR_DOMAIN_STARTUP_POLICY_OPTIONAL;
-             } else if (virDomainDiskSetSource(*def, fileName) < 0) {
-@@ -2316,7 +2317,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             (*def)->device = VIR_DOMAIN_DISK_DEVICE_LUN;
-             virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK);
- 
--            if (STRCASEEQ(fileName, "auto detect")) {
-+            if (fileName && STRCASEEQ(fileName, "auto detect")) {
-                 ignore_value(virDomainDiskSetSource(*def, NULL));
-                 (*def)->startupPolicy = VIR_DOMAIN_STARTUP_POLICY_OPTIONAL;
-             } else if (virDomainDiskSetSource(*def, fileName) < 0) {
-@@ -2324,7 +2325,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             }
-         } else if (busType == VIR_DOMAIN_DISK_BUS_SCSI &&
-                    deviceType && STRCASEEQ(deviceType, "scsi-passthru")) {
--            if (STRPREFIX(fileName, "/vmfs/devices/cdrom/")) {
-+            if (fileName && STRPREFIX(fileName, "/vmfs/devices/cdrom/")) {
-                 /* SCSI-passthru CD-ROMs actually are device='lun' */
-                 (*def)->device = VIR_DOMAIN_DISK_DEVICE_LUN;
-                 virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK);
-@@ -2340,7 +2341,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-                  */
-                 goto ignore;
-             }
--        } else if (STREQ(fileName, "emptyBackingString")) {
-+        } else if (fileName && STREQ(fileName, "emptyBackingString")) {
-             if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) {
-                 virReportError(VIR_ERR_INTERNAL_ERROR,
-                                _("Expecting VMX entry '%s' to be 'cdrom-image' "
-@@ -2354,7 +2355,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("Invalid or not yet handled value '%s' "
-                              "for VMX entry '%s' for device type '%s'"),
--                           fileName, fileName_name,
-+                           NULLSTR(fileName), fileName_name,
-                            deviceType ? deviceType : "unknown");
-             goto cleanup;
-         }
-@@ -2364,10 +2365,10 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             if (virDomainDiskSetSource(*def, fileName) < 0)
-                 goto cleanup;
-         } else if (fileType != NULL && STRCASEEQ(fileType, "file")) {
--            char *tmp;
-+            char *tmp = NULL;
- 
-             virDomainDiskSetType(*def, VIR_STORAGE_TYPE_FILE);
--            if (!(tmp = ctx->parseFileName(fileName, ctx->opaque)))
-+            if (fileName && !(tmp = ctx->parseFileName(fileName, ctx->opaque)))
-                 goto cleanup;
-             if (virDomainDiskSetSource(*def, tmp) < 0) {
-                 VIR_FREE(tmp);
-@@ -2378,7 +2379,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("Invalid or not yet handled value '%s' "
-                              "for VMX entry '%s' for device type '%s'"),
--                           fileName, fileName_name,
-+                           NULLSTR(fileName), fileName_name,
-                            deviceType ? deviceType : "unknown");
-             goto cleanup;
-         }
-diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx
-new file mode 100644
-index 0000000000..36286cb20f
---- /dev/null
-+++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx
-@@ -0,0 +1,4 @@
-+config.version = "8"
-+virtualHW.version = "4"
-+ide0:0.present = "true"
-+ide0:0.deviceType = "atapi-cdrom"
-diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml
-new file mode 100644
-index 0000000000..af4a5ff9f6
---- /dev/null
-+++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml
-@@ -0,0 +1,23 @@
-+<domain type='vmware'>
-+  <uuid>00000000-0000-0000-0000-000000000000</uuid>
-+  <memory unit='KiB'>32768</memory>
-+  <currentMemory unit='KiB'>32768</currentMemory>
-+  <vcpu placement='static'>1</vcpu>
-+  <os>
-+    <type arch='i686'>hvm</type>
-+  </os>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>destroy</on_crash>
-+  <devices>
-+    <disk type='block' device='cdrom'>
-+      <target dev='hda' bus='ide'/>
-+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
-+    </disk>
-+    <controller type='ide' index='0'/>
-+    <video>
-+      <model type='vmvga' vram='4096' primary='yes'/>
-+    </video>
-+  </devices>
-+</domain>
-diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
-index 8d7b8ba2a4..1966aed6fe 100644
---- a/tests/vmx2xmltest.c
-+++ b/tests/vmx2xmltest.c
-@@ -218,6 +218,7 @@ mymain(void)
-     DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru");
-     DO_TEST("cdrom-ide-file", "cdrom-ide-file");
-     DO_TEST("cdrom-ide-empty", "cdrom-ide-empty");
-+    DO_TEST("cdrom-ide-empty-2", "cdrom-ide-empty-2");
-     DO_TEST("cdrom-ide-device", "cdrom-ide-device");
-     DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device");
-     DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect");
--- 
-2.25.1
-
diff --git a/SOURCES/libvirt-vmx-shortcut-earlier-few-ignore-cases-in-virVMXParseDisk.patch b/SOURCES/libvirt-vmx-shortcut-earlier-few-ignore-cases-in-virVMXParseDisk.patch
deleted file mode 100644
index 0f4137a..0000000
--- a/SOURCES/libvirt-vmx-shortcut-earlier-few-ignore-cases-in-virVMXParseDisk.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From e8bd352038f46facdb4891d4df109a3c6351479c Mon Sep 17 00:00:00 2001
-Message-Id: <e8bd352038f46facdb4891d4df109a3c6351479c@dist-git>
-From: Pino Toscano <ptoscano@redhat.com>
-Date: Fri, 20 Mar 2020 13:25:38 +0100
-Subject: [PATCH] vmx: shortcut earlier few 'ignore' cases in virVMXParseDisk()
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Move earlier the checks for skipping a hard disk when parsing a CD-DROM,
-and for skipping a CD-ROM when parsing a hard disk. This should have no
-behaviour changes, and avoids to add repeated checks in following
-commits.
-
-Signed-off-by: Pino Toscano <ptoscano@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
-Tested-by: Richard W.M. Jones <rjones@redhat.com>
-https://bugzilla.redhat.com/show_bug.cgi?id=1808610
-(cherry picked from commit 9a469c0d358bf3fd4b4e55b20360620d6fda44b5)
-Signed-off-by: Pino Toscano <ptoscano@redhat.com>
-Message-Id: <20200320122539.141785-2-ptoscano@redhat.com>
-Reviewed-by: Ján Tomko <jtomko@redhat.com>
----
- src/vmx/vmx.c | 48 ++++++++++++++++++++++++------------------------
- 1 file changed, 24 insertions(+), 24 deletions(-)
-
-diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
-index 4362da6cee..fc4fa1c22b 100644
---- a/src/vmx/vmx.c
-+++ b/src/vmx/vmx.c
-@@ -2217,7 +2217,21 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
- 
-     /* Setup virDomainDiskDef */
-     if (device == VIR_DOMAIN_DISK_DEVICE_DISK) {
--        if (virStringHasCaseSuffix(fileName, ".vmdk")) {
-+        if (virStringHasCaseSuffix(fileName, ".iso") ||
-+            STREQ(fileName, "emptyBackingString") ||
-+            (deviceType &&
-+             (STRCASEEQ(deviceType, "atapi-cdrom") ||
-+              STRCASEEQ(deviceType, "cdrom-raw") ||
-+              (STRCASEEQ(deviceType, "scsi-passthru") &&
-+               STRPREFIX(fileName, "/vmfs/devices/cdrom/"))))) {
-+            /*
-+             * This function was called in order to parse a harddisk device,
-+             * but .iso files, 'atapi-cdrom', 'cdrom-raw', and 'scsi-passthru'
-+             * CDROM devices are for CDROM devices only. Just ignore it, another
-+             * call to this function to parse a CDROM device may handle it.
-+             */
-+            goto ignore;
-+        } else if (virStringHasCaseSuffix(fileName, ".vmdk")) {
-             char *tmp;
- 
-             if (deviceType != NULL) {
-@@ -2253,20 +2267,6 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             if (mode)
-                 (*def)->transient = STRCASEEQ(mode,
-                                               "independent-nonpersistent");
--        } else if (virStringHasCaseSuffix(fileName, ".iso") ||
--                   STREQ(fileName, "emptyBackingString") ||
--                   (deviceType &&
--                    (STRCASEEQ(deviceType, "atapi-cdrom") ||
--                     STRCASEEQ(deviceType, "cdrom-raw") ||
--                     (STRCASEEQ(deviceType, "scsi-passthru") &&
--                      STRPREFIX(fileName, "/vmfs/devices/cdrom/"))))) {
--            /*
--             * This function was called in order to parse a harddisk device,
--             * but .iso files, 'atapi-cdrom', 'cdrom-raw', and 'scsi-passthru'
--             * CDROM devices are for CDROM devices only. Just ignore it, another
--             * call to this function to parse a CDROM device may handle it.
--             */
--            goto ignore;
-         } else {
-             virReportError(VIR_ERR_INTERNAL_ERROR,
-                            _("Invalid or not yet handled value '%s' "
-@@ -2276,7 +2276,15 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-             goto cleanup;
-         }
-     } else if (device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
--        if (virStringHasCaseSuffix(fileName, ".iso")) {
-+        if (virStringHasCaseSuffix(fileName, ".vmdk")) {
-+            /*
-+             * This function was called in order to parse a CDROM device, but
-+             * .vmdk files are for harddisk devices only. Just ignore it,
-+             * another call to this function to parse a harddisk device may
-+             * handle it.
-+             */
-+            goto ignore;
-+        } else if (virStringHasCaseSuffix(fileName, ".iso")) {
-             char *tmp;
- 
-             if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) {
-@@ -2294,14 +2302,6 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
-                 goto cleanup;
-             }
-             VIR_FREE(tmp);
--        } else if (virStringHasCaseSuffix(fileName, ".vmdk")) {
--            /*
--             * This function was called in order to parse a CDROM device, but
--             * .vmdk files are for harddisk devices only. Just ignore it,
--             * another call to this function to parse a harddisk device may
--             * handle it.
--             */
--            goto ignore;
-         } else if (deviceType && STRCASEEQ(deviceType, "atapi-cdrom")) {
-             virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK);
- 
--- 
-2.25.1
-
diff --git a/SOURCES/symlinks b/SOURCES/symlinks
index 8ddd1c3..54c634d 100644
--- a/SOURCES/symlinks
+++ b/SOURCES/symlinks
@@ -1,9 +1,58 @@
-ABOUT-NLS po/README.md
-README README.md
 .ctags.d/libvirt.ctags ../.ctags
 tests/virt-admin-self-test ./virsh-self-test
+tests/genericxml2xmloutdata/device-backenddomain.xml ../genericxml2xmlindata/device-backenddomain.xml
+tests/networkxml2xmlin/leasetime-hours.xml ../networkxml2confdata/leasetime-hours.xml
+tests/networkxml2xmlin/leasetime-infinite.xml ../networkxml2confdata/leasetime-infinite.xml
+tests/networkxml2xmlin/leasetime-minutes.xml ../networkxml2confdata/leasetime-minutes.xml
+tests/networkxml2xmlin/leasetime-seconds.xml ../networkxml2confdata/leasetime-seconds.xml
+tests/networkxml2xmlout/leasetime-hours.xml ../networkxml2xmlin/leasetime-hours.xml
+tests/networkxml2xmlout/leasetime-infinite.xml ../networkxml2xmlin/leasetime-infinite.xml
+tests/networkxml2xmlout/leasetime-minutes.xml ../networkxml2xmlin/leasetime-minutes.xml
+tests/networkxml2xmlout/leasetime-seconds.xml ../networkxml2xmlin/leasetime-seconds.xml
+tests/nodedevxml2xmlout/DVD_GCC_4247N.xml ../nodedevschemadata/DVD_GCC_4247N.xml
+tests/nodedevxml2xmlout/DVD_with_media.xml ../nodedevschemadata/DVD_with_media.xml
+tests/nodedevxml2xmlout/ap_07_0038.xml ../nodedevschemadata/ap_07_0038.xml
+tests/nodedevxml2xmlout/ap_card07.xml ../nodedevschemadata/ap_card07.xml
+tests/nodedevxml2xmlout/ap_matrix.xml ../nodedevschemadata/ap_matrix.xml
+tests/nodedevxml2xmlout/ap_matrix_mdev_types.xml ../nodedevschemadata/ap_matrix_mdev_types.xml
+tests/nodedevxml2xmlout/ccw_0_0_ffff.xml ../nodedevschemadata/ccw_0_0_ffff.xml
+tests/nodedevxml2xmlout/computer.xml ../nodedevschemadata/computer.xml
+tests/nodedevxml2xmlout/css_0_0_fffe_mdev_types.xml ../nodedevschemadata/css_0_0_fffe_mdev_types.xml
+tests/nodedevxml2xmlout/css_0_0_ffff.xml ../nodedevschemadata/css_0_0_ffff.xml
+tests/nodedevxml2xmlout/drm_renderD129.xml ../nodedevschemadata/drm_renderD129.xml
+tests/nodedevxml2xmlout/mdev_3627463d_b7f0_4fea_b468_f1da537d301b.xml ../nodedevschemadata/mdev_3627463d_b7f0_4fea_b468_f1da537d301b.xml
+tests/nodedevxml2xmlout/mdev_ee0b88c4_f554_4dc1_809d_b2a01e8e48ad.xml ../nodedevschemadata/mdev_ee0b88c4_f554_4dc1_809d_b2a01e8e48ad.xml
+tests/nodedevxml2xmlout/net_00_13_02_b9_f9_d3.xml ../nodedevschemadata/net_00_13_02_b9_f9_d3.xml
+tests/nodedevxml2xmlout/net_00_15_58_2f_e9_55.xml ../nodedevschemadata/net_00_15_58_2f_e9_55.xml
+tests/nodedevxml2xmlout/pci_0000_00_02_0_header_type.xml ../nodedevschemadata/pci_0000_00_02_0_header_type.xml
+tests/nodedevxml2xmlout/pci_0000_00_1c_0_header_type.xml ../nodedevschemadata/pci_0000_00_1c_0_header_type.xml
+tests/nodedevxml2xmlout/pci_0000_02_10_7_mdev_types.xml ../nodedevschemadata/pci_0000_02_10_7_mdev_types.xml
+tests/nodedevxml2xmlout/pci_0000_02_10_7_sriov.xml ../nodedevschemadata/pci_0000_02_10_7_sriov.xml
+tests/nodedevxml2xmlout/pci_0000_02_10_7_sriov_pf_vfs_all.xml ../nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all.xml
+tests/nodedevxml2xmlout/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml ../nodedevschemadata/pci_0000_02_10_7_sriov_pf_vfs_all_header_type.xml
+tests/nodedevxml2xmlout/pci_0000_02_10_7_sriov_vfs.xml ../nodedevschemadata/pci_0000_02_10_7_sriov_vfs.xml
+tests/nodedevxml2xmlout/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml ../nodedevschemadata/pci_0000_02_10_7_sriov_zero_vfs_max_count.xml
+tests/nodedevxml2xmlout/pci_0000_42_00_0_vpd.xml ../nodedevschemadata/pci_0000_42_00_0_vpd.xml
+tests/nodedevxml2xmlout/pci_1002_71c4.xml ../nodedevschemadata/pci_1002_71c4.xml
+tests/nodedevxml2xmlout/pci_8086_0c0c_snd_hda_intel.xml ../nodedevschemadata/pci_8086_0c0c_snd_hda_intel.xml
+tests/nodedevxml2xmlout/pci_8086_10c9_sriov_pf.xml ../nodedevschemadata/pci_8086_10c9_sriov_pf.xml
+tests/nodedevxml2xmlout/pci_8086_27c5_scsi_host.xml ../nodedevschemadata/pci_8086_27c5_scsi_host.xml
+tests/nodedevxml2xmlout/pci_8086_27c5_scsi_host_0.xml ../nodedevschemadata/pci_8086_27c5_scsi_host_0.xml
+tests/nodedevxml2xmlout/pci_8086_27c5_scsi_host_0_unique_id.xml ../nodedevschemadata/pci_8086_27c5_scsi_host_0_unique_id.xml
+tests/nodedevxml2xmlout/pci_8086_27c5_scsi_host_scsi_device_lun0.xml ../nodedevschemadata/pci_8086_27c5_scsi_host_scsi_device_lun0.xml
+tests/nodedevxml2xmlout/pci_8086_27c5_scsi_host_scsi_host.xml ../nodedevschemadata/pci_8086_27c5_scsi_host_scsi_host.xml
+tests/nodedevxml2xmlout/pci_8086_4238_pcie_wireless.xml ../nodedevschemadata/pci_8086_4238_pcie_wireless.xml
+tests/nodedevxml2xmlout/scsi_target0_0_0.xml ../nodedevschemadata/scsi_target0_0_0.xml
+tests/nodedevxml2xmlout/scsi_target1_0_0.xml ../nodedevschemadata/scsi_target1_0_0.xml
+tests/nodedevxml2xmlout/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml ../nodedevschemadata/storage_serial_3600c0ff000d7a2a5d463ff4902000000.xml
+tests/nodedevxml2xmlout/storage_serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml ../nodedevschemadata/storage_serial_SATA_HTS721010G9SA00_MPCZ12Y0GNGWSE.xml
+tests/nodedevxml2xmlout/usb_device_1d6b_1_0000_00_1d_0.xml ../nodedevschemadata/usb_device_1d6b_1_0000_00_1d_0.xml
+tests/nodedevxml2xmlout/usb_device_1d6b_1_0000_00_1d_0_if0.xml ../nodedevschemadata/usb_device_1d6b_1_0000_00_1d_0_if0.xml
 tests/qemublocktestdata/imagecreate/qcow2-backing-luks.xml qcow2.xml
+tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2-slice.xml qcow2.xml
+tests/qemublocktestdata/imagecreate/qcow2-backing-qcow2luks.xml qcow2.xml
 tests/qemublocktestdata/imagecreate/qcow2-backing-raw-nbd.xml qcow2.xml
+tests/qemublocktestdata/imagecreate/qcow2-backing-raw-slice.xml qcow2.xml
 tests/qemublocktestdata/imagecreate/qcow2-backing-raw.xml qcow2.xml
 tests/qemublocktestdata/imagecreate/qcow2-luks-encopts-backing.xml qcow2-luks-encopts.xml
 tests/qemufirmwaredata/etc/qemu/firmware/40-ovmf-sb-keys.json ../../../usr/share/qemu/firmware/50-ovmf-sb-keys.json
@@ -13,6 +62,7 @@ tests/qemustatusxml2xmldata/backup-pull-out.xml backup-pull-in.xml
 tests/qemustatusxml2xmldata/blockjob-blockdev-out.xml blockjob-blockdev-in.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-bitmaps-out.xml migration-out-nbd-bitmaps-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
@@ -35,15 +85,25 @@ 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/cpu-numa-memshared-1.xml cpu-numa-memshared.xml
 tests/qemuxml2argvdata/disk-backing-chains-index.x86_64-2.12.0.args disk-backing-chains-noindex.x86_64-2.12.0.args
 tests/qemuxml2argvdata/disk-backing-chains-index.x86_64-latest.args disk-backing-chains-noindex.x86_64-latest.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/memory-hotplug-nvdimm-ppc64-abi-update.xml memory-hotplug-nvdimm-ppc64.xml
+tests/qemuxml2argvdata/memory-hotplug-ppc64-nonuma-abi-update.xml memory-hotplug-ppc64-nonuma.xml
 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-features-ccf.xml pseries-features.xml
+tests/qemuxml2argvdata/pseries-features-cfpc.xml pseries-features.xml
+tests/qemuxml2argvdata/pseries-features-hpt-pagesize.xml pseries-features.xml
+tests/qemuxml2argvdata/pseries-features-htm.xml pseries-features.xml
+tests/qemuxml2argvdata/pseries-features-ibs.xml pseries-features.xml
+tests/qemuxml2argvdata/pseries-features-nested-hv.xml pseries-features.xml
+tests/qemuxml2argvdata/pseries-features-sbbc.xml pseries-features.xml
 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
@@ -62,54 +122,115 @@ tests/qemuxml2xmloutdata/aarch64-gic-none-v3.xml ../qemuxml2argvdata/aarch64-gic
 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/audio-alsa-best.xml ../qemuxml2argvdata/audio-alsa-best.xml
+tests/qemuxml2xmloutdata/audio-alsa-full.xml ../qemuxml2argvdata/audio-alsa-full.xml
+tests/qemuxml2xmloutdata/audio-alsa-minimal.xml ../qemuxml2argvdata/audio-alsa-minimal.xml
+tests/qemuxml2xmloutdata/audio-coreaudio-best.xml ../qemuxml2argvdata/audio-coreaudio-best.xml
+tests/qemuxml2xmloutdata/audio-coreaudio-full.xml ../qemuxml2argvdata/audio-coreaudio-full.xml
+tests/qemuxml2xmloutdata/audio-coreaudio-minimal.xml ../qemuxml2argvdata/audio-coreaudio-minimal.xml
+tests/qemuxml2xmloutdata/audio-file-best.xml ../qemuxml2argvdata/audio-file-best.xml
+tests/qemuxml2xmloutdata/audio-file-full.xml ../qemuxml2argvdata/audio-file-full.xml
+tests/qemuxml2xmloutdata/audio-file-minimal.xml ../qemuxml2argvdata/audio-file-minimal.xml
+tests/qemuxml2xmloutdata/audio-jack-full.xml ../qemuxml2argvdata/audio-jack-full.xml
+tests/qemuxml2xmloutdata/audio-many-backends.x86_64-latest.xml ../qemuxml2argvdata/audio-many-backends.xml
+tests/qemuxml2xmloutdata/audio-none-best.xml ../qemuxml2argvdata/audio-none-best.xml
+tests/qemuxml2xmloutdata/audio-none-full.xml ../qemuxml2argvdata/audio-none-full.xml
+tests/qemuxml2xmloutdata/audio-none-minimal.xml ../qemuxml2argvdata/audio-none-minimal.xml
+tests/qemuxml2xmloutdata/audio-oss-best.xml ../qemuxml2argvdata/audio-oss-best.xml
+tests/qemuxml2xmloutdata/audio-oss-full.xml ../qemuxml2argvdata/audio-oss-full.xml
+tests/qemuxml2xmloutdata/audio-oss-minimal.xml ../qemuxml2argvdata/audio-oss-minimal.xml
+tests/qemuxml2xmloutdata/audio-pulseaudio-best.xml ../qemuxml2argvdata/audio-pulseaudio-best.xml
+tests/qemuxml2xmloutdata/audio-pulseaudio-full.xml ../qemuxml2argvdata/audio-pulseaudio-full.xml
+tests/qemuxml2xmloutdata/audio-pulseaudio-minimal.xml ../qemuxml2argvdata/audio-pulseaudio-minimal.xml
+tests/qemuxml2xmloutdata/audio-sdl-best.xml ../qemuxml2argvdata/audio-sdl-best.xml
+tests/qemuxml2xmloutdata/audio-sdl-full.xml ../qemuxml2argvdata/audio-sdl-full.xml
+tests/qemuxml2xmloutdata/audio-sdl-minimal.xml ../qemuxml2argvdata/audio-sdl-minimal.xml
+tests/qemuxml2xmloutdata/audio-spice-best.xml ../qemuxml2argvdata/audio-spice-best.xml
+tests/qemuxml2xmloutdata/audio-spice-full.xml ../qemuxml2argvdata/audio-spice-full.xml
+tests/qemuxml2xmloutdata/audio-spice-minimal.xml ../qemuxml2argvdata/audio-spice-minimal.xml
+tests/qemuxml2xmloutdata/blkdeviotune-group-num.x86_64-latest.xml ../qemuxml2argvdata/blkdeviotune-group-num.xml
+tests/qemuxml2xmloutdata/blkdeviotune-max-length.x86_64-latest.xml ../qemuxml2argvdata/blkdeviotune-max-length.xml
+tests/qemuxml2xmloutdata/blkdeviotune-max.x86_64-latest.xml ../qemuxml2argvdata/blkdeviotune-max.xml
 tests/qemuxml2xmloutdata/boot-floppy-q35.xml ../qemuxml2argvdata/boot-floppy-q35.xml
-tests/qemuxml2xmloutdata/disk-detect-zeroes.xml ../qemuxml2argvdata/disk-detect-zeroes.xml
+tests/qemuxml2xmloutdata/clock-realtime.xml ../qemuxml2argvdata/clock-realtime.xml
+tests/qemuxml2xmloutdata/clock-timer-armvtimer.aarch64-latest.xml ../qemuxml2argvdata/clock-timer-armvtimer.xml
+tests/qemuxml2xmloutdata/disk-detect-zeroes.x86_64-latest.xml ../qemuxml2argvdata/disk-detect-zeroes.xml
 tests/qemuxml2xmloutdata/disk-nvme.xml ../qemuxml2argvdata/disk-nvme.xml
-tests/qemuxml2xmloutdata/disk-virtio-queues.xml ../qemuxml2argvdata/disk-virtio-queues.xml
+tests/qemuxml2xmloutdata/disk-virtio-queues.x86_64-latest.xml ../qemuxml2argvdata/disk-virtio-queues.xml
 tests/qemuxml2xmloutdata/disk-virtio-scsi-reservations.xml ../qemuxml2argvdata/disk-virtio-scsi-reservations.xml
+tests/qemuxml2xmloutdata/downscript.xml ../qemuxml2argvdata/downscript.xml
 tests/qemuxml2xmloutdata/encrypted-disk-usage.xml ../qemuxml2argvdata/encrypted-disk-usage.xml
 tests/qemuxml2xmloutdata/fd-memory-no-numa-topology.xml ../qemuxml2argvdata/fd-memory-no-numa-topology.xml
 tests/qemuxml2xmloutdata/fd-memory-numa-topology.xml ../qemuxml2argvdata/fd-memory-numa-topology.xml
 tests/qemuxml2xmloutdata/fd-memory-numa-topology2.xml ../qemuxml2argvdata/fd-memory-numa-topology2.xml
 tests/qemuxml2xmloutdata/fd-memory-numa-topology3.xml ../qemuxml2argvdata/fd-memory-numa-topology3.xml
+tests/qemuxml2xmloutdata/fd-memory-numa-topology4.x86_64-latest.xml ../qemuxml2argvdata/fd-memory-numa-topology4.xml
 tests/qemuxml2xmloutdata/hugepages-default-2M.xml ../qemuxml2argvdata/hugepages-default-2M.xml
 tests/qemuxml2xmloutdata/hugepages-default-system-size.xml ../qemuxml2argvdata/hugepages-default-system-size.xml
 tests/qemuxml2xmloutdata/hugepages-memaccess.xml ../qemuxml2argvdata/hugepages-memaccess.xml
 tests/qemuxml2xmloutdata/hugepages-memaccess2.xml ../qemuxml2argvdata/hugepages-memaccess2.xml
 tests/qemuxml2xmloutdata/hugepages-numa-default-dimm.xml ../qemuxml2argvdata/hugepages-numa-default-dimm.xml
 tests/qemuxml2xmloutdata/hugepages-nvdimm.xml ../qemuxml2argvdata/hugepages-nvdimm.xml
+tests/qemuxml2xmloutdata/input-linux.x86_64-latest.xml ../qemuxml2argvdata/input-linux.xml
+tests/qemuxml2xmloutdata/intel-iommu-aw-bits.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu-aw-bits.xml
 tests/qemuxml2xmloutdata/intel-iommu-caching-mode.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu-caching-mode.xml
 tests/qemuxml2xmloutdata/intel-iommu-device-iotlb.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu-device-iotlb.xml
 tests/qemuxml2xmloutdata/intel-iommu-eim.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu-eim.xml
 tests/qemuxml2xmloutdata/intel-iommu.x86_64-latest.xml ../qemuxml2argvdata/intel-iommu.xml
-tests/qemuxml2xmloutdata/luks-disks.xml ../qemuxml2argvdata/luks-disks.xml
+tests/qemuxml2xmloutdata/kvm-features-off.xml ../qemuxml2argvdata/kvm-features-off.xml
+tests/qemuxml2xmloutdata/kvm-features.xml ../qemuxml2argvdata/kvm-features.xml
+tests/qemuxml2xmloutdata/luks-disks.x86_64-latest.xml ../qemuxml2argvdata/luks-disks.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/memfd-memory-default-hugepage.xml ../qemuxml2argvdata/memfd-memory-default-hugepage.xml
-tests/qemuxml2xmloutdata/memfd-memory-numa.xml ../qemuxml2argvdata/memfd-memory-numa.xml
+tests/qemuxml2xmloutdata/memfd-memory-default-hugepage.x86_64-latest.xml ../qemuxml2argvdata/memfd-memory-default-hugepage.xml
+tests/qemuxml2xmloutdata/memfd-memory-numa.x86_64-latest.xml ../qemuxml2argvdata/memfd-memory-numa.xml
 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-access.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-access.xml
 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-label.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-label.xml
 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-readonly.xml ../qemuxml2argvdata/memory-hotplug-nvdimm-readonly.xml
 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm.xml ../qemuxml2argvdata/memory-hotplug-nvdimm.xml
+tests/qemuxml2xmloutdata/memory-hotplug-ppc64-nonuma.xml ../qemuxml2argvdata/memory-hotplug-ppc64-nonuma.xml
+tests/qemuxml2xmloutdata/memory-hotplug-virtio-mem.x86_64-latest.xml ../qemuxml2argvdata/memory-hotplug-virtio-mem.xml
+tests/qemuxml2xmloutdata/memory-hotplug-virtio-pmem.x86_64-latest.xml ../qemuxml2argvdata/memory-hotplug-virtio-pmem.xml
 tests/qemuxml2xmloutdata/net-user-addr.xml ../qemuxml2argvdata/net-user-addr.xml
+tests/qemuxml2xmloutdata/net-virtio-teaming-hostdev.xml ../qemuxml2argvdata/net-virtio-teaming-hostdev.xml
+tests/qemuxml2xmloutdata/numatune-hmat.xml ../qemuxml2argvdata/numatune-hmat.xml
+tests/qemuxml2xmloutdata/numatune-memnode-restrictive-mode.x86_64-latest.xml ../qemuxml2argvdata/numatune-memnode-restrictive-mode.xml
+tests/qemuxml2xmloutdata/numatune-no-vcpu.xml ../qemuxml2argvdata/numatune-no-vcpu.xml
+tests/qemuxml2xmloutdata/os-firmware-efi-no-enrolled-keys.x86_64-latest.xml ../qemuxml2argvdata/os-firmware-efi-no-enrolled-keys.xml
 tests/qemuxml2xmloutdata/pages-dimm-discard.xml ../qemuxml2argvdata/pages-dimm-discard.xml
 tests/qemuxml2xmloutdata/pages-discard-hugepages.xml ../qemuxml2argvdata/pages-discard-hugepages.xml
 tests/qemuxml2xmloutdata/pages-discard.xml ../qemuxml2argvdata/pages-discard.xml
+tests/qemuxml2xmloutdata/pc-i440fx-acpi-root-hotplug-disable.x86_64-latest.xml ../qemuxml2argvdata/pc-i440fx-acpi-root-hotplug-disable.xml
+tests/qemuxml2xmloutdata/pc-i440fx-acpi-root-hotplug-enable.x86_64-latest.xml ../qemuxml2argvdata/pc-i440fx-acpi-root-hotplug-enable.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/smbios-type-fwcfg.xml ../qemuxml2argvdata/smbios-type-fwcfg.xml
+tests/qemuxml2xmloutdata/tpm-emulator-spapr.ppc64-latest.xml ../qemuxml2argvdata/tpm-emulator-spapr.xml
+tests/qemuxml2xmloutdata/tpm-emulator-tpm2-enc.x86_64-latest.xml ../qemuxml2argvdata/tpm-emulator-tpm2-enc.xml
+tests/qemuxml2xmloutdata/tpm-emulator-tpm2-pstate.x86_64-latest.xml ../qemuxml2argvdata/tpm-emulator-tpm2-pstate.xml
+tests/qemuxml2xmloutdata/tpm-emulator-tpm2.x86_64-latest.xml ../qemuxml2argvdata/tpm-emulator-tpm2.xml
+tests/qemuxml2xmloutdata/tpm-emulator.x86_64-latest.xml ../qemuxml2argvdata/tpm-emulator.xml
+tests/qemuxml2xmloutdata/tpm-passthrough-crb.x86_64-latest.xml ../qemuxml2argvdata/tpm-passthrough-crb.xml
+tests/qemuxml2xmloutdata/tpm-passthrough.x86_64-latest.xml ../qemuxml2argvdata/tpm-passthrough.xml
 tests/qemuxml2xmloutdata/user-aliases.xml ../qemuxml2argvdata/user-aliases.xml
 tests/qemuxml2xmloutdata/vcpu-placement-static.xml ../qemuxml2argvdata/vcpu-placement-static.xml
+tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml ../qemuxml2argvdata/vhost-user-fs-fd-memory.xml
+tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml ../qemuxml2argvdata/vhost-user-fs-hugepages.xml
+tests/qemuxml2xmloutdata/vhost-user-fs-sock.x86_64-latest.xml ../qemuxml2argvdata/vhost-user-fs-sock.xml
+tests/qemuxml2xmloutdata/vhost-vsock-ccw-iommu.s390x-latest.xml ../qemuxml2argvdata/vhost-vsock-ccw-iommu.xml
 tests/qemuxml2xmloutdata/vhost-vsock-ccw.xml ../qemuxml2argvdata/vhost-vsock-ccw.xml
-tests/qemuxml2xmloutdata/vhost-vsock.xml ../qemuxml2argvdata/vhost-vsock.xml
-tests/qemuxml2xmloutdata/virtio-options.xml ../qemuxml2argvdata/virtio-options.xml
+tests/qemuxml2xmloutdata/vhost-vsock.x86_64-latest.xml ../qemuxml2argvdata/vhost-vsock.xml
+tests/qemuxml2xmloutdata/video-qxl-resolution.xml ../qemuxml2argvdata/video-qxl-resolution.xml
+tests/qemuxml2xmloutdata/video-virtio-vga-gpu-gl.x86_64-latest.xml ../qemuxml2argvdata/video-virtio-vga-gpu-gl.xml
+tests/qemuxml2xmloutdata/virtio-options.x86_64-latest.xml ../qemuxml2argvdata/virtio-options.xml
+tests/qemuxml2xmloutdata/x86_64-default-cpu-tcg-features.x86_64-latest.xml ../qemuxml2argvdata/x86_64-default-cpu-tcg-features.xml
+tests/vircaps2xmldata/linux-basic-dies/system/cpu ../../../virhostcpudata/linux-with-die/cpu
+tests/vircaps2xmldata/linux-basic-dies/system/node ../../../virhostcpudata/linux-with-die/node
 tests/vircaps2xmldata/linux-basic/system/node/node0/cpu0 ../../cpu/cpu0
 tests/vircaps2xmldata/linux-basic/system/node/node0/cpu1 ../../cpu/cpu1
 tests/vircaps2xmldata/linux-basic/system/node/node0/cpu2 ../../cpu/cpu2
@@ -134,6 +255,7 @@ 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-hmat/system/node/node0/access1/targets/node1 ../../../node1
 tests/vircaps2xmldata/linux-resctrl-cdp/system ../linux-resctrl/system/
 tests/vircaps2xmldata/linux-resctrl-cmt/system ../linux-resctrl/system
 tests/vircaps2xmldata/linux-resctrl-fake-feature/system ../linux-resctrl/system
@@ -978,3 +1100,24 @@ 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
+tests/virhostcpudata/linux-with-die/node/node0/cpu0 ../../cpu/cpu0
+tests/virhostcpudata/linux-with-die/node/node0/cpu1 ../../cpu/cpu1
+tests/virhostcpudata/linux-with-die/node/node0/cpu10 ../../cpu/cpu10
+tests/virhostcpudata/linux-with-die/node/node0/cpu11 ../../cpu/cpu11
+tests/virhostcpudata/linux-with-die/node/node0/cpu2 ../../cpu/cpu2
+tests/virhostcpudata/linux-with-die/node/node0/cpu3 ../../cpu/cpu3
+tests/virhostcpudata/linux-with-die/node/node0/cpu4 ../../cpu/cpu4
+tests/virhostcpudata/linux-with-die/node/node0/cpu5 ../../cpu/cpu5
+tests/virhostcpudata/linux-with-die/node/node0/cpu6 ../../cpu/cpu6
+tests/virhostcpudata/linux-with-die/node/node0/cpu7 ../../cpu/cpu7
+tests/virhostcpudata/linux-with-die/node/node0/cpu8 ../../cpu/cpu8
+tests/virhostcpudata/linux-with-die/node/node0/cpu9 ../../cpu/cpu9
+tests/virstoragetestdata/images/sub/link1 ../qcow2_raw-raw-reldir.qcow2
+tests/virstoragetestdata/images/sub/link2 ../qcow2_qcow2-qcow2-symlink_raw-raw-reldir.qcow2
+tests/virstoragetestdata/lookup/sub/link2 ../wrap
+tests/vmx2xmldata/cdrom-ide-file-missing-datastore.xml cdrom-ide-empty.xml
+tests/vmx2xmldata/cdrom-ide-file-missing-file.xml cdrom-ide-empty.xml
+tests/vmx2xmldata/serial-pipe-client-app.xml serial-pipe.xml
+tests/vmx2xmldata/serial-pipe-client-vm.xml serial-pipe.xml
+tests/vmx2xmldata/serial-pipe-server-app.xml serial-pipe.xml
+tests/vmx2xmldata/serial-pipe-server-vm.xml serial-pipe.xml
diff --git a/SPECS/libvirt.spec b/SPECS/libvirt.spec
index d49212a..d6e9abf 100644
--- a/SPECS/libvirt.spec
+++ b/SPECS/libvirt.spec
@@ -3,20 +3,29 @@
 # 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 7
-%define min_fedora 30
+%define min_rhel 8
+%define min_fedora 33
 
-%if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel})
-    %define supported_platform 1
-%else
-    %define supported_platform 0
+%define arches_qemu_kvm         %{ix86} x86_64 %{power64} %{arm} aarch64 s390x
+%if 0%{?rhel}
+    %if 0%{?rhel} > 8
+        %define arches_qemu_kvm     x86_64 aarch64 s390x
+    %else
+        %define arches_qemu_kvm     x86_64 %{power64} aarch64 s390x
+    %endif
 %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}
+%define arches_64bit            x86_64 %{power64} aarch64 s390x riscv64
+%define arches_x86              %{ix86} x86_64
+
+%define arches_systemtap_64bit  %{arches_64bit}
+%define arches_dmidecode        %{arches_x86}
+%define arches_xen              %{arches_x86} aarch64
+%define arches_vbox             %{arches_x86}
+%define arches_ceph             %{arches_64bit}
+%define arches_zfs              %{arches_x86} %{power64} %{arm}
+%define arches_numactl          %{arches_x86} %{power64} aarch64 s390x
+%define arches_numad            %{arches_x86} %{power64} aarch64
 
 # The hypervisor drivers that run in libvirtd
 %define with_qemu          0%{!?_without_qemu:1}
@@ -24,30 +33,19 @@
 %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 %{power64} aarch64 s390x
-%endif
-
-# On RHEL 7 and older macro _vpath_builddir is not defined.
-%if 0%{?rhel} <= 7
-    %define _vpath_builddir %{_target_platform}
-%endif
-
-%ifarch %{qemu_kvm_arches}
+%ifarch %{arches_qemu_kvm}
     %define with_qemu_kvm      %{with_qemu}
 %else
     %define with_qemu_kvm      0
 %endif
 
+%define with_qemu_tcg      %{with_qemu}
+
+# RHEL disables TCG on all architectures
+%if 0%{?rhel}
+    %define with_qemu_tcg 0
+%endif
+
 %if ! %{with_qemu_tcg} && ! %{with_qemu_kvm}
     %define with_qemu 0
 %endif
@@ -67,72 +65,65 @@
 %endif
 
 %define with_storage_gluster 0%{!?_without_storage_gluster:1}
-%ifnarch %{qemu_kvm_arches}
-    # gluster is only built where qemu driver is enabled on RHEL 8
-    %if 0%{?rhel} >= 8
+%if 0%{?rhel}
+    # Glusterfs has been dropped in RHEL-9, and before that
+    # was only enabled on arches where KVM exists
+    %if 0%{?rhel} > 8
         %define with_storage_gluster 0
+    %else
+        %ifnarch %{arches_qemu_kvm}
+            %define with_storage_gluster 0
+        %endif
     %endif
 %endif
 
-%define with_numactl          0%{!?_without_numactl:1}
-
-# F25+ has zfs-fuse
+# Fedora has zfs-fuse
 %if 0%{?fedora}
     %define with_storage_zfs      0%{!?_without_storage_zfs:1}
 %else
     %define with_storage_zfs      0
 %endif
 
-# We need a recent enough libiscsi (>= 1.18.0)
-%if 0%{?fedora} || 0%{?rhel} > 7
-    %define with_storage_iscsi_direct 0%{!?_without_storage_iscsi_direct:1}
-%else
+%define with_storage_iscsi_direct 0%{!?_without_storage_iscsi_direct:1}
+# libiscsi has been dropped in RHEL-9
+%if 0%{?rhel} > 8
     %define with_storage_iscsi_direct 0
 %endif
 
+# Other optional features
+%define with_numactl          0%{!?_without_numactl:1}
+
 # 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_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_fuse             0
+%define with_sanlock          0
+%define with_numad            0
+%define with_firewalld_zone   0
+%define with_netcf            0
+%define with_libssh2          0
+%define with_wireshark        0
+%define with_libssh           0
+%define with_dmidecode        0
 
 # Finally set the OS / architecture specific special cases
 
-# Xen is available only on i386 x86_64 ia64
-%ifnarch %{ix86} x86_64 ia64
+# Architecture-dependent features
+%ifnarch %{arches_xen}
     %define with_libxl 0
 %endif
-
-# vbox is available only on i386 x86_64
-%ifnarch %{ix86} x86_64
+%ifnarch %{arches_vbox}
     %define with_vbox 0
 %endif
-
-# Numactl is not available on many non-x86 archs
-%ifarch s390 s390x %{arm} riscv64
+%ifnarch %{arches_numactl}
     %define with_numactl 0
 %endif
-
-# zfs-fuse is not available on some architectures
-%ifarch s390 s390x aarch64 riscv64
+%ifnarch %{arches_zfs}
     %define with_storage_zfs 0
 %endif
-
-# Ceph dropping support for 32-bit hosts
-%if 0%{?fedora} >= 30
-    %ifarch %{arm} %{ix86}
-        %define with_storage_rbd 0
-    %endif
+%ifnarch %{arches_ceph}
+    %define with_storage_rbd 0
 %endif
 
-# RHEL doesn't ship OpenVZ, VBox, PowerHypervisor,
-# VMware, libxenlight (Xen 4.1 and newer),
-# or HyperV.
+# RHEL doesn't ship many hypervisor drivers
 %if 0%{?rhel}
     %define with_openvz 0
     %define with_vbox 0
@@ -140,16 +131,13 @@
     %define with_libxl 0
     %define with_hyperv 0
     %define with_vz 0
-
-    %if 0%{?rhel} > 7
-        %define with_lxc 0
-    %endif
+    %define with_lxc 0
 %endif
 
-%define with_firewalld 1
+%define with_firewalld_zone 0%{!?_without_firewalld_zone:1}
 
-%if 0%{?fedora} >= 31 || 0%{?rhel} > 7
-    %define with_firewalld_zone 0%{!?_without_firewalld_zone:1}
+%if (0%{?fedora} && 0%{?fedora} < 34) || (0%{?rhel} && 0%{?rhel} < 9)
+    %define with_netcf 0%{!?_without_netcf:1}
 %endif
 
 
@@ -164,7 +152,7 @@
     %define with_sanlock 0%{!?_without_sanlock:1}
 %endif
 %if 0%{?rhel}
-    %ifarch %{qemu_kvm_arches}
+    %ifarch %{arches_qemu_kvm}
         %define with_sanlock 0%{!?_without_sanlock:1}
     %endif
 %endif
@@ -174,52 +162,55 @@
     %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}
-    %define wireshark_plugindir %(pkg-config --variable plugindir wireshark)/epan
-%endif
+# Enable wireshark plugins for all distros
+%define with_wireshark 0%{!?_without_wireshark:1}
+%define wireshark_plugindir %(pkg-config --variable plugindir wireshark)/epan
 
-# Enable libssh transport for new enough distros
-%if 0%{?fedora} || 0%{?rhel} > 7
-    %define with_libssh 0%{!?_without_libssh:1}
-%endif
-
-%define with_bash_completion  0%{!?_without_bash_completion:1}
+# Enable libssh transport for all distros
+%define with_libssh 0%{!?_without_libssh:1}
 
 %if %{with_qemu} || %{with_lxc}
 # numad is used to manage the CPU and memory placement dynamically,
 # it's not available on many non-x86 architectures.
-    %ifnarch s390 s390x %{arm} riscv64
+    %ifarch %{arches_numad}
         %define with_numad    0%{!?_without_numad:1}
     %endif
 %endif
 
+%ifarch %{arches_dmidecode}
+    %define with_dmidecode 0%{!?_without_dmidecode:1}
+%endif
+
+%define with_modular_daemons 0
+%if 0%{?fedora} >= 35 || 0%{?rhel} >= 9
+    %define with_modular_daemons 1
+%endif
+
 # Force QEMU to run as non-root
 %define qemu_user  qemu
 %define qemu_group  qemu
 
+# Locations for QEMU data
+%define qemu_moddir %{_libdir}/qemu
+%define qemu_datadir %{_datadir}/qemu
+
 
 # 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
+    %define enable_werror -Dwerror=true
 %else
-    %define enable_werror --disable-werror
+    %define enable_werror -Dwerror=false -Dgit_werror=disabled
 %endif
 
-%if 0%{?rhel} == 7
-    %define tls_priority "NORMAL"
-%else
-    %define tls_priority "@LIBVIRT,SYSTEM"
-%endif
+%define tls_priority "@LIBVIRT,SYSTEM"
 
 
 Summary: Library providing a simple virtualization API
 Name: libvirt
-Version: 6.0.0
-Release: 37%{?dist}%{?extra_release}
+Version: 8.0.0
+Release: 5%{?dist}%{?extra_release}
 License: LGPLv2+
 URL: https://libvirt.org/
 
@@ -234,544 +225,19 @@ Patch2: libvirt-RHEL-Add-rhel-machine-types-to-qemuDomainMachineNeedsFDC.patch
 Patch3: libvirt-RHEL-Fix-virConnectGetMaxVcpus-output.patch
 Patch4: libvirt-RHEL-qemu-Add-ability-to-set-sgio-values-for-hostdev.patch
 Patch5: libvirt-RHEL-qemu-Add-check-for-unpriv-sgio-for-SCSI-generic-host-device.patch
-Patch6: libvirt-RHEL-qemu-Alter-val-usage-in-qemuSetUnprivSGIO.patch
-Patch7: libvirt-RHEL-qemu-Alter-qemuSetUnprivSGIO-hostdev-shareable-logic.patch
-Patch8: libvirt-RHEL-qemu-Fix-logic-error-in-qemuSetUnprivSGIO.patch
-Patch9: libvirt-RHEL-qemu-Fix-crash-trying-to-use-iSCSI-hostdev.patch
-Patch10: libvirt-qemuDomainSaveImageStartVM-Use-VIR_AUTOCLOSE-for-intermediatefd.patch
-Patch11: libvirt-qemuDomainSaveImageStartVM-Use-g_autoptr-for-virCommand.patch
-Patch12: libvirt-qemu-Use-g_autoptr-for-qemuDomainSaveCookie.patch
-Patch13: libvirt-qemu-Stop-domain-on-failed-restore.patch
-Patch14: libvirt-qemu-Don-t-emit-SUSPENDED_POSTCOPY-event-on-destination.patch
-Patch15: libvirt-util-storagefile-Properly-set-transport-type-when-parsing-NBD-strings.patch
-Patch16: libvirt-tests-virstorage-Add-tests-for-NBD-URI-style-syntax-over-UNIX.patch
-Patch17: libvirt-qemu-end-the-agent-job-in-qemuDomainSetTimeAgent.patch
-Patch18: libvirt-cpu.c-Check-properly-for-virCapabilitiesGetNodeInfo-retval.patch
-Patch19: libvirt-qemu_conf-Avoid-dereferencing-NULL-in-virQEMUDriverGetHost-NUMACaps-CPU.patch
-Patch20: libvirt-qemu_capabilities-Rework-domain-caps-cache.patch
-Patch21: libvirt-conf-add-support-for-specifying-CPU-dies-parameter.patch
-Patch22: libvirt-conf-remove-unused-virCapabilitiesSetHostCPU-method.patch
-Patch23: libvirt-qemu-add-support-for-specifying-CPU-dies-topology-parameter.patch
-Patch24: libvirt-hostcpu-add-support-for-reporting-die_id-in-NUMA-topology.patch
-Patch25: libvirt-tests-add-host-CPU-data-files-for-validating-die_id.patch
-Patch26: libvirt-qemu-add-capabilities-flag-for-failover-feature.patch
-Patch27: libvirt-conf-parse-format-teaming-subelement-of-interface.patch
-Patch28: libvirt-qemu-support-interface-teaming-functionality.patch
-Patch29: libvirt-qemu-allow-migration-with-assigned-PCI-hostdev-if-teaming-is-set.patch
-Patch30: libvirt-qemu-add-wait-unplug-to-qemu-migration-status-enum.patch
-Patch31: libvirt-docs-document-interface-subelement-teaming.patch
-Patch32: libvirt-qemu-blockcopy-Actually-unplug-unused-images-when-mirror-job-fails-to-start.patch
-Patch33: libvirt-qemu-domain-Extract-code-to-determine-topmost-nodename-to-qemuDomainDiskGetTopNodename.patch
-Patch34: libvirt-qemu-Fix-value-of-device-argument-for-blockdev-mirror.patch
-Patch35: libvirt-qemu-Fix-value-of-device-argument-for-block-commit.patch
-Patch36: libvirt-conf-backup-Allow-configuration-of-names-exported-via-NBD.patch
-Patch37: libvirt-qemu-backup-Implement-support-for-backup-disk-export-name-configuration.patch
-Patch38: libvirt-qemu-backup-Implement-support-for-backup-disk-bitmap-name-configuration.patch
-Patch39: libvirt-util-hash-Improve-debugability-of-Duplicate-key-error-message.patch
-Patch40: libvirt-tests-hash-Test-case-for-adding-duplicate-hash-entry.patch
-Patch41: libvirt-qemu-block-Don-t-skip-creation-of-luks-formatted-images.patch
-Patch42: libvirt-qemu-monitor-Improve-error-message-when-QEMU-reply-is-too-large.patch
-Patch43: libvirt-qemu-snapshot-Always-rewrite-backingStore-data-when-reusing-existing-images.patch
-Patch44: libvirt-qemu-snapshot-Prevent-too-nested-domain-XML-when-doing-inactive-snapshot.patch
-Patch45: libvirt-qemu-checkpoint-Store-whether-deleted-checkpoint-is-current-in-a-variable.patch
-Patch46: libvirt-qemu-checkpoint-split-out-checkpoint-deletion-bitmaps.patch
-Patch47: libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointDiscardBitmaps.patch
-Patch48: libvirt-qemu-checkpoint-rename-disk-chkdisk-in-qemuCheckpointAddActions.patch
-Patch49: libvirt-qemu-checkpoint-Use-disk-definition-directly-when-creating-checkpoint.patch
-Patch50: libvirt-qemu-checkpoint-tolerate-missing-disks-on-checkpoint-deletion.patch
-Patch51: libvirt-qemu-domain-Remove-unused-qemuDomainDiskNodeFormatLookup.patch
-Patch52: libvirt-qemu-checkpoint-Introduce-helper-to-find-checkpoint-disk-definition-in-parents.patch
-Patch53: libvirt-qemu-checkpoint-Extract-calculation-of-bitmap-merging-for-checkpoint-deletion.patch
-Patch54: libvirt-qemu-snapshot-go-through-cleanup-on-error.patch
-Patch55: libvirt-util-hash-Use-g_new0-for-allocating-hash-internals.patch
-Patch56: libvirt-conf-domain-Remove-checking-of-return-value-of-virHashCreateFull.patch
-Patch57: libvirt-Remove-checking-of-return-value-of-virHashNew.patch
-Patch58: libvirt-qemuMigrationCookieAddNBD-Exit-early-if-there-are-no-disks.patch
-Patch59: libvirt-qemuMigrationCookieNBD-Extract-embedded-struct.patch
-Patch60: libvirt-qemuMigrationCookieAddNBD-Use-glib-memory-allocators.patch
-Patch61: libvirt-qemuMigrationCookieAddNBD-Move-monitor-call-out-of-the-loop.patch
-Patch62: libvirt-qemuMigrationCookieAddNBD-Use-virHashNew-and-automatic-freeing-of-virHashTablePtr.patch
-Patch63: libvirt-qemuMigrationCookieAddNBD-Remove-ret-variable-and-cleanup-label.patch
-Patch64: libvirt-qemuMigrationCookieAddNBD-Fix-filling-of-capacity-when-blockdev-is-used.patch
-Patch65: libvirt-tests-qemublock-Add-test-for-checkpoint-deletion-bitmap-merge.patch
-Patch66: libvirt-tests-qemublock-Add-few-more-test-cases-for-checkpoint-deletion.patch
-Patch67: libvirt-tests-qemublock-Add-synthetic-snapshot-checkpoint-test-data.patch
-Patch68: libvirt-qemu-checkpoint-Introduce-support-for-deleting-checkpoints-accross-snapshots.patch
-Patch69: libvirt-tests-qemublock-Add-checkpoint-deletion-test-for-deep-backing-chain.patch
-Patch70: libvirt-tests-qemublock-Add-checkpoint-deletion-tests-for-some-special-cases.patch
-Patch71: libvirt-qemu-checkpoint-Track-and-relabel-images-for-bitmap-merging.patch
-Patch72: libvirt-qemu-block-Extract-calls-of-qemuBlockGetNamedNodeData-into-a-helper-function.patch
-Patch73: libvirt-util-json-Introduce-virJSONValueArrayConcat.patch
-Patch74: libvirt-virJSONValueNewArray-Use-g_new0-to-allocate-and-remove-NULL-checks-from-callers.patch
-Patch75: libvirt-virhash-Fix-the-expectations-of-virHashKeyEqual-implementations.patch
-Patch76: libvirt-virHashAddOrUpdateEntry-Simplify-allocation-of-new-entry.patch
-Patch77: libvirt-qemu-blockjob-Store-jobflags-with-block-job-data.patch
-Patch78: libvirt-qemu-blockjob-Store-flags-for-all-the-block-job-types.patch
-Patch79: libvirt-qemu-block-Add-validator-for-bitmap-chains-accross-backing-chains.patch
-Patch80: libvirt-tests-qemublocktest-Add-another-synthetic-test-case-for-broken-bitmaps.patch
-Patch81: libvirt-qemu-block-Introduce-function-to-calculate-bitmap-handling-for-block-copy.patch
-Patch82: libvirt-tests-qemublock-Add-tests-for-qemuBlockBitmapsHandleBlockcopy.patch
-Patch83: libvirt-qemuDomainBlockPivot-Copy-bitmaps-backing-checkpoints-for-virDomainBlockCopy.patch
-Patch84: libvirt-docs-domaincaps-Mention-VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA.patch
-Patch85: libvirt-qemu-do-not-revert-to-NULL-bandwidth.patch
-Patch86: libvirt-qemu-preserve-error-on-bandwidth-rollback.patch
-Patch87: libvirt-tests-Add-capabilities-for-QEMU-5.0.0-on-aarch64.patch
-Patch88: libvirt-qemu-Use-switch-statement-in-qemuBuildCpuCommandLine.patch
-Patch89: libvirt-qemu-Add-the-QEMU_CAPS_CPU_KVM_NO_ADJVTIME-capability.patch
-Patch90: libvirt-conf-Introduce-VIR_DOMAIN_TIMER_NAME_ARMVTIMER.patch
-Patch91: libvirt-qemu-Validate-configuration-for-the-armvtimer-timer.patch
-Patch92: libvirt-qemu-Format-the-armvtimer-timer-on-the-command-line.patch
-Patch93: libvirt-tests-Add-test-case-for-the-armvtimer-timer.patch
-Patch94: libvirt-docs-List-the-armvtimer-timer-among-all-others.patch
-Patch95: libvirt-qemu_domain-Modify-access-to-a-NVMe-disk-iff-needed.patch
-Patch96: libvirt-qemuBlockStorageSourceGetBackendProps-Report-errors-on-all-switch-cases.patch
-Patch97: libvirt-virDomainDiskAddISCSIPoolSourceHost-Sanitize-handling-of-string-list.patch
-Patch98: libvirt-virDomainDiskAddISCSIPoolSourceHost-use-g_new0-instead-of-VIR_ALLOC_N.patch
-Patch99: libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-cleanup-label.patch
-Patch100: libvirt-virDomainDiskAddISCSIPoolSourceHost-Remove-ternary-operator.patch
-Patch101: libvirt-virDomainDiskAddISCSIPoolSourceHost-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
-Patch102: libvirt-virDomainDiskTranslateSourcePoolAuth-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
-Patch103: libvirt-virDomainDiskTranslateISCSIDirect-Take-virStorageSourcePtr-instead-of-virDomainDiskDefPtr.patch
-Patch104: libvirt-virDomainDiskTranslateSourcePool-split-code-to-setup-one-storage-source.patch
-Patch105: libvirt-virDomainDiskTranslateSourcePool-Translate-volume-disks-in-whole-backing-chain.patch
-Patch106: libvirt-qemuMonitorJSONBlockdevAdd-Refactor-cleanup.patch
-Patch107: libvirt-qemuMonitorJSONBlockdevDel-Refactor-cleanup.patch
-Patch108: libvirt-qemuMonitorBlockdevAdd-Take-double-pointer-argument.patch
-Patch109: libvirt-qemu-hotplug-Fix-handling-of-the-copy-on-read-layer-with-blockdev.patch
-Patch110: libvirt-virStorageSourceParseBackingJSON-Pass-around-original-backing-file-string.patch
-Patch111: libvirt-virStorageSourceParseBackingJSON-Move-deflattening-of-json-URIs-out-of-recursion.patch
-Patch112: libvirt-virStorageSourceJSONDriverParser-annotate-format-drivers.patch
-Patch113: libvirt-virStorageSourceParseBackingJSON-Allow-json-pseudo-URIs-without-file-wrapper.patch
-Patch114: libvirt-virStorageSourceParseBackingJSON-Prevent-arbitrary-nesting-with-format-drivers.patch
-Patch115: libvirt-tests-virstorage-Add-test-cases-for-json-pseudo-URI-without-file-wrapper.patch
-Patch116: libvirt-qemu-domain-Refactor-formatting-of-node-names-into-status-XML.patch
-Patch117: libvirt-docs-formatdomain-Close-source-on-one-of-disk-examples.patch
-Patch118: libvirt-tests-virstorage-Add-test-data-for-json-specified-raw-image-with-offset-size.patch
-Patch119: libvirt-util-virstoragefile-Add-data-structure-for-storing-storage-source-slices.patch
-Patch120: libvirt-qemuBlockStorageSourceGetFormatRawProps-format-offset-and-size-for-slice.patch
-Patch121: libvirt-qemuDomainValidateStorageSource-Reject-unsupported-slices.patch
-Patch122: libvirt-qemu-block-forbid-creation-of-storage-sources-with-slice.patch
-Patch123: libvirt-docs-Document-the-new-slices-sub-element-of-disk-s-source.patch
-Patch124: libvirt-conf-Implement-support-for-slices-of-disk-source.patch
-Patch125: libvirt-qemu-domain-Store-nodenames-of-slice-in-status-XML.patch
-Patch126: libvirt-qemu-block-Properly-format-storage-slice-into-backing-store-strings.patch
-Patch127: libvirt-tests-qemublock-Add-cases-for-creating-image-overlays-on-top-of-disks-with-slice.patch
-Patch128: libvirt-qemu-Add-support-for-slices-of-type-storage.patch
-Patch129: libvirt-tests-qemu-Add-test-data-for-the-new-slice-element.patch
-Patch130: libvirt-virStorageSourceParseBackingJSONRaw-Parse-offset-and-size-attributes.patch
-Patch131: libvirt-qemuDomainGetStatsIOThread-Don-t-leak-array-with-0-iothreads.patch
-Patch132: libvirt-qemuxml2xmltest-Add-case-for-host-model-vendor_id.patch
-Patch133: libvirt-cpu_conf-Format-vendor_id-for-host-model-CPUs.patch
-Patch134: libvirt-qemu-rename-qemuAgentGetFSInfoInternalDisk.patch
-Patch135: libvirt-qemu-store-complete-agent-filesystem-information.patch
-Patch136: libvirt-qemu-Don-t-store-disk-alias-in-qemuAgentDiskInfo.patch
-Patch137: libvirt-qemu-don-t-access-vmdef-within-qemu_agent.c.patch
-Patch138: libvirt-qemu-remove-qemuDomainObjBegin-EndJobWithAgent.patch
-Patch139: libvirt-docs-fix-a-typo.patch
-Patch140: libvirt-virDomainNetDefClear-Free-persistent-name.patch
-Patch141: libvirt-virSecurityManagerMetadataLock-Store-locked-paths.patch
-Patch142: libvirt-security-Don-t-remember-seclabel-for-paths-we-haven-t-locked-successfully.patch
-Patch143: libvirt-security-Don-t-fail-if-locking-a-file-on-NFS-mount-fails.patch
-Patch144: libvirt-util-storagefile-Drop-image-format-probing-by-file-suffix.patch
-Patch145: libvirt-virStorageFileGetMetadataRecurse-Remove-impossible-error-report.patch
-Patch146: libvirt-virStorageFileGetMetadataRecurse-Shuffle-around-assignment-of-backing-chain-depth.patch
-Patch147: libvirt-virStorageFileGetMetadataRecurse-Expect-NULL-src-path.patch
-Patch148: libvirt-virStorageFileGetMetadataRecurse-Use-virHashHasEntry-instead-of-fake-pointers.patch
-Patch149: libvirt-virStorageFileGetMetadataRecurse-Extract-storage-access.patch
-Patch150: libvirt-virStorageFileGetMetadataRecurse-Remove-cleanup-label.patch
-Patch151: libvirt-tests-virstorage-Fix-backing-file-format-of-created-image.patch
-Patch152: libvirt-virStorageSourceUpdateCapacity-Drop-probe-argument.patch
-Patch153: libvirt-util-storage-Store-backing-store-format-in-virStorageSource.patch
-Patch154: libvirt-virStorageSourceNewFromBacking-Also-transfer-the-format.patch
-Patch155: libvirt-virStorageBackendGlusterRefreshVol-Refactor-handling-of-backing-store.patch
-Patch156: libvirt-virStorageFileGetMetadataFromBuf-Remove-backingFormat-argument.patch
-Patch157: libvirt-virStorageFileGetMetadataFromFD-Remove-unused-backingFormat-argument.patch
-Patch158: libvirt-qemu-domain-Convert-detected-iso-image-format-into-raw.patch
-Patch159: libvirt-virStorageFileGetMetadataRecurse-Allow-format-probing-under-special-circumstances.patch
-Patch160: libvirt-kbase-backing_chains-Clarify-some-aspects-of-image-probing.patch
-Patch161: libvirt-kbase-backing_chains-Add-steps-how-to-securely-probe-image-format.patch
-Patch162: libvirt-conf-use-virXMLFormatElement-in-virDomainFSDefFormat.patch
-Patch163: libvirt-qemu-use-def-instead-of-vm-def-in-qemuExtDevicesStart.patch
-Patch164: libvirt-qemu-eliminate-ret-in-qemuExtDevicesStart.patch
-Patch165: libvirt-docs-render-class-literal-with-monospace-font.patch
-Patch166: libvirt-docs-reduce-excessive-spacing-in-ToC-for-RST-files.patch
-Patch167: libvirt-virDomainFSDefFree-Unref-private-data.patch
-Patch168: libvirt-schema-wrap-fsDriver-in-a-choice-group.patch
-Patch169: libvirt-qemuExtDevicesStart-pass-logManager.patch
-Patch170: libvirt-qemu-pass-virDomainObjPtr-to-qemuExtDevicesSetupCgroup.patch
-Patch171: libvirt-qemuxml2xmltest-set-driver-as-privileged.patch
-Patch172: libvirt-qemu-add-QEMU_CAPS_DEVICE_VHOST_USER_FS.patch
-Patch173: libvirt-docs-add-virtiofs-kbase.patch
-Patch174: libvirt-conf-qemu-add-virtiofs-fsdriver-type.patch
-Patch175: libvirt-conf-add-virtiofs-related-elements-and-attributes.patch
-Patch176: libvirt-qemu-add-virtiofsd_debug-to-qemu.conf.patch
-Patch177: libvirt-qemu-validate-virtiofs-filesystems.patch
-Patch178: libvirt-qemu-forbid-migration-with-vhost-user-fs-device.patch
-Patch179: libvirt-qemu-add-code-for-handling-virtiofsd.patch
-Patch180: libvirt-qemu-put-virtiofsd-in-the-emulator-cgroup.patch
-Patch181: libvirt-qemu-use-the-vhost-user-schemas-to-find-binary.patch
-Patch182: libvirt-qemu-build-vhost-user-fs-device-command-line.patch
-Patch183: libvirt-RHEL-virscsi-Check-device-type-before-getting-it-s-dev-node-name.patch
-Patch184: libvirt-RHEL-virscsi-Support-TAPEs-in-virSCSIDeviceGetDevName.patch
-Patch185: libvirt-RHEL-virscsi-Introduce-and-use-virSCSIDeviceGetUnprivSGIOSysfsPath.patch
-Patch186: libvirt-RHEL-virutil-Accept-non-block-devices-in-virGetDeviceID.patch
-Patch187: libvirt-RHEL-qemuSetUnprivSGIO-Actually-use-calculated-sysfs_path-to-set-unpriv_sgio.patch
-Patch188: libvirt-RHEL-qemuCheckUnprivSGIO-use-sysfs_path-to-get-unpriv_sgio.patch
-Patch189: libvirt-security-Introduce-VIR_SECURITY_DOMAIN_IMAGE_PARENT_CHAIN_TOP-flag.patch
-Patch190: libvirt-qemu-Tell-secdrivers-which-images-are-top-parent.patch
-Patch191: libvirt-virDomainDiskTranslateSourcePool-Check-for-disk-type-correctly.patch
-Patch192: libvirt-virbuftest-remove-extra-G_GNUC_UNUSED-markers.patch
-Patch193: libvirt-virbuftest-use-g_autofree.patch
-Patch194: libvirt-virbuftest-remove-unnecessary-labels.patch
-Patch195: libvirt-virbuftest-declare-testBufAddStrData-earlier.patch
-Patch196: libvirt-virbuftest-use-field-names-when-initalizing-test-info.patch
-Patch197: libvirt-util-add-virBufferTrimChars.patch
-Patch198: libvirt-conf-do-not-generate-machine-names-ending-with-a-dash.patch
-Patch199: libvirt-conf-Don-t-generate-machine-names-with-a-dot.patch
-Patch200: libvirt-qemuAgentFSInfoFormatParams-Remove-pointless-returned-value.patch
-Patch201: libvirt-qemuDomainGetGuestInfo-Don-t-try-to-free-a-negative-number-of-entries.patch
-Patch202: libvirt-qemuDomainBlockPivot-Move-check-prior-to-executing-the-pivot-steps.patch
-Patch203: libvirt-qemuDomainBlockCopyCommon-Record-updated-flags-to-block-job.patch
-Patch204: libvirt-qemu-capabilities-Introduce-QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY.patch
-Patch205: libvirt-qemu-blockcopy-Allow-late-opening-of-the-backing-chain-of-a-shallow-copy.patch
-Patch206: libvirt-qemuBlockStorageSourceDetachPrepare-Get-rid-of-cleanup-section.patch
-Patch207: libvirt-qemu-Don-t-take-double-pointer-in-qemuDomainSecretInfoFree.patch
-Patch208: libvirt-qemuMigrationParamsResetTLS-Adapt-to-modern-memory-management.patch
-Patch209: libvirt-qemuMigrationParamsResetTLS-Fix-comment.patch
-Patch210: libvirt-qemuDomainSecretInfo-Register-autoptr-cleanup-function.patch
-Patch211: libvirt-qemuDomainSecretAESSetup-Automatically-free-non-secret-locals.patch
-Patch212: libvirt-qemuDomainSecretAESSetup-Allocate-and-return-secinfo-here.patch
-Patch213: libvirt-qemuDomainSecretAESSetup-Split-out-lookup-of-secret-data.patch
-Patch214: libvirt-Remove-qemuDomainSecretInfoNew.patch
-Patch215: libvirt-qemu-Introduce-another-helper-for-creating-alias-for-a-secret-object.patch
-Patch216: libvirt-qemuDomainSecretStorageSourcePrepare-Fix-naming-of-alias-variables.patch
-Patch217: libvirt-qemuDomainDeviceDiskDefPostParseRestoreSecAlias-Hardcode-restored-aliases.patch
-Patch218: libvirt-qemu-Split-out-initialization-of-secrets-for-iscsi-hostdevs.patch
-Patch219: libvirt-qemuDomainSecretAESSetupFromSecret-Use-qemuAliasForSecret.patch
-Patch220: libvirt-qemuDomainSecretStorageSourcePrepare-Change-aliases-for-disk-secrets.patch
-Patch221: libvirt-qemuDomainGetSecretAESAlias-Replace-outstanding-uses-with-qemuAliasForSecret.patch
-Patch222: libvirt-conf-Add-support-for-modifying-ssl-validation-for-https-ftps-disks.patch
-Patch223: libvirt-conf-Add-support-for-cookies-for-HTTP-based-disks.patch
-Patch224: libvirt-conf-Add-support-for-setting-timeout-and-readahead-size-for-network-disks.patch
-Patch225: libvirt-qemuDomainValidateStorageSource-Validate-new-network-storage-parameters.patch
-Patch226: libvirt-qemuxml2argvtest-Add-test-case-for-disks-with-http-s-source.patch
-Patch227: libvirt-qemu-block-Implement-ssl-verification-configuration.patch
-Patch228: libvirt-qemu-domain-Store-data-for-secret-object-representing-http-cookies.patch
-Patch229: libvirt-qemuDomainSecretStorageSourcePrepare-Setup-secret-for-http-cookies.patch
-Patch230: libvirt-qemu-Handle-hotplug-and-commandline-for-secret-objects-for-http-cookies.patch
-Patch231: libvirt-qemu-block-Add-support-for-HTTP-cookies.patch
-Patch232: libvirt-qemu-block-Implement-readahead-and-timeout-properties-for-curl-driver.patch
-Patch233: libvirt-virstoragefile-Add-JSON-parser-for-sslverify-readahead-cookies-and-timeout.patch
-Patch234: libvirt-virStorageSourceParseBackingJSONUri-Handle-undocumented-value-off-for-sslverify.patch
-Patch235: libvirt-qemublocktest-Load-QMP-schema-earlier.patch
-Patch236: libvirt-qemublocktest-Extract-schema-root-for-blockdev-add-validation.patch
-Patch237: libvirt-qemublocktest-XMLjsonXML-Test-formatting-parsing-of-modern-JSON.patch
-Patch238: libvirt-qemublocktest-Add-JSON-JSON-test-cases-for-block-device-backends.patch
-Patch239: libvirt-qemu-Pass-through-arguments-of-ssh-block-driver-used-by-libguestfs.patch
-Patch240: libvirt-qemu-capabilities-Add-QEMU_CAPS_BLOCKDEV_REOPEN.patch
-Patch241: libvirt-qemu-monitor-Add-handler-for-blockdev-reopen.patch
-Patch242: libvirt-qemu-block-implement-helpers-for-blockdev-reopen.patch
-Patch243: libvirt-qemuCheckpointDiscardBitmaps-Reopen-images-for-bitmap-modifications.patch
-Patch244: libvirt-qemuCheckpointDiscardBitmaps-Use-correct-field-for-checkpoint-bitmap-name.patch
-Patch245: libvirt-qemuDomainBlockCommit-Move-checks-depending-on-capabilities-after-liveness-check.patch
-Patch246: libvirt-qemu-domain-Extract-formatting-of-commit-blockjob-data-into-a-function.patch
-Patch247: libvirt-qemu-domain-Extract-parsing-of-commit-blockjob-data-into-a-function.patch
-Patch248: libvirt-qemu-blockjob-Store-list-of-bitmaps-disabled-prior-to-commit.patch
-Patch249: libvirt-qemublocktest-Fix-and-optimize-fake-image-chain.patch
-Patch250: libvirt-qemu-block-Implement-helpers-for-dealing-with-bitmaps-during-block-commit.patch
-Patch251: libvirt-qemublocktest-Add-tests-for-handling-of-bitmaps-during-block-commit.patch
-Patch252: libvirt-qemublocktest-Add-more-tests-for-block-commit-bitmap-handling-with-snapshots.patch
-Patch253: libvirt-qemublocktest-Add-tests-of-broken-bitmap-chain-handling-during-block-commit.patch
-Patch254: libvirt-qemuBlockJobDiskNewCommit-Propagate-disabledBitmapsBase.patch
-Patch255: libvirt-qemuDomainBlockCommit-Handle-bitmaps-on-start-of-commit.patch
-Patch256: libvirt-qemuDomainBlockPivot-Handle-merging-of-bitmaps-when-pivoting-an-active-block-commit.patch
-Patch257: libvirt-qemu-blockjob-Handle-bitmaps-after-finish-of-normal-block-commit.patch
-Patch258: libvirt-qemu-blockjob-Re-enable-bitmaps-after-failed-block-commit.patch
-Patch259: libvirt-qemuDomainGetGuestInfo-don-t-assign-NULL-hostname.patch
-Patch260: libvirt-rhel-Enable-usage-of-x-blockdev-reopen.patch
-Patch261: libvirt-qemuBlockBitmapsHandleCommitStart-Fix-allocation-of-string-list.patch
-Patch262: libvirt-qemuBlockBitmapsHandleCommitFinish-Use-proper-variable-to-iterate.patch
-Patch263: libvirt-qemublocktest-Add-tests-for-re-enabling-of-bitmaps-after-commit.patch
-Patch264: libvirt-qemu-Create-multipath-targets-for-PRs.patch
-Patch265: libvirt-qemu-Don-t-crash-when-getting-targets-for-a-multipath.patch
-Patch266: libvirt-virSecretLookupDefCopy-Remove-return-value.patch
-Patch267: libvirt-virStorageEncryptionSecretCopy-Properly-copy-internals.patch
-Patch268: libvirt-vmx-shortcut-earlier-few-ignore-cases-in-virVMXParseDisk.patch
-Patch269: libvirt-vmx-make-fileName-optional-for-CD-ROMs.patch
-Patch270: libvirt-qemublocktest-Backport-cleanups-for-testQemuDiskXMLToProps-from-dd94f36ffbe.patch
-Patch271: libvirt-conf-rename-namespace-property-of-struct-_virStorageSourceNVMeDef.patch
-Patch272: libvirt-qemublocktest-xml-json-Add-test-for-NVMe.patch
-Patch273: libvirt-virDomainDiskSourceNVMeFormat-Format-only-valid-managed-values.patch
-Patch274: libvirt-qemublocktest-xml-json-Refactor-cleanup-in-test-case-functions.patch
-Patch275: libvirt-testQemuDiskXMLToPropsValidateFileSrcOnly-Move-together-with-rest-of-xml-json-code.patch
-Patch276: libvirt-qemuBlockGetBackingStoreString-Add-pretty-argument.patch
-Patch277: libvirt-testQemuDiskXMLToProps-Store-all-per-image-data-in-one-structure.patch
-Patch278: libvirt-qemublocktest-Test-backing-store-strings.patch
-Patch279: libvirt-qemuBlockGetBackingStoreString-Remove-ret-variable.patch
-Patch280: libvirt-storage-Implement-backing-store-support-for-fat-prefix.patch
-Patch281: libvirt-qemuBlockGetBackingStoreString-Add-extra-wrapping-object-to-JSON-strings.patch
-Patch282: libvirt-qemu-block-Extract-formatting-of-cookie-string.patch
-Patch283: libvirt-qemuBlockGetBackingStoreString-Properly-handle-http-s-with-cookies-and-others.patch
-Patch284: libvirt-storage-Parse-nvme-disk-source-properties-from-json-pseudo-uri.patch
-Patch285: libvirt-qemu-virtiofs-shorten-pid-filename.patch
-Patch286: libvirt-qemu-virtiofs-shorten-socket-filename.patch
-Patch287: libvirt-api-disallow-virDomainAgentSetResponseTimeout-on-read-only-connections.patch
-Patch288: libvirt-qemuBackupBegin-Fix-monitor-access-when-rolling-back-due-to-failure.patch
-Patch289: libvirt-qemuxml2xmltest-Wire-up-disk-network-http-case.patch
-Patch290: libvirt-virStorageSourceNetCookieValidate-Accept-quoted-cookie-value.patch
-Patch291: libvirt-qemu-block-Support-VIR_DOMAIN_BLOCK_COMMIT-PULL-REBASE_RELATIVE-with-blockdev.patch
-Patch292: libvirt-qemuDomainSnapshotDiskPrepareOne-Don-t-load-the-relative-path-with-blockdev.patch
-Patch293: libvirt-docs-formatdomain-Mention-missing-protocols.patch
-Patch294: libvirt-schemas-rng-Use-interleave-in-the-disk-source-element.patch
-Patch295: libvirt-conf-Add-support-for-http-s-query-strings.patch
-Patch296: libvirt-qemuBlockStorageSourceGetURI-Pass-through-query-component.patch
-Patch297: libvirt-virStorageSourceParseBackingURI-Preserve-query-string-of-URI-for-http-s.patch
-Patch298: libvirt-qemuDomainSnapshotDiskPrepareOne-Fix-logic-of-relative-backing-store-update.patch
-Patch299: libvirt-qemuCheckpointCreateXML-Check-VM-liveness-first.patch
-Patch300: libvirt-qemu-checkpoint-Allow-checkpoint-redefine-for-offline-VMs.patch
-Patch301: libvirt-virDomainCheckpointRedefinePrep-Set-current-checkpoint-if-there-isn-t-any.patch
-Patch302: libvirt-qemu-avoid-launching-non-x86-guests-with-APIC-EOI-setting.patch
-Patch303: libvirt-tests-qemu-add-disk-error-policy-tests-for-s390x.patch
-Patch304: libvirt-qemu-add-QEMU_CAPS_STORAGE_WERROR.patch
-Patch305: libvirt-qemu-use-QEMU_CAPS_STORAGE_WERROR-for-disk-error-attributes.patch
-Patch306: libvirt-qemuMonitorTestProcessCommandDefaultValidate-Output-validator-output-to-stderr.patch
-Patch307: libvirt-qemumonitorjsontest-AddNetdev-Use-real-variant.patch
-Patch308: libvirt-qemu-new-capabilities-flag-pcie-root-port.hotplug.patch
-Patch309: libvirt-conf-new-attribute-hotplug-for-pci-controllers.patch
-Patch310: libvirt-qemu-hook-up-pcie-root-port-hotplug-off-option.patch
-Patch311: libvirt-docs-mention-hotplug-off-in-news.xml.patch
-Patch312: libvirt-conf-add-new-PCI_CONNECT-flag-AUTOASSIGN.patch
-Patch313: libvirt-conf-qemu-s-VIR_PCI_CONNECT_HOTPLUGGABLE-VIR_PCI_CONNECT_AUTOASSIGN-g.patch
-Patch314: libvirt-conf-simplify-logic-when-checking-for-AUTOASSIGN-PCI-addresses.patch
-Patch315: libvirt-qemu-conf-set-HOTPLUGGABLE-connect-flag-during-PCI-address-set-init.patch
-Patch316: libvirt-conf-check-HOTPLUGGABLE-connect-flag-when-validating-a-PCI-address.patch
-Patch317: libvirt-conf-during-PCI-hotplug-require-that-the-controller-support-hotplug.patch
-Patch318: libvirt-qemu-fix-detection-of-vCPU-pids-when-multiple-dies-are-present.patch
-Patch319: libvirt-storage_file-create-Create-new-images-with-write-permission-bit.patch
-Patch320: libvirt-qemuBlockStorageSourceCreateFormat-Force-write-access-when-formatting-images.patch
-Patch321: libvirt-qemu-snapshot-Allow-snapshots-of-read-only-disks-when-we-can-create-them.patch
-Patch322: libvirt-qemu-blockcopy-Allow-copy-of-read-only-disks-with-blockdev.patch
-Patch323: libvirt-virDevMapperGetTargetsImpl-quit-early-if-device-is-not-a-devmapper-target.patch
-Patch324: libvirt-qemu-only-stop-external-devices-after-the-domain.patch
-Patch325: libvirt-qemu-fixing-auto-detecting-binary-in-domain-capabilities.patch
-Patch326: libvirt-qemu-prevent-attempts-to-detach-a-device-on-a-controller-with-hotplug-off.patch
-Patch327: libvirt-cpu-Change-control-flow-in-virCPUUpdateLive.patch
-Patch328: libvirt-cpu_x86-Prepare-virCPUx86UpdateLive-for-easier-extension.patch
-Patch329: libvirt-cpu-Honor-check-full-for-host-passthrough-CPUs.patch
-Patch330: libvirt-cputest-Add-data-for-Intel-R-Core-TM-i7-8550U-CPU-without-TSX.patch
-Patch331: libvirt-cpu_map-Add-more-noTSX-x86-CPU-models.patch
-Patch332: libvirt-cpu_map-Add-decode-element-to-x86-CPU-model-definitions.patch
-Patch333: libvirt-cpu_x86-Honor-CPU-models-decode-element.patch
-Patch334: libvirt-cpu_map-Don-t-use-new-noTSX-models-for-host-model-CPUs.patch
-Patch335: libvirt-cpu_x86-Drop-noTSX-hint-for-incompatible-CPUs.patch
-Patch336: libvirt-cpu_x86-Use-glib-allocation-for-virCPU-x86-Data.patch
-Patch337: libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Vendor.patch
-Patch338: libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Feature.patch
-Patch339: libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Model.patch
-Patch340: libvirt-cpu_x86-Use-glib-allocation-for-virCPUx86Map.patch
-Patch341: libvirt-cpu_x86-Use-glib-allocation-in-virCPUx86GetModels.patch
-Patch342: libvirt-cpu_x86-Use-g_auto-in-x86DataToCPU.patch
-Patch343: libvirt-cpu_x86-Use-g_auto-in-x86VendorParse.patch
-Patch344: libvirt-cpu_x86-Use-g_auto-in-x86FeatureParse.patch
-Patch345: libvirt-cpu_x86-Use-g_auto-in-x86ModelFromCPU.patch
-Patch346: libvirt-cpu_x86-Use-g_auto-in-x86ModelParse.patch
-Patch347: libvirt-cpu_x86-Use-g_auto-in-virCPUx86LoadMap.patch
-Patch348: libvirt-cpu_x86-Use-g_auto-in-virCPUx86DataParse.patch
-Patch349: libvirt-cpu_x86-Use-g_auto-in-x86Compute.patch
-Patch350: libvirt-cpu_x86-Use-g_auto-in-virCPUx86Compare.patch
-Patch351: libvirt-cpu_x86-Use-g_auto-in-x86Decode.patch
-Patch352: libvirt-cpu_x86-Use-g_auto-in-x86EncodePolicy.patch
-Patch353: libvirt-cpu_x86-Use-g_auto-in-x86Encode.patch
-Patch354: libvirt-cpu_x86-Use-g_auto-in-virCPUx86CheckFeature.patch
-Patch355: libvirt-cpu_x86-Use-g_auto-in-virCPUx86GetHost.patch
-Patch356: libvirt-cpu_x86-Use-g_auto-in-virCPUx86Baseline.patch
-Patch357: libvirt-cpu_x86-Use-g_auto-in-x86UpdateHostModel.patch
-Patch358: libvirt-cpu_x86-Use-g_auto-in-virCPUx86Update.patch
-Patch359: libvirt-cpu_x86-Use-g_auto-in-virCPUx86UpdateLive.patch
-Patch360: libvirt-cpu_x86-Use-g_auto-in-virCPUx86Translate.patch
-Patch361: libvirt-cpu_x86-Use-g_auto-in-virCPUx86ExpandFeatures.patch
-Patch362: libvirt-cpu_x86-Use-g_auto-in-virCPUx86CopyMigratable.patch
-Patch363: libvirt-cpu_x86-Move-and-rename-x86ModelCopySignatures.patch
-Patch364: libvirt-cpu_x86-Move-and-rename-x86ModelHasSignature.patch
-Patch365: libvirt-cpu_x86-Move-and-rename-x86FormatSignatures.patch
-Patch366: libvirt-cpu_x86-Introduce-virCPUx86SignaturesFree.patch
-Patch367: libvirt-cpu_x86-Introduce-virCPUx86SignatureFromCPUID.patch
-Patch368: libvirt-cpu_x86-Replace-32b-signatures-in-virCPUx86Model-with-a-struct.patch
-Patch369: libvirt-cpu_x86-Don-t-check-return-value-of-x86ModelCopy.patch
-Patch370: libvirt-cpu_x86-Add-support-for-stepping-part-of-CPU-signature.patch
-Patch371: libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Platinum-9242-CPU.patch
-Patch372: libvirt-cputest-Add-data-for-Intel-R-Xeon-R-Gold-6130-CPU.patch
-Patch373: libvirt-cpu_map-Distinguish-Cascadelake-Server-from-Skylake-Server.patch
-Patch374: libvirt-cputest-Add-data-for-Cooperlake-CPU.patch
-Patch375: libvirt-cpu_map-Add-pschange-mc-no-bit-in-IA32_ARCH_CAPABILITIES-MSR.patch
-Patch376: libvirt-cpu_map-Add-Cooperlake-x86-CPU-model.patch
-Patch377: libvirt-cpu_map-Distribute-x86_Cooperlake.xml.patch
-Patch378: libvirt-qemu-Refuse-to-use-ps2-on-machines-that-do-not-have-this-bus.patch
-Patch379: libvirt-nodedev-fix-race-in-API-usage-vs-initial-device-enumeration.patch
-Patch380: libvirt-qemu-backup-Fix-handling-of-backing-store-for-backup-target-images.patch
-Patch381: libvirt-qemu-backup-Split-up-code-traversing-checkpoint-list-looking-for-bitmaps.patch
-Patch382: libvirt-qemu-backup-Fix-backup-of-disk-skipped-in-an-intermediate-checkpoint.patch
-Patch383: libvirt-conf-backup-Store-incremental-backup-checkpoint-name-per-disk.patch
-Patch384: libvirt-qemu-backup-Move-fetching-of-checkpoint-list-for-incremental-backup.patch
-Patch385: libvirt-qemublocktest-Add-empty-test-case-for-bitmaps.patch
-Patch386: libvirt-qemublocktest-Add-empty-case-for-incremental-backup-test.patch
-Patch387: libvirt-qemublocktest-Add-empty-case-for-checkpoint-deletion.patch
-Patch388: libvirt-qemublocktest-Add-empty-case-for-blockcopy-bitmap-handling-test.patch
-Patch389: libvirt-qemublocktest-Add-empty-case-for-checkpoint-bitmap-handling.patch
-Patch390: libvirt-qemublocktest-Disable-testcases-for-all-bitmap-handling.patch
-Patch391: libvirt-qemublocktest-Delete-synthetic-bitmap-test-cases.patch
-Patch392: libvirt-qemublocktest-Extract-printing-of-nodename-list.patch
-Patch393: libvirt-qemu-checkpoint-Don-t-chain-bitmaps-for-checkpoints.patch
-Patch394: libvirt-qemublocktest-Replace-basic-bitmap-detection-test-case-data.patch
-Patch395: libvirt-qemublocktest-Replace-snapshots-bitmap-detection-test-case-data.patch
-Patch396: libvirt-qemuBlockBitmapChainIsValid-Adjust-to-new-semantics-of-bitmaps.patch
-Patch397: libvirt-qemublocktest-Re-add-bitmap-validation-for-basic-and-snapshots-cases.patch
-Patch398: libvirt-qemublocktest-Add-new-synthetic-bitmap-detection-and-validation-test-case.patch
-Patch399: libvirt-qemu-checkpoint-Don-t-merge-checkpoints-during-deletion.patch
-Patch400: libvirt-qemublocktest-Rename-TEST_CHECKPOINT_DELETE_MERGE-to-TEST_CHECKPOINT_DELETE.patch
-Patch401: libvirt-qemublocktest-Re-introduce-testing-of-checkpoint-deletion.patch
-Patch402: libvirt-qemu-block-Add-universal-helper-for-merging-dirty-bitmaps-for-all-scenarios.patch
-Patch403: libvirt-qemu-backup-Rewrite-backup-bitmap-handling-to-the-new-bitmap-semantics.patch
-Patch404: libvirt-qemublocktest-Add-basic-tests-for-backup-bitmap-handling.patch
-Patch405: libvirt-qemublocktest-Add-snapshots-tests-for-backup-bitmap-handling.patch
-Patch406: libvirt-qemu-Rewrite-bitmap-handling-for-block-commit.patch
-Patch407: libvirt-qemublocktest-Add-basic-tests-for-commit-bitmap-handling.patch
-Patch408: libvirt-qemublocktest-Add-snapshots-tests-for-block-commit-bitmap-handling.patch
-Patch409: libvirt-qemu-blockjob-Remove-disabledBitmapsBase-field-from-commit-job-private-data.patch
-Patch410: libvirt-qemu-Rewrite-bitmap-handling-for-block-copy.patch
-Patch411: libvirt-qemublocktest-Add-test-cases-for-handling-bitmaps-during-block-copy.patch
-Patch412: libvirt-kbase-Add-document-outlining-internals-of-incremental-backup-in-qemu.patch
-Patch413: libvirt-qemuBackupBegin-Don-t-leak-def-on-early-failures.patch
-Patch414: libvirt-qemu-backup-Initialize-store-source-properly-and-just-once.patch
-Patch415: libvirt-qemuBackupDiskStarted-Fix-improper-dereference-of-array.patch
-Patch416: libvirt-qemuBackupDiskDataCleanupOne-Don-t-exit-early-when-the-job-has-started.patch
-Patch417: libvirt-qemuBackupDiskDataCleanupOne-Free-incrementalBitmap.patch
-Patch418: libvirt-util-Move-virIsDevMapperDevice-to-virdevmapper.c.patch
-Patch419: libvirt-virDevMapperGetTargetsImpl-Check-for-dm-major-properly.patch
-Patch420: libvirt-conf-Don-t-format-http-cookies-unless-VIR_DOMAIN_DEF_FORMAT_SECURE-is-used.patch
-Patch421: libvirt-util-Introduce-a-parser-for-kernel-cmdline-arguments.patch
-Patch422: libvirt-qemu-Check-if-s390-secure-guest-support-is-enabled.patch
-Patch423: libvirt-qemu-Check-if-AMD-secure-guest-support-is-enabled.patch
-Patch424: libvirt-tools-Secure-guest-check-on-s390-in-virt-host-validate.patch
-Patch425: libvirt-tools-Secure-guest-check-for-AMD-in-virt-host-validate.patch
-Patch426: libvirt-docs-Update-AMD-launch-secure-description.patch
-Patch427: libvirt-docs-Describe-protected-virtualization-guest-setup.patch
-Patch428: libvirt-qemu-blockjob-Don-t-base-bitmap-handling-of-active-layer-block-commit-on-QEMU_CAPS_BLOCKDEV_REOPEN.patch
-Patch429: libvirt-qemu-blockjob-Actually-delete-temporary-bitmap-on-failed-active-commit.patch
-Patch430: libvirt-qemu-block-Remove-active-write-bitmap-even-if-there-are-no-bitmaps-to-merge.patch
-Patch431: libvirt-qemuDomainBlockPivot-Rename-actions-to-bitmapactions.patch
-Patch432: libvirt-qemuDomainBlockPivot-Ignore-failures-of-creating-active-layer-bitmap.patch
-Patch433: libvirt-src-assume-sys-sysmacros.h-always-exists-on-Linux.patch
-Patch434: libvirt-virdevmapper.c-Join-two-WITH_DEVMAPPER-sections-together.patch
-Patch435: libvirt-virDevMapperGetTargetsImpl-Use-VIR_AUTOSTRINGLIST.patch
-Patch436: libvirt-virdevmapper-Don-t-use-libdevmapper-to-obtain-dependencies.patch
-Patch437: libvirt-virDevMapperGetTargets-Don-t-ignore-EBADF.patch
-Patch438: libvirt-virdevmapper-Don-t-cache-device-mapper-major.patch
-Patch439: libvirt-virdevmapper-Handle-kernel-without-device-mapper-support.patch
-Patch440: libvirt-virdevmapper-Ignore-all-errors-when-opening-dev-mapper-control.patch
-Patch441: libvirt-qemu-substitute-missing-model-name-for-host-passthrough.patch
-Patch442: libvirt-rpc-gendispatch-handle-empty-flags.patch
-Patch443: libvirt-rpc-add-support-for-filtering-acls-by-uint-params.patch
-Patch444: libvirt-rpc-require-write-acl-for-guest-agent-in-virDomainInterfaceAddresses.patch
-Patch445: libvirt-qemu-agent-set-ifname-to-NULL-after-freeing.patch
-Patch446: libvirt-qemu-Fix-domfsinfo-for-non-PCI-device-information-from-guest-agent.patch
-Patch447: libvirt-virDomainNetFindIdx-add-support-for-CCW-addresses.patch
-Patch448: libvirt-check-for-NULL-before-calling-g_regex_unref.patch
-Patch449: libvirt-virhostcpu.c-fix-die_id-parsing-for-Power-hosts.patch
-Patch450: libvirt-qemuFirmwareFillDomain-Fill-NVRAM-template-on-migration-too.patch
-Patch451: libvirt-node_device-refactor-udevProcessCCW.patch
-Patch452: libvirt-node_device-detect-CSS-devices.patch
-Patch453: libvirt-virsh-nodedev-ability-to-filter-CSS-capabilities.patch
-Patch454: libvirt-node_device-detect-DASD-devices.patch
-Patch455: libvirt-udevProcessCSS-Check-if-def-driver-is-non-NULL.patch
-Patch456: libvirt-cpu_map-Add-missing-x86-features-in-0x7-CPUID-leaf.patch
-Patch457: libvirt-cpu_map-Add-missing-x86-features-in-0x80000008-CPUID-leaf.patch
-Patch458: libvirt-cpu_map-Add-missing-AMD-SVM-features.patch
-Patch459: libvirt-Add-testdata-for-AMD-EPYC-7502.patch
-Patch460: libvirt-cpu_map-Defined-and-enable-EPYC-Rome-model.patch
-Patch461: libvirt-cpu_map-Remove-monitor-feature-from-EPYC-Rome.patch
-Patch462: libvirt-tests-qemuxml2argv-Use-existing-machine-type-for-numatune-distances-case.patch
-Patch463: libvirt-qemuxml2xmltest-Add-numatune-distance-test-case.patch
-Patch464: libvirt-conf-Move-and-rename-virDomainParseScaledValue.patch
-Patch465: libvirt-numa_conf-Drop-CPU-from-name-of-two-functions.patch
-Patch466: libvirt-qemu_command-Rename-qemuBuildNumaArgStr.patch
-Patch467: libvirt-qemuBuildMachineCommandLine-Drop-needless-check.patch
-Patch468: libvirt-numa_conf-Make-virDomainNumaSetNodeCpumask-return-void.patch
-Patch469: libvirt-Allow-NUMA-nodes-without-vCPUs.patch
-Patch470: libvirt-conf-Parse-and-format-HMAT.patch
-Patch471: libvirt-conf-Validate-NUMA-HMAT-configuration.patch
-Patch472: libvirt-numa-expose-HMAT-APIs.patch
-Patch473: libvirt-qemu-Introduce-QEMU_CAPS_NUMA_HMAT-capability.patch
-Patch474: libvirt-qemu-Build-HMAT-command-line.patch
-Patch475: libvirt-qemuBuildNumaCommandLine-Fix-masterInitiator-check.patch
-Patch476: libvirt-numa_conf-Properly-check-for-caches-in-virDomainNumaDefValidate.patch
-Patch477: libvirt-RNG-Allow-interleaving-of-domain-cpu-numa-cell-children.patch
-Patch478: libvirt-conf-properly-clear-out-autogenerated-macvtap-names-when-formatting-parsing.patch
-Patch479: libvirt-qemu-format-ramfb-attribute-for-mediated-devices.patch
-Patch480: libvirt-util-replace-macvtap-name-reservation-bitmap-with-a-simple-counter.patch
-Patch481: libvirt-util-assign-tap-device-names-using-a-monotonically-increasing-integer.patch
-Patch482: libvirt-util-virNetDevTapCreate-initialize-fd-to-1.patch
-Patch483: libvirt-cpu_map-Fix-Icelake-Server-model-number.patch
-Patch484: libvirt-cputestdata-Add-test-data-for-Snowridge.patch
-Patch485: libvirt-cpu_map-Add-support-for-fsrm-CPU-feature.patch
-Patch486: libvirt-cpu_map-Add-support-for-core-capability-CPU-feature.patch
-Patch487: libvirt-cpu_map-Add-support-for-split-lock-detect-CPU-feature.patch
-Patch488: libvirt-cpu_map-Define-and-enable-Snowridge-model.patch
-Patch489: libvirt-util-fix-typo-in-VIR_MOCK_WRAP_RET_ARGS.patch
-Patch490: libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-in-unit-tests.patch
-Patch491: libvirt-util-tests-enable-locking-on-iptables-ebtables-commandlines-by-default.patch
-Patch492: libvirt-tests-fix-iptables-test-case-commandline-options-in-virfirewalltest.c.patch
-Patch493: libvirt-network-be-more-verbose-about-the-reason-for-a-firewall-reload.patch
-Patch494: libvirt-util-always-check-for-ebtables-iptables-binaries-even-when-using-firewalld.patch
-Patch495: libvirt-util-synchronize-with-firewalld-before-we-start-calling-iptables-directly.patch
-Patch496: libvirt-util-call-iptables-directly-rather-than-via-firewalld.patch
-Patch497: libvirt-util-virhostcpu-Fail-when-fetching-CPU-Stats-for-invalid-cpu.patch
-Patch498: libvirt-qemu-move-cgroup-cpu-period-and-quota-defines-to-vircgroup.h.patch
-Patch499: libvirt-vircgroupv1-use-defines-for-cpu-period-and-quota-limits.patch
-Patch500: libvirt-vircgroupv2-use-defines-for-cpu-period-and-quota-limits.patch
-Patch501: libvirt-vircgroup-fix-cpu-quota-maximum-limit.patch
-Patch502: libvirt-util-add-virNetDevGetPhysPortName.patch
-Patch503: libvirt-util-avoid-manual-VIR_FREE-of-a-g_autofree-pointer-in-virPCIGetName.patch
-Patch504: libvirt-util-Add-phys_port_name-support-on-virPCIGetNetName.patch
-Patch505: libvirt-vircgroupv2-properly-detect-placement-of-running-VM.patch
-Patch506: libvirt-virsystemd-export-virSystemdHasMachined.patch
-Patch507: libvirt-virsystemd-introduce-virSystemdGetMachineByPID.patch
-Patch508: libvirt-virsystemd-introduce-virSystemdGetMachineUnitByPID.patch
-Patch509: libvirt-vircgroup-use-DBus-call-to-systemd-for-some-APIs.patch
-Patch510: libvirt-vircgroupv1-refactor-virCgroupV1DetectPlacement.patch
-Patch511: libvirt-vircgroupv2-move-task-into-cgroup-before-enabling-controllers.patch
-Patch512: libvirt-vircgroup-introduce-virCgroupV1Exists-and-virCgroupV2Exists.patch
-Patch513: libvirt-vircgroup-introduce-nested-cgroup-to-properly-work-with-systemd.patch
-Patch514: libvirt-tests-add-cgroup-nested-tests.patch
-Patch515: libvirt-vircgroup-correctly-free-nested-virCgroupPtr.patch
-Patch516: libvirt-qemu-Add-virtio-related-options-to-vsock.patch
-Patch517: libvirt-domain_validate-use-defines-for-cpu-period-and-quota-limits.patch
-Patch518: libvirt-docs-use-proper-cpu-quota-value-in-our-documentation.patch
-Patch519: libvirt-vircgroup-enforce-range-limit-for-cpu.shares.patch
-Patch520: libvirt-cgroup-use-virCgroupSetCpuShares-instead-of-virCgroupSetupCpuShares.patch
-Patch521: libvirt-cpumap-Add-support-for-ibrs-CPU-feature.patch
-Patch522: libvirt-cpumap-Add-support-for-svme-addr-check-CPU-feature.patch
-Patch523: libvirt-cpu_map-Add-EPYC-Milan-x86-CPU-model.patch
-Patch524: libvirt-cpu_map-Install-x86_EPYC-Milan.xml.patch
-Patch525: libvirt-cpu_map-Fix-spelling-of-svme-addr-chk-feature.patch
-Patch526: libvirt-network-make-it-safe-to-call-networkSetupPrivateChains-multiple-times.patch
-Patch527: libvirt-network-force-re-creation-of-iptables-private-chains-on-firewalld-restart.patch
-Patch528: libvirt-hostdev-Update-mdev-pointer-reference-after-checking-device-type.patch
-Patch529: libvirt-hostdev-mdev-Lookup-mdevs-by-sysfs-path-rather-than-mdev-struct.patch
-Patch530: libvirt-qemu_firmware-don-t-error-out-for-unknown-firmware-features.patch
-Patch531: libvirt-docs-improve-description-of-secure-attribute-for-loader-element.patch
-Patch532: libvirt-conf-introduce-virDomainDefParseBootInitOptions.patch
-Patch533: libvirt-conf-introduce-virDomainDefParseBootKernelOptions.patch
-Patch534: libvirt-conf-introduce-virDomainDefParseBootFirmwareOptions.patch
-Patch535: libvirt-conf-introduce-virDomainDefParseBootLoaderOptions.patch
-Patch536: libvirt-conf-introduce-virDomainDefParseBootAcpiOptions.patch
-Patch537: libvirt-conf-use-switch-in-virDomainDefParseBootOptions.patch
-Patch538: libvirt-conf-introduce-support-for-firmware-auto-selection-feature-filtering.patch
-Patch539: libvirt-qemu-implement-support-for-firmware-auto-selection-feature-filtering.patch
-Patch540: libvirt-domain_conf-Don-t-leak-def-os.firmwareFeatures.patch
-Patch541: libvirt-conf-remove-duplicated-firmware-type-attribute.patch
-Patch542: libvirt-security-fix-SELinux-label-generation-logic.patch
-Patch543: libvirt-storage_driver-Unlock-object-on-ACL-fail-in-storagePoolLookupByTargetPath.patch
+Patch6: libvirt-RHEL-virscsi-Check-device-type-before-getting-it-s-dev-node-name.patch
+Patch7: libvirt-RHEL-virscsi-Support-TAPEs-in-virSCSIDeviceGetDevName.patch
+Patch8: libvirt-RHEL-virscsi-Introduce-and-use-virSCSIDeviceGetUnprivSGIOSysfsPath.patch
+Patch9: libvirt-RHEL-virutil-Accept-non-block-devices-in-virGetDeviceID.patch
+Patch10: libvirt-RHEL-Enable-usage-of-x-blockdev-reopen.patch
+Patch11: libvirt-Revert-report-error-when-virProcessGetStatInfo-is-unable-to-parse-data.patch
+Patch12: libvirt-qemu-fix-inactive-snapshot-revert.patch
+Patch13: libvirt-qemuDomainSetupDisk-Initialize-targetPaths.patch
+Patch14: libvirt-RHEL-Remove-glib-2.64.0-workaround-for-GSource-race.patch
+Patch15: libvirt-qemu_command-Generate-memory-only-after-controllers.patch
+Patch16: libvirt-qemu-Validate-domain-definition-even-on-migration.patch
+Patch17: libvirt-node_device-Rework-udevKludgeStorageType.patch
+Patch18: libvirt-node_device-Treat-NVMe-disks-as-regular-disks.patch
 
 Requires: libvirt-daemon = %{version}-%{release}
 Requires: libvirt-daemon-config-network = %{version}-%{release}
@@ -803,41 +269,25 @@ 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
-%endif
-%if 0%{?rhel} == 7
-BuildRequires: python36-docutils
-%else
 BuildRequires: python3-docutils
-%endif
 BuildRequires: gcc
+BuildRequires: meson >= 0.54.0
+BuildRequires: ninja-build
 BuildRequires: git
-%if 0%{?fedora} || 0%{?rhel} > 7
 BuildRequires: perl-interpreter
-%else
-BuildRequires: perl
-%endif
-%if 0%{?rhel} > 7
+%if 0%{?rhel} == 8
 BuildRequires: python3-devel
 %else
 BuildRequires: python3
 %endif
-BuildRequires: systemd-units
 %if %{with_libxl}
 BuildRequires: xen-devel
 %endif
-BuildRequires: glib2-devel >= 2.48
+BuildRequires: glib2-devel >= 2.56
 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
 BuildRequires: gnutls-devel
@@ -852,12 +302,11 @@ BuildRequires: yajl-devel
 %if %{with_sanlock}
 BuildRequires: sanlock-devel >= 2.4
 %endif
-BuildRequires: libpcap-devel
+BuildRequires: libpcap-devel >= 1.5.0
 BuildRequires: libnl3-devel
 BuildRequires: libselinux-devel
 BuildRequires: dnsmasq >= 2.41
 BuildRequires: iptables
-BuildRequires: radvd
 BuildRequires: ebtables
 BuildRequires: module-init-tools
 BuildRequires: cyrus-sasl-devel
@@ -882,16 +331,9 @@ BuildRequires: libiscsi-devel
 BuildRequires: parted-devel
 # For Multipath support
 BuildRequires: device-mapper-devel
-# For XFS reflink clone support
-BuildRequires: xfsprogs-devel
 %if %{with_storage_rbd}
-    %if 0%{?fedora} || 0%{?rhel} > 7
 BuildRequires: librados-devel
 BuildRequires: librbd-devel
-    %else
-BuildRequires: librados2-devel
-BuildRequires: librbd1-devel
-    %endif
 %endif
 %if %{with_storage_gluster}
 BuildRequires: glusterfs-api-devel >= 3.4.1
@@ -900,12 +342,6 @@ BuildRequires: glusterfs-devel >= 3.4.1
 %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
@@ -917,13 +353,14 @@ BuildRequires: fuse-devel >= 2.8.6
 %if %{with_libssh2}
 BuildRequires: libssh2-devel >= 1.3.0
 %endif
-
+%if %{with_netcf}
 BuildRequires: netcf-devel >= 0.2.2
+%endif
 %if %{with_esx}
 BuildRequires: libcurl-devel
 %endif
 %if %{with_hyperv}
-BuildRequires: libwsman-devel >= 2.2.3
+BuildRequires: libwsman-devel >= 2.6.3
 %endif
 BuildRequires: audit-libs-devel
 # we need /usr/sbin/dtrace
@@ -934,9 +371,6 @@ 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
 
@@ -948,24 +382,21 @@ BuildRequires: numad
 %endif
 
 %if %{with_wireshark}
-BuildRequires: wireshark-devel >= 2.4.0
+BuildRequires: wireshark-devel
 %endif
 
 %if %{with_libssh}
 BuildRequires: libssh-devel >= 0.7.0
 %endif
 
-%if 0%{?fedora} || 0%{?rhel} > 7
 BuildRequires: rpcgen
 BuildRequires: libtirpc-devel
-%endif
 
+# Needed for the firewalld_reload macro
 %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
@@ -987,29 +418,28 @@ Summary: Server side daemon and supporting files for libvirt library
 # The client side, i.e. shared libs are in a subpackage
 Requires: %{name}-libs = %{version}-%{release}
 
-# (client invokes 'nc' against the UNIX socket on the server)
-Requires: /usr/bin/nc
+# netcat is needed on the server side so that clients that have
+# libvirt < 6.9.0 can connect, but newer versions will prefer
+# virt-ssh-helper. Making this a Recommends means that it gets
+# installed by default, but can still be removed if compatibility
+# with old clients is not required
+Recommends: /usr/bin/nc
 
 # for modprobe of pci devices
 Requires: module-init-tools
 
-# for /sbin/ip & /sbin/tc
+# for /sbin/ip
 Requires: iproute
-# tc is provided by iproute-tc since at least Fedora 26
-%if 0%{?fedora} || 0%{?rhel} > 7
+# for /sbin/tc
 Requires: iproute-tc
-%endif
 
 Requires: polkit >= 0.112
-%ifarch %{ix86} x86_64 ia64
+%if %{with_dmidecode}
 # For virConnectGetSysinfo
 Requires: dmidecode
 %endif
 # For service management
-Requires(post): systemd-units
-Requires(post): systemd-sysv
-Requires(preun): systemd-units
-Requires(postun): systemd-units
+Requires(post): /usr/bin/systemctl
 %if %{with_numad}
 Requires: numad
 %endif
@@ -1017,6 +447,13 @@ Requires: numad
 Requires: dbus
 # For uid creation during pre
 Requires(pre): shadow-utils
+# Needed by /usr/libexec/libvirt-guests.sh script.
+Requires: gettext
+
+# Ensure smooth upgrades
+Obsoletes: libvirt-admin < 7.3.0
+Provides: libvirt-admin = %{version}-%{release}
+Obsoletes: libvirt-bash-completion < 7.3.0
 
 %description daemon
 Server side daemon required to manage the virtualization capabilities
@@ -1046,7 +483,6 @@ 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
 
 %description daemon-driver-network
@@ -1074,6 +510,8 @@ Requires: libvirt-daemon = %{version}-%{release}
 Requires: libvirt-libs = %{version}-%{release}
 # needed for device enumeration
 Requires: systemd >= 185
+# For managing persistent mediated devices
+Requires: mdevctl
 
 %description daemon-driver-nodedev
 The nodedev driver plugin for the libvirtd daemon, providing
@@ -1085,13 +523,13 @@ capabilities.
 Summary: Interface driver plugin for the libvirtd daemon
 Requires: libvirt-daemon = %{version}-%{release}
 Requires: libvirt-libs = %{version}-%{release}
+%if %{with_netcf}
 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
-
+an implementation of the host network interface APIs.
 
 %package daemon-driver-secret
 Summary: Secret driver plugin for the libvirtd daemon
@@ -1171,7 +609,6 @@ volumes using the host iscsi stack.
 Summary: Storage driver plugin for iscsi-direct
 Requires: libvirt-daemon-driver-storage-core = %{version}-%{release}
 Requires: libvirt-libs = %{version}-%{release}
-Requires: libiscsi
 
 %description daemon-driver-storage-iscsi-direct
 The storage driver backend adding implementation of the storage APIs for iscsi
@@ -1289,9 +726,8 @@ Requires: gzip
 Requires: bzip2
 Requires: lzop
 Requires: xz
-    %if 0%{?fedora} || 0%{?rhel} > 7
 Requires: systemd-container
-    %endif
+Requires: swtpm-tools
 
 %description daemon-driver-qemu
 The qemu driver plugin for the libvirtd daemon, providing
@@ -1307,9 +743,7 @@ 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
@@ -1447,15 +881,11 @@ capabilities of VirtualBox
 %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_bash_completion}
-Requires: %{name}-bash-completion = %{version}-%{release}
-%endif
+
+# Ensure smooth upgrades
+Obsoletes: libvirt-bash-completion < 7.3.0
 
 %description client
 The client binaries needed to access the virtualization
@@ -1472,29 +902,10 @@ 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 >= 2.4.0
+Requires: wireshark
 Requires: %{name}-libs = %{version}-%{release}
 
 %description wireshark
@@ -1556,7 +967,7 @@ while read lnk target; do
     fi
 done <%{_sourcedir}/symlinks || exit 1
 git add .
-git commit -q -a --author 'rpm-build <rpm-build>' -m symlinks
+git commit -q -a --allow-empty --author 'rpm-build <rpm-build>' -m symlinks
 
 
 git config gc.auto 0
@@ -1564,225 +975,249 @@ git config gc.auto 0
 %autopatch
 
 %build
+%if 0%{?fedora} >= %{min_fedora} || 0%{?rhel} >= %{min_rhel}
+    %define supported_platform 1
+%else
+    %define supported_platform 0
+%endif
+
 %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
+    %define arg_qemu -Ddriver_qemu=enabled
 %else
-    %define arg_qemu --without-qemu
+    %define arg_qemu -Ddriver_qemu=disabled
 %endif
 
 %if %{with_openvz}
-    %define arg_openvz --with-openvz
+    %define arg_openvz -Ddriver_openvz=enabled
 %else
-    %define arg_openvz --without-openvz
+    %define arg_openvz -Ddriver_openvz=disabled
 %endif
 
 %if %{with_lxc}
-    %define arg_lxc --with-lxc
-    %define arg_login_shell --with-login-shell
+    %define arg_lxc -Ddriver_lxc=enabled
+    %define arg_login_shell -Dlogin_shell=enabled
 %else
-    %define arg_lxc --without-lxc
-    %define arg_login_shell --without-login-shell
+    %define arg_lxc -Ddriver_lxc=disabled
+    %define arg_login_shell -Dlogin_shell=disabled
 %endif
 
 %if %{with_vbox}
-    %define arg_vbox --with-vbox
+    %define arg_vbox -Ddriver_vbox=enabled
 %else
-    %define arg_vbox --without-vbox
+    %define arg_vbox -Ddriver_vbox=disabled
 %endif
 
 %if %{with_libxl}
-    %define arg_libxl --with-libxl
+    %define arg_libxl -Ddriver_libxl=enabled
 %else
-    %define arg_libxl --without-libxl
+    %define arg_libxl -Ddriver_libxl=disabled
 %endif
 
 %if %{with_esx}
-    %define arg_esx --with-esx
+    %define arg_esx -Ddriver_esx=enabled -Dcurl=enabled
 %else
-    %define arg_esx --without-esx
+    %define arg_esx -Ddriver_esx=disabled -Dcurl=disabled
 %endif
 
 %if %{with_hyperv}
-    %define arg_hyperv --with-hyperv
+    %define arg_hyperv -Ddriver_hyperv=enabled -Dopenwsman=enabled
 %else
-    %define arg_hyperv --without-hyperv
+    %define arg_hyperv -Ddriver_hyperv=disabled -Dopenwsman=disabled
 %endif
 
 %if %{with_vmware}
-    %define arg_vmware --with-vmware
+    %define arg_vmware -Ddriver_vmware=enabled
 %else
-    %define arg_vmware --without-vmware
+    %define arg_vmware -Ddriver_vmware=disabled
 %endif
 
 %if %{with_storage_rbd}
-    %define arg_storage_rbd --with-storage-rbd
+    %define arg_storage_rbd -Dstorage_rbd=enabled
 %else
-    %define arg_storage_rbd --without-storage-rbd
+    %define arg_storage_rbd -Dstorage_rbd=disabled
 %endif
 
 %if %{with_storage_sheepdog}
-    %define arg_storage_sheepdog --with-storage-sheepdog
+    %define arg_storage_sheepdog -Dstorage_sheepdog=enabled
 %else
-    %define arg_storage_sheepdog --without-storage-sheepdog
+    %define arg_storage_sheepdog -Dstorage_sheepdog=disabled
 %endif
 
 %if %{with_storage_gluster}
-    %define arg_storage_gluster --with-storage-gluster
+    %define arg_storage_gluster -Dstorage_gluster=enabled -Dglusterfs=enabled
 %else
-    %define arg_storage_gluster --without-storage-gluster
+    %define arg_storage_gluster -Dstorage_gluster=disabled -Dglusterfs=disabled
 %endif
 
 %if %{with_storage_zfs}
-    %define arg_storage_zfs --with-storage-zfs
+    %define arg_storage_zfs -Dstorage_zfs=enabled
 %else
-    %define arg_storage_zfs --without-storage-zfs
+    %define arg_storage_zfs -Dstorage_zfs=disabled
 %endif
 
 %if %{with_numactl}
-    %define arg_numactl --with-numactl
+    %define arg_numactl -Dnumactl=enabled
 %else
-    %define arg_numactl --without-numactl
+    %define arg_numactl -Dnumactl=disabled
 %endif
 
 %if %{with_numad}
-    %define arg_numad --with-numad
+    %define arg_numad -Dnumad=enabled
 %else
-    %define arg_numad --without-numad
+    %define arg_numad -Dnumad=disabled
 %endif
 
 %if %{with_fuse}
-    %define arg_fuse --with-fuse
+    %define arg_fuse -Dfuse=enabled
 %else
-    %define arg_fuse --without-fuse
+    %define arg_fuse -Dfuse=disabled
 %endif
 
 %if %{with_sanlock}
-    %define arg_sanlock --with-sanlock
+    %define arg_sanlock -Dsanlock=enabled
 %else
-    %define arg_sanlock --without-sanlock
-%endif
-
-%if %{with_firewalld}
-    %define arg_firewalld --with-firewalld
-%else
-    %define arg_firewalld --without-firewalld
+    %define arg_sanlock -Dsanlock=disabled
 %endif
 
 %if %{with_firewalld_zone}
-    %define arg_firewalld_zone --with-firewalld-zone
+    %define arg_firewalld_zone -Dfirewalld_zone=enabled
 %else
-    %define arg_firewalld_zone --without-firewalld-zone
+    %define arg_firewalld_zone -Dfirewalld_zone=disabled
+%endif
+
+%if %{with_netcf}
+    %define arg_netcf -Dnetcf=enabled
+%else
+    %define arg_netcf -Dnetcf=disabled
 %endif
 
 %if %{with_wireshark}
-    %define arg_wireshark --with-wireshark-dissector
+    %define arg_wireshark -Dwireshark_dissector=enabled
 %else
-    %define arg_wireshark --without-wireshark-dissector
+    %define arg_wireshark -Dwireshark_dissector=disabled
 %endif
 
 %if %{with_storage_iscsi_direct}
-    %define arg_storage_iscsi_direct --with-storage-iscsi-direct
+    %define arg_storage_iscsi_direct -Dstorage_iscsi_direct=enabled -Dlibiscsi=enabled
 %else
-    %define arg_storage_iscsi_direct --without-storage-iscsi-direct
+    %define arg_storage_iscsi_direct -Dstorage_iscsi_direct=disabled -Dlibiscsi=disabled
+%endif
+
+%if %{with_libssh}
+    %define arg_libssh -Dlibssh=enabled
+%else
+    %define arg_libssh -Dlibssh=disabled
+%endif
+
+%if %{with_libssh2}
+    %define arg_libssh2 -Dlibssh2=enabled
+%else
+    %define arg_libssh2 -Dlibssh2=disabled
+%endif
+
+%if %{with_modular_daemons}
+    %define arg_remote_mode -Dremote_default_mode=direct
+%else
+    %define arg_remote_mode -Dremote_default_mode=legacy
 %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}"
+%define arg_packager -Dpackager="%{who}, %{when}, %{where}"
+%define arg_packager_version -Dpackager_version="%{release}"
 
-%define arg_selinux_mount --with-selinux-mount="/sys/fs/selinux"
+%define arg_selinux_mount -Dselinux_mount="/sys/fs/selinux"
 
 # 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
-
-%define _configure ../configure
-mkdir %{_vpath_builddir}
-cd %{_vpath_builddir}
-
-%configure --enable-dependency-tracking \
-           --with-runstatedir=%{_rundir} \
+%meson \
+           -Drunstatedir=%{_rundir} \
            %{?arg_qemu} \
            %{?arg_openvz} \
            %{?arg_lxc} \
            %{?arg_vbox} \
            %{?arg_libxl} \
-           --with-sasl \
-           --with-polkit \
-           --with-libvirtd \
+           -Dsasl=enabled \
+           -Dpolkit=enabled \
+           -Ddriver_libvirtd=enabled \
+           -Ddriver_remote=enabled \
+           -Ddriver_test=enabled \
            %{?arg_esx} \
            %{?arg_hyperv} \
            %{?arg_vmware} \
-           --without-vz \
-           --without-bhyve \
-           --with-remote-default-mode=legacy \
-           --with-interface \
-           --with-network \
-           --with-storage-fs \
-           --with-storage-lvm \
-           --with-storage-iscsi \
+           -Ddriver_vz=disabled \
+           -Ddriver_bhyve=disabled \
+           -Ddriver_ch=disabled \
+           %{?arg_remote_mode} \
+           -Ddriver_interface=enabled \
+           -Ddriver_network=enabled \
+           -Dstorage_fs=enabled \
+           -Dstorage_lvm=enabled \
+           -Dstorage_iscsi=enabled \
            %{?arg_storage_iscsi_direct} \
-           --with-storage-scsi \
-           --with-storage-disk \
-           --with-storage-mpath \
+           -Dstorage_scsi=enabled \
+           -Dstorage_disk=enabled \
+           -Dstorage_mpath=enabled \
            %{?arg_storage_rbd} \
            %{?arg_storage_sheepdog} \
            %{?arg_storage_gluster} \
            %{?arg_storage_zfs} \
-           --without-storage-vstorage \
+           -Dstorage_vstorage=disabled \
            %{?arg_numactl} \
            %{?arg_numad} \
-           --with-capng \
+           -Dcapng=enabled \
            %{?arg_fuse} \
-           --with-netcf \
-           --with-selinux \
+           %{?arg_netcf} \
+           -Dselinux=enabled \
            %{?arg_selinux_mount} \
-           --without-apparmor \
-           --without-hal \
-           --with-udev \
-           --with-yajl \
+           -Dapparmor=disabled \
+           -Dapparmor_profiles=disabled \
+           -Dsecdriver_apparmor=disabled \
+           -Dudev=enabled \
+           -Dyajl=enabled \
            %{?arg_sanlock} \
-           --with-libpcap \
-           --with-macvtap \
-           --with-audit \
-           --with-dtrace \
-           --with-driver-modules \
-           %{?arg_firewalld} \
+           -Dlibpcap=enabled \
+           -Dlibnl=enabled \
+           -Daudit=enabled \
+           -Ddtrace=enabled \
+           -Dfirewalld=enabled \
            %{?arg_firewalld_zone} \
            %{?arg_wireshark} \
-           --without-pm-utils \
-           --with-nss-plugin \
+           %{?arg_libssh} \
+           %{?arg_libssh2} \
+           -Dpm_utils=disabled \
+           -Dnss=enabled \
            %{arg_packager} \
            %{arg_packager_version} \
-           --with-qemu-user=%{qemu_user} \
-           --with-qemu-group=%{qemu_group} \
-           --with-tls-priority=%{tls_priority} \
+           -Dqemu_user=%{qemu_user} \
+           -Dqemu_group=%{qemu_group} \
+           -Dqemu_moddir=%{qemu_moddir} \
+           -Dqemu_datadir=%{qemu_datadir} \
+           -Dtls_priority=%{tls_priority} \
            %{?enable_werror} \
-           --enable-expensive-tests \
-           --with-init-script=systemd \
+           -Dexpensive_tests=enabled \
+           -Dinit_script=systemd \
+           -Ddocs=enabled \
+           -Dtests=enabled \
+           -Drpath=disabled \
            %{?arg_login_shell}
-make %{?_smp_mflags} V=1
+
+%meson_build
 
 %install
 rm -fr %{buildroot}
 
 export SOURCE_DATE_EPOCH=$(stat --printf='%Y' %{_specdir}/%{name}.spec)
 
-cd %{_vpath_builddir}
-%make_install %{?_smp_mflags} SYSTEMD_UNIT_DIR=%{_unitdir} V=1
+%meson_install
 
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
@@ -1798,8 +1233,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/libvirt/storage-file/*.a
 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
+# 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/
@@ -1808,7 +1242,7 @@ cp $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml \
 # libvirt saves this file with mode 0600
 chmod 0600 $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
 
-# nwfilter files are installed in /usr/share/libvirt and copied to /etc in %post
+# 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 \
@@ -1816,8 +1250,6 @@ cp -a $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter/*.xml \
 # 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
@@ -1852,7 +1284,7 @@ rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_libxl.aug
 # Copied into libvirt-docs subpackage eventually
 mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt libvirt-docs
 
-%ifarch %{power64} s390x x86_64 ia64 alpha sparc64
+%ifarch %{arches_systemtap_64bit}
 mv $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_probes.stp \
    $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_probes-64.stp
 
@@ -1863,30 +1295,36 @@ mv $RPM_BUILD_ROOT%{_datadir}/systemtap/tapset/libvirt_qemu_probes.stp \
 %endif
 
 %check
-# The gnulib's test test-nonblocking-pipe.sh depends on timing and fails
-# on AArch64. Let's just disable it until we get rid of gnulib completely.
-for t in gnulib/tests/test-nonblocking-pipe.sh; do
-    rm -f $t
-    printf '#!/bin/sh\nexit 77\n' > $t
-    chmod a+x $t
-done
+# Building on slow archs, like emulated s390x in Fedora copr, requires
+# raising the test timeout
+VIR_TEST_DEBUG=1 %meson_test --no-suite syntax-check --timeout-multiplier 10
 
-cd %{_vpath_builddir}
-if ! make %{?_smp_mflags} check VIR_TEST_DEBUG=1
-then
-  cat tests/test-suite.log || true
-  exit 1
-fi
+%define libvirt_daemon_schedule_restart() mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || : \
+/bin/systemctl is-active %1.service 1>/dev/null 2>&1 && \
+  touch %{_localstatedir}/lib/rpm-state/libvirt/restart-%1 || :
 
-%post libs
-%if 0%{?rhel} == 7
-/sbin/ldconfig
-%endif
+%define libvirt_daemon_finish_restart() rm -f %{_localstatedir}/lib/rpm-state/libvirt/restart-%1 \
+rmdir %{_localstatedir}/lib/rpm-state/libvirt 2>/dev/null || :
 
-%postun libs
-%if 0%{?rhel} == 7
-/sbin/ldconfig
-%endif
+%define libvirt_daemon_needs_restart() -f %{_localstatedir}/lib/rpm-state/libvirt/restart-%1
+
+%define libvirt_daemon_perform_restart() if test %libvirt_daemon_needs_restart %1 \
+then \
+  /bin/systemctl try-restart %1.service >/dev/null 2>&1 || : \
+fi \
+%libvirt_daemon_finish_restart %1
+
+# For daemons with only UNIX sockets
+%define libvirt_daemon_systemd_post() %systemd_post %1.socket %1-ro.socket %1-admin.socket %1.service
+%define libvirt_daemon_systemd_preun() %systemd_preun %1.service %1-ro.socket %1-admin.socket %1.socket
+
+# For daemons with UNIX and INET sockets
+%define libvirt_daemon_systemd_post_inet() %systemd_post %1.socket %1-ro.socket %1-admin.socket %1-tls.socket %1-tcp.socket %1.service
+%define libvirt_daemon_systemd_preun_inet() %systemd_preun %1.service %1-ro.socket %1-admin.socket %1-tls.socket %1-tcp.socket %1.socket
+
+# For daemons with only UNIX sockets and no unprivileged read-only access
+%define libvirt_daemon_systemd_post_priv() %systemd_post %1.socket %1-admin.socket %1.service
+%define libvirt_daemon_systemd_preun_priv() %systemd_preun %1.service %1-admin.socket %1.socket
 
 %pre daemon
 # 'libvirt' group is just to allow password-less polkit access to
@@ -1897,30 +1335,32 @@ getent group libvirt >/dev/null || groupadd -r libvirt
 exit 0
 
 %post daemon
+%libvirt_daemon_systemd_post_priv virtlogd
+%libvirt_daemon_systemd_post_priv virtlockd
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post_inet virtproxyd
+%else
+%libvirt_daemon_systemd_post_inet libvirtd
+%endif
 
-%systemd_post virtlockd.socket virtlockd-admin.socket
-%systemd_post virtlogd.socket virtlogd-admin.socket
-%systemd_post libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket
-%systemd_post libvirtd-tcp.socket libvirtd-tls.socket
-%systemd_post libvirtd.service
+%systemd_post libvirt-guests.service
 
-# request daemon restart in posttrans
-mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
-touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
+%libvirt_daemon_schedule_restart libvirtd
 
 %preun daemon
-%systemd_preun libvirtd.service
-%systemd_preun libvirtd-tcp.socket libvirtd-tls.socket
-%systemd_preun libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket
-%systemd_preun virtlogd.socket virtlogd-admin.socket virtlogd.service
-%systemd_preun virtlockd.socket virtlockd-admin.socket virtlockd.service
+%systemd_preun libvirt-guests.service
+
+%libvirt_daemon_systemd_preun_inet libvirtd
+%libvirt_daemon_systemd_preun_inet virtproxyd
+%libvirt_daemon_systemd_preun_priv virtlogd
+%libvirt_daemon_systemd_preun_priv virtlockd
 
 %postun daemon
 /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 || :
+    /bin/systemctl reload-or-try-restart virtlockd.service virtlogd.service >/dev/null 2>&1 || :
 fi
+%systemd_postun libvirt-guests.service
 
 # In upgrade scenario we must explicitly enable virtlockd/virtlogd
 # sockets, if libvirtd is already enabled and start them if
@@ -1935,7 +1375,8 @@ if [ $1 -ge 1 ] ; then
 fi
 
 %posttrans daemon
-if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
+if test %libvirt_daemon_needs_restart libvirtd
+then
     # See if user has previously modified their install to
     # tell libvirtd to use --listen
     grep -E '^LIBVIRTD_ARGS=.*--listen' /etc/sysconfig/libvirtd 1>/dev/null 2>&1
@@ -1945,11 +1386,12 @@ if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
         # systemd socket activation, because switching things
         # might confuse mgmt tool like puppet/ansible that
         # expect the old style libvirtd
-        /bin/systemctl mask libvirtd.socket >/dev/null 2>&1 || :
-        /bin/systemctl mask libvirtd-ro.socket >/dev/null 2>&1 || :
-        /bin/systemctl mask libvirtd-admin.socket >/dev/null 2>&1 || :
-        /bin/systemctl mask libvirtd-tls.socket >/dev/null 2>&1 || :
-        /bin/systemctl mask libvirtd-tcp.socket >/dev/null 2>&1 || :
+        /bin/systemctl mask \
+                libvirtd.socket \
+                libvirtd-ro.socket \
+                libvirtd-admin.socket \
+                libvirtd-tls.socket \
+                libvirtd-tcp.socket >/dev/null 2>&1 || :
     else
         # Old libvirtd owns the sockets and will delete them on
         # shutdown. Can't use a try-restart as libvirtd will simply
@@ -1961,26 +1403,180 @@ if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
         then
             /bin/systemctl stop libvirtd.service >/dev/null 2>&1 || :
 
-            /bin/systemctl try-restart libvirtd.socket >/dev/null 2>&1 || :
-            /bin/systemctl try-restart libvirtd-ro.socket >/dev/null 2>&1 || :
-            /bin/systemctl try-restart libvirtd-admin.socket >/dev/null 2>&1 || :
+            /bin/systemctl try-restart \
+                    libvirtd.socket \
+                    libvirtd-ro.socket \
+                    libvirtd-admin.socket >/dev/null 2>&1 || :
 
             /bin/systemctl start libvirtd.service >/dev/null 2>&1 || :
         fi
     fi
 fi
-rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
+
+%libvirt_daemon_finish_restart libvirtd
 
 %post daemon-driver-network
 %if %{with_firewalld_zone}
     %firewalld_reload
 %endif
 
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtnetworkd
+%endif
+%libvirt_daemon_schedule_restart virtnetworkd
+
+%preun daemon-driver-network
+%libvirt_daemon_systemd_preun virtnetworkd
+
 %postun daemon-driver-network
 %if %{with_firewalld_zone}
     %firewalld_reload
 %endif
 
+%posttrans daemon-driver-network
+%libvirt_daemon_perform_restart virtnetworkd
+
+
+%post daemon-driver-nwfilter
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtnwfilterd
+%endif
+%libvirt_daemon_schedule_restart virtnwfilterd
+
+%preun daemon-driver-nwfilter
+%libvirt_daemon_systemd_preun virtnwfilterd
+
+%posttrans daemon-driver-nwfilter
+%libvirt_daemon_perform_restart virtnwfilterd
+
+
+%post daemon-driver-nodedev
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtnodedevd
+%endif
+%libvirt_daemon_schedule_restart virtnodedevd
+
+%preun daemon-driver-nodedev
+%libvirt_daemon_systemd_preun virtnodedevd
+
+%posttrans daemon-driver-nodedev
+%libvirt_daemon_perform_restart virtnodedevd
+
+
+%post daemon-driver-interface
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtinterfaced
+%endif
+%libvirt_daemon_schedule_restart virtinterfaced
+
+%preun daemon-driver-interface
+%libvirt_daemon_systemd_preun virtinterfaced
+
+%posttrans daemon-driver-interface
+%libvirt_daemon_perform_restart virtinterfaced
+
+
+%post daemon-driver-secret
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtsecretd
+%endif
+%libvirt_daemon_schedule_restart virtsecretd
+
+%preun daemon-driver-secret
+%libvirt_daemon_systemd_preun virtsecretd
+
+%posttrans daemon-driver-secret
+%libvirt_daemon_perform_restart virtsecretd
+
+
+%post daemon-driver-storage
+%if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtstoraged
+%endif
+%libvirt_daemon_schedule_restart virtstoraged
+
+%preun daemon-driver-storage
+%libvirt_daemon_systemd_preun virtstoraged
+
+%posttrans daemon-driver-storage
+%libvirt_daemon_perform_restart virtstoraged
+
+
+%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
+
+%post daemon-driver-qemu
+    %if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtqemud
+    %endif
+%libvirt_daemon_schedule_restart virtqemud
+
+%preun daemon-driver-qemu
+%libvirt_daemon_systemd_preun virtqemud
+
+%posttrans daemon-driver-qemu
+%libvirt_daemon_perform_restart virtqemud
+%endif
+
+
+%if %{with_lxc}
+%post daemon-driver-lxc
+    %if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtlxcd
+    %endif
+%libvirt_daemon_schedule_restart virtlxcd
+
+%preun daemon-driver-lxc
+%libvirt_daemon_systemd_preun virtlxcd
+
+%posttrans daemon-driver-lxc
+%libvirt_daemon_perform_restart virtlxcd
+%endif
+
+
+%if %{with_vbox}
+%post daemon-driver-vbox
+    %if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtvboxd
+    %endif
+%libvirt_daemon_schedule_restart virtvboxd
+
+%preun daemon-driver-vbox
+%libvirt_daemon_systemd_preun virtvboxd
+
+%posttrans daemon-driver-vbox
+%libvirt_daemon_perform_restart virtvboxd
+%endif
+
+
+%if %{with_libxl}
+%post daemon-driver-libxl
+    %if %{with_modular_daemons}
+%libvirt_daemon_systemd_post virtxend
+    %endif
+%libvirt_daemon_schedule_restart virtxend
+
+%preun daemon-driver-libxl
+%libvirt_daemon_systemd_preun virtxend
+
+%posttrans daemon-driver-libxl
+%libvirt_daemon_perform_restart virtxend
+%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,
@@ -2011,9 +1607,7 @@ if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ;
         ;;
     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
@@ -2021,57 +1615,29 @@ if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ;
     chmod 0600 %{_sysconfdir}/libvirt/qemu/networks/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 || :
+    %libvirt_daemon_schedule_restart libvirtd
+    %libvirt_daemon_schedule_restart virtnetworkd
 fi
 
 %posttrans daemon-config-network
-if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
-    /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
-fi
-rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
+%libvirt_daemon_perform_restart libvirtd
+%libvirt_daemon_perform_restart virtnetworkd
 
 %post daemon-config-nwfilter
-cp %{_datadir}/libvirt/nwfilter/*.xml %{_sysconfdir}/libvirt/nwfilter/
-# libvirt saves these files with mode 600
-chmod 600 %{_sysconfdir}/libvirt/nwfilter/*.xml
+for datadir_file in %{_datadir}/libvirt/nwfilter/*.xml; do
+  sysconfdir_file=%{_sysconfdir}/libvirt/nwfilter/$(basename "$datadir_file")
+  if [ ! -f "$sysconfdir_file" ]; then
+    # libvirt saves these files with mode 600
+    install -m 0600 "$datadir_file" "$sysconfdir_file"
+  fi
+done
 # Make sure libvirt picks up the new nwfilter defininitons
-mkdir -p %{_localstatedir}/lib/rpm-state/libvirt || :
-touch %{_localstatedir}/lib/rpm-state/libvirt/restart || :
+%libvirt_daemon_schedule_restart libvirtd
+%libvirt_daemon_schedule_restart virtnwfilterd
 
 %posttrans daemon-config-nwfilter
-if [ -f %{_localstatedir}/lib/rpm-state/libvirt/restart ]; then
-    /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || :
-fi
-rm -rf %{_localstatedir}/lib/rpm-state/libvirt || :
-
-
-%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
-
-%systemd_preun libvirt-guests.service
-
-%post client
-%systemd_post libvirt-guests.service
-
-%postun client
-%systemd_postun libvirt-guests.service
+%libvirt_daemon_perform_restart libvirtd
+%libvirt_daemon_perform_restart virtnwfilterd
 
 %if %{with_lxc}
 %pre login-shell
@@ -2082,8 +1648,8 @@ exit 0
 %files
 
 %files docs
-%doc AUTHORS ChangeLog NEWS README README.md
-%doc %{_vpath_builddir}/libvirt-docs/*
+%doc AUTHORS.rst NEWS.rst README.rst
+%doc libvirt-docs/*
 
 %files daemon
 
@@ -2108,7 +1674,9 @@ exit 0
 %{_unitdir}/virtlockd.service
 %{_unitdir}/virtlockd.socket
 %{_unitdir}/virtlockd-admin.socket
+%{_unitdir}/libvirt-guests.service
 %config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
+%config(noreplace) %{_sysconfdir}/sysconfig/virtproxyd
 %config(noreplace) %{_sysconfdir}/sysconfig/virtlogd
 %config(noreplace) %{_sysconfdir}/sysconfig/virtlockd
 %config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
@@ -2116,6 +1684,7 @@ exit 0
 %config(noreplace) %{_sysconfdir}/libvirt/virtlogd.conf
 %config(noreplace) %{_sysconfdir}/libvirt/virtlockd.conf
 %config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
+%config(noreplace) %{_sysconfdir}/sysconfig/libvirt-guests
 %config(noreplace) %{_prefix}/lib/sysctl.d/60-libvirtd.conf
 
 %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd
@@ -2155,16 +1724,27 @@ exit 0
 
 %attr(0755, root, root) %{_libexecdir}/libvirt_iohelper
 
+%attr(0755, root, root) %{_bindir}/virt-ssh-helper
+
 %attr(0755, root, root) %{_sbindir}/libvirtd
 %attr(0755, root, root) %{_sbindir}/virtproxyd
 %attr(0755, root, root) %{_sbindir}/virtlogd
 %attr(0755, root, root) %{_sbindir}/virtlockd
+%attr(0755, root, root) %{_libexecdir}/libvirt-guests.sh
 
+%{_mandir}/man1/virt-admin.1*
+%{_mandir}/man1/virt-host-validate.1*
+%{_mandir}/man8/virt-ssh-helper.8*
 %{_mandir}/man8/libvirtd.8*
 %{_mandir}/man8/virtlogd.8*
 %{_mandir}/man8/virtlockd.8*
+%{_mandir}/man8/virtproxyd.8*
 %{_mandir}/man7/virkey*.7*
 
+%{_bindir}/virt-host-validate
+%{_bindir}/virt-admin
+%{_datadir}/bash-completion/completions/virt-admin
+
 %files daemon-config-network
 %dir %{_datadir}/libvirt/networks/
 %{_datadir}/libvirt/networks/default.xml
@@ -2177,6 +1757,7 @@ exit 0
 %ghost %{_sysconfdir}/libvirt/nwfilter/*.xml
 
 %files daemon-driver-interface
+%config(noreplace) %{_sysconfdir}/sysconfig/virtinterfaced
 %config(noreplace) %{_sysconfdir}/libvirt/virtinterfaced.conf
 %{_datadir}/augeas/lenses/virtinterfaced.aug
 %{_datadir}/augeas/lenses/tests/test_virtinterfaced.aug
@@ -2186,8 +1767,10 @@ exit 0
 %{_unitdir}/virtinterfaced-admin.socket
 %attr(0755, root, root) %{_sbindir}/virtinterfaced
 %{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so
+%{_mandir}/man8/virtinterfaced.8*
 
 %files daemon-driver-network
+%config(noreplace) %{_sysconfdir}/sysconfig/virtnetworkd
 %config(noreplace) %{_sysconfdir}/libvirt/virtnetworkd.conf
 %{_datadir}/augeas/lenses/virtnetworkd.aug
 %{_datadir}/augeas/lenses/tests/test_virtnetworkd.aug
@@ -2204,12 +1787,14 @@ exit 0
 %dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/dnsmasq/
 %attr(0755, root, root) %{_libexecdir}/libvirt_leaseshelper
 %{_libdir}/%{name}/connection-driver/libvirt_driver_network.so
+%{_mandir}/man8/virtnetworkd.8*
 
 %if %{with_firewalld_zone}
 %{_prefix}/lib/firewalld/zones/libvirt.xml
 %endif
 
 %files daemon-driver-nodedev
+%config(noreplace) %{_sysconfdir}/sysconfig/virtnodedevd
 %config(noreplace) %{_sysconfdir}/libvirt/virtnodedevd.conf
 %{_datadir}/augeas/lenses/virtnodedevd.aug
 %{_datadir}/augeas/lenses/tests/test_virtnodedevd.aug
@@ -2219,8 +1804,10 @@ exit 0
 %{_unitdir}/virtnodedevd-admin.socket
 %attr(0755, root, root) %{_sbindir}/virtnodedevd
 %{_libdir}/%{name}/connection-driver/libvirt_driver_nodedev.so
+%{_mandir}/man8/virtnodedevd.8*
 
 %files daemon-driver-nwfilter
+%config(noreplace) %{_sysconfdir}/sysconfig/virtnwfilterd
 %config(noreplace) %{_sysconfdir}/libvirt/virtnwfilterd.conf
 %{_datadir}/augeas/lenses/virtnwfilterd.aug
 %{_datadir}/augeas/lenses/tests/test_virtnwfilterd.aug
@@ -2232,8 +1819,10 @@ exit 0
 %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/
 %ghost %dir %{_rundir}/libvirt/network/
 %{_libdir}/%{name}/connection-driver/libvirt_driver_nwfilter.so
+%{_mandir}/man8/virtnwfilterd.8*
 
 %files daemon-driver-secret
+%config(noreplace) %{_sysconfdir}/sysconfig/virtsecretd
 %config(noreplace) %{_sysconfdir}/libvirt/virtsecretd.conf
 %{_datadir}/augeas/lenses/virtsecretd.aug
 %{_datadir}/augeas/lenses/tests/test_virtsecretd.aug
@@ -2243,10 +1832,12 @@ exit 0
 %{_unitdir}/virtsecretd-admin.socket
 %attr(0755, root, root) %{_sbindir}/virtsecretd
 %{_libdir}/%{name}/connection-driver/libvirt_driver_secret.so
+%{_mandir}/man8/virtsecretd.8*
 
 %files daemon-driver-storage
 
 %files daemon-driver-storage-core
+%config(noreplace) %{_sysconfdir}/sysconfig/virtstoraged
 %config(noreplace) %{_sysconfdir}/libvirt/virtstoraged.conf
 %{_datadir}/augeas/lenses/virtstoraged.aug
 %{_datadir}/augeas/lenses/tests/test_virtstoraged.aug
@@ -2259,6 +1850,7 @@ exit 0
 %{_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
+%{_mandir}/man8/virtstoraged.8*
 
 %files daemon-driver-storage-disk
 %{_libdir}/%{name}/storage-backend/libvirt_storage_backend_disk.so
@@ -2303,7 +1895,9 @@ exit 0
 
 %if %{with_qemu}
 %files daemon-driver-qemu
+%config(noreplace) %{_sysconfdir}/sysconfig/virtqemud
 %config(noreplace) %{_sysconfdir}/libvirt/virtqemud.conf
+%config(noreplace) %{_prefix}/lib/sysctl.d/60-qemu-postcopy-migration.conf
 %{_datadir}/augeas/lenses/virtqemud.aug
 %{_datadir}/augeas/lenses/tests/test_virtqemud.aug
 %{_unitdir}/virtqemud.service
@@ -2318,16 +1912,20 @@ exit 0
 %config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.qemu
 %ghost %dir %{_rundir}/libvirt/qemu/
 %dir %attr(0751, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/
-%dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/cache/libvirt/qemu/
+%dir %attr(0750, root, root) %{_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/
+%dir %attr(0730, tss, tss) %{_localstatedir}/log/swtpm/libvirt/qemu/
+%{_bindir}/virt-qemu-run
+%{_mandir}/man1/virt-qemu-run.1*
+%{_mandir}/man8/virtqemud.8*
 %endif
 
 %if %{with_lxc}
 %files daemon-driver-lxc
+%config(noreplace) %{_sysconfdir}/sysconfig/virtlxcd
 %config(noreplace) %{_sysconfdir}/libvirt/virtlxcd.conf
 %{_datadir}/augeas/lenses/virtlxcd.aug
 %{_datadir}/augeas/lenses/tests/test_virtlxcd.aug
@@ -2345,10 +1943,12 @@ exit 0
 %{_datadir}/augeas/lenses/tests/test_libvirtd_lxc.aug
 %attr(0755, root, root) %{_libexecdir}/libvirt_lxc
 %{_libdir}/%{name}/connection-driver/libvirt_driver_lxc.so
+%{_mandir}/man8/virtlxcd.8*
 %endif
 
 %if %{with_libxl}
 %files daemon-driver-libxl
+%config(noreplace) %{_sysconfdir}/sysconfig/virtxend
 %config(noreplace) %{_sysconfdir}/libvirt/virtxend.conf
 %{_datadir}/augeas/lenses/virtxend.aug
 %{_datadir}/augeas/lenses/tests/test_virtxend.aug
@@ -2366,10 +1966,12 @@ exit 0
 %ghost %dir %{_rundir}/libvirt/libxl/
 %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/
 %{_libdir}/%{name}/connection-driver/libvirt_driver_libxl.so
+%{_mandir}/man8/virtxend.8*
 %endif
 
 %if %{with_vbox}
 %files daemon-driver-vbox
+%config(noreplace) %{_sysconfdir}/sysconfig/virtvboxd
 %config(noreplace) %{_sysconfdir}/libvirt/virtvboxd.conf
 %{_datadir}/augeas/lenses/virtvboxd.aug
 %{_datadir}/augeas/lenses/tests/test_virtvboxd.aug
@@ -2379,6 +1981,7 @@ exit 0
 %{_unitdir}/virtvboxd-admin.socket
 %attr(0755, root, root) %{_sbindir}/virtvboxd
 %{_libdir}/%{name}/connection-driver/libvirt_driver_vbox.so
+%{_mandir}/man8/virtvboxd.8*
 %endif
 
 %if %{with_qemu_tcg}
@@ -2421,29 +2024,16 @@ exit 0
 %files client
 %{_mandir}/man1/virsh.1*
 %{_mandir}/man1/virt-xml-validate.1*
+%{_mandir}/man1/virt-pki-query-dn.1*
 %{_mandir}/man1/virt-pki-validate.1*
-%{_mandir}/man1/virt-host-validate.1*
 %{_bindir}/virsh
 %{_bindir}/virt-xml-validate
+%{_bindir}/virt-pki-query-dn
 %{_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
 
-
-%{_unitdir}/libvirt-guests.service
-%config(noreplace) %{_sysconfdir}/sysconfig/libvirt-guests
-%attr(0755, root, root) %{_libexecdir}/libvirt-guests.sh
-
-%files libs -f %{_vpath_builddir}/%{name}.lang
+%files libs -f %{name}.lang
 %license COPYING COPYING.LESSER
 %config(noreplace) %{_sysconfdir}/libvirt/libvirt.conf
 %config(noreplace) %{_sysconfdir}/libvirt/libvirt-admin.conf
@@ -2455,45 +2045,18 @@ exit 0
 %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/domainbackup.rng
-%{_datadir}/libvirt/schemas/domaincaps.rng
-%{_datadir}/libvirt/schemas/domaincheckpoint.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/networkport.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/storagepoolcaps.rng
-%{_datadir}/libvirt/schemas/storagevol.rng
+%{_datadir}/systemtap/tapset/libvirt_probes*.stp
+%{_datadir}/systemtap/tapset/libvirt_functions.stp
+%if %{with_qemu}
+%{_datadir}/systemtap/tapset/libvirt_qemu_probes*.stp
+%endif
+
+%{_datadir}/libvirt/schemas/*.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
@@ -2548,6 +2111,52 @@ exit 0
 
 
 %changelog
+* Fri Feb 25 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-5
+- node_device: Rework udevKludgeStorageType() (rhbz#2056673)
+- node_device: Treat NVMe disks as regular disks (rhbz#2056673)
+
+* Thu Feb 10 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-4
+- qemu_command: Generate memory only after controllers (rhbz#2050697)
+- qemu: Validate domain definition even on migration (rhbz#2050702)
+
+* Wed Feb  2 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-3
+- qemuDomainSetupDisk: Initialize 'targetPaths' (rhbz#2046172)
+- RHEL: Remove <glib-2.64.0 workaround for GSource race (rhbz#2045879)
+
+* Wed Jan 26 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-2
+- Revert "report error when virProcessGetStatInfo() is unable to parse data" (rhbz#2041610)
+- qemu: fix inactive snapshot revert (rhbz#2043584)
+
+* Fri Jan 14 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-1
+- Rebased to libvirt-8.0.0 (rhbz#2012802)
+
+* Thu Jan 13 2022 Jiri Denemark <jdenemar@redhat.com> - 8.0.0-0rc1.1
+- Rebased to libvirt-8.0.0-rc1 (rhbz#2012802)
+- The rebase also fixes the following bugs:
+    rhbz#1689202, rhbz#2014369, rhbz#2030119, rhbz#2029380, rhbz#2035237
+    rhbz#2035714, rhbz#2034180
+
+* Wed Dec  1 2021 Jiri Denemark <jdenemar@redhat.com> - 7.10.0-1
+- Rebased to libvirt-7.10.0 (rhbz#2012802)
+- The rebase also fixes the following bugs:
+    rhbz#1845468, rhbz#2017928, rhbz#2024419, rhbz#1953389, rhbz#1510237
+
+* Wed Nov  3 2021 Jiri Denemark <jdenemar@redhat.com> - 7.9.0-1
+- Rebased to libvirt-7.9.0 (rhbz#2012802)
+- The rebase also fixes the following bugs:
+    rhbz#2011731, rhbz#2012385, rhbz#2013539
+
+* Fri Oct 15 2021 Jiri Denemark <jdenemar@redhat.com> - 7.8.0-1
+- Rebased to libvirt-7.8.0 (rhbz#2012802)
+- The rebase also fixes the following bugs:
+    rhbz#1839070, rhbz#1942275, rhbz#1995865, rhbz#1806857, rhbz#1924616
+    rhbz#1978574, rhbz#1989457, rhbz#1965589, rhbz#1677608, rhbz#1926508
+    rhbz#1810863, rhbz#1845468, rhbz#1738392, rhbz#1965140
+
+* Thu Sep 2 2021 Danilo C. L. de Paula <ddepaula@redhat.com> - 7.6.0-2.fc34
+- Resolves: bz#2000225
+  (Rebase virt:rhel module:stream based on AV-8.6)
+
 * Fri Aug  6 2021 Jiri Denemark <jdenemar@redhat.com> - 6.0.0-37
 - security: fix SELinux label generation logic (CVE-2021-3631)
 - storage_driver: Unlock object on ACL fail in storagePoolLookupByTargetPath (CVE-2021-3667)