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 @@ - <driver name='qemu' type='raw'/> - <source protocol="http" name="url_path"> - <host name="hostname" port="80"/> -+ <cookies> -+ <cookie name="test">somevalue</cookie> -+ </cookies> - </source> - <target dev='hde' bus='ide' tray='open'/> - <readonly/> -@@ -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">[!#$%&'*+\-.0-9A-Z\^_`a-z|~]+</param> -+ </data> -+ </attribute> -+ <data type="string"> -+ <param name="pattern">[!#$%&'()*+\-./0-9:>=<?@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 @@ - </disk> - <disk type='network' device='cdrom'> - <driver name='qemu' type='raw'/> -- <source protocol="http" name="url_path"> -+ <source protocol="http" name="url_path" query="foo=bar&amp;baz=flurb> - <host name="hostname" port="80"/> - <cookies> - <cookie name="test">somevalue</cookie> -@@ -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&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&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 @@ - <driver name='qemu' type='raw'/> - <source protocol="https" name="url_path"> - <host name="hostname" port="443"/> -+ <ssl verify="no"/> - </source> - <target dev='hdf' bus='ide' tray='open'/> - <readonly/> -@@ -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 @@ - <cookies> - <cookie name="test">somevalue</cookie> - </cookies> -+ <readahead size='65536'/> -+ <timeout seconds='6'/> - </source> - <target dev='hde' bus='ide' tray='open'/> - <readonly/> -@@ -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> -+... -+<cpu> -+ ... -+ <numa> -+ <cell id='0' cpus='0-3' memory='512000' unit='KiB' discard='yes'/> -+ <cell id='1' cpus='4-7' memory='512000' unit='KiB' memAccess='shared'/> -+ <cell id='3' 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> -+ <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> -+...</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 @@ - </features> - <model>core2duo</model> - <vendor>Intel</vendor> -- <topology sockets="1" cores="2" threads="1"/> -+ <topology sockets="1" dies="1" cores="2" threads="1"/> - <feature name="lahf_lm"/> - <feature name='xtpr'/> - ... -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 @@ - <cpu match='exact'> - <model fallback='allow'>core2duo</model> - <vendor>Intel</vendor> -- <topology sockets='1' cores='2' threads='1'/> -+ <topology sockets='1' dies='1' cores='2' threads='1'/> - <cache level='3' mode='emulate'/> - <feature policy='disable' name='lahf_lm'/> - </cpu> -@@ -1479,7 +1479,7 @@ - <pre> - <cpu mode='host-model'> - <model fallback='forbid'/> -- <topology sockets='1' cores='2' threads='1'/> -+ <topology sockets='1' dies='1' cores='2' threads='1'/> - </cpu> - ...</pre> - -@@ -1498,7 +1498,7 @@ - <pre> - ... - <cpu> -- <topology sockets='1' cores='2' threads='1'/> -+ <topology sockets='1' dies='1' cores='2' threads='1'/> - </cpu> - ...</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 @@ - <readonly/> - </filesystem> - <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='on' flock='on'/> -+ </binary> - <source dir='/path'/> - <target dir='mount_tag'/> - </filesystem> -@@ -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><target></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 @@ - <target dir='/import/from/host'/> - <readonly/> - </filesystem> -+ <filesystem type='mount' accessmode='passthrough'> -+ <driver type='virtiofs'/> -+ <source dir='/path'/> -+ <target dir='mount_tag'/> -+ </filesystem> - ... - </devices> - ...</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(©->data, &model->data); -- - copy->vendor = model->vendor; - -- return copy; -+ return g_steal_pointer(©); - } - - -@@ -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(©); - } - - --- -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(©, &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, ©, map) || - x86DataToCPUFeatures(cpu, VIR_CPU_FEATURE_DISABLE, &modelData, map)) -- goto error; -- -- cleanup: -- virCPUx86DataClear(&modelData); -- virCPUx86DataClear(©); -- 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(©); -- 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(©, data) < 0 || -- x86DataCopy(&modelData, &model->data) < 0) -- goto error; -+ x86DataCopy(©, data); -+ x86DataCopy(&modelData, &model->data); - - if ((vendor = x86DataToVendor(©, 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(©->data, &model->data) < 0) { -+ if (x86ModelCopySignatures(copy, model) < 0) { - x86ModelFree(copy); - return NULL; - } -+ x86DataCopy(©->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 @@ - <disk type='block' device='lun'> - <driver name='qemu' type='raw'/> - <source dev='/dev/sda'> -+ <slices> -+ <slice type='storage' offset='12345' size='123'/> -+ </slices> - <reservations managed='no'> - <source type='unix' path='/path/to/qemu-pr-helper' mode='client'/> - </reservations> -@@ -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 @@ - </devices> - ...</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><teaming></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> -+... -+<devices> -+ <interface type='network'> -+ <source network='mybridge'/> -+ <mac address='00:11:22:33:44:55'/> -+ <model type='virtio'/> -+ <teaming type='persistent'/> -+ <alias name='ua-backup0'/> -+ </interface> -+ <interface type='network'> -+ <source network='hostdev-pool'/> -+ <mac address='00:11:22:33:44:55'/> -+ <model type='virtio'/> -+ <teaming type='transient' persistent='ua-backup0'/> -+ </interface> -+</devices> -+...</pre> -+ -+ <p> -+ The <code><teaming></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><teaming></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><teaming -+ type="persistent'/></code>). -+ </p> -+ <p> -+ In the particular case of QEMU, -+ libvirt's <code><teaming></code> element is used to setup -+ a virtio-net "failover" device pair. For this setup, the -+ persistent device must be an interface with <code><model -+ type="virtio"/></code>, and the transient device must -+ be <code><interface type='hostdev'/></code> -+ (or <code><interface type='network'/></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><source></code> of the -+ hostdev NIC (<code><interface type='hostdev'></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 <teaming> -+ </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 <teaming> 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 @@ - <reservations managed='no'> - <source type='unix' path='/path/to/qemu-pr-helper' mode='client'/> - </reservations> -+ </source> - <target dev='sda' bus='scsi'/> - <address type='drive' controller='0' bus='0' target='3' unit='0'/> - </disk> --- -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 <teaming> --- -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), -- ¶ms, &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), ¶ms, -- &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, ¶m, &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">[!#$%&'()*+\-./0-9:>=<?@A-Z\^_`\[\]a-z|~]+</param> -+ <param name="pattern">"?[!#$%&'()*+\-./0-9:>=<?@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'>"blurb"</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'>"blurb"</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'>"blurb"</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'>"0c8db85112873a79b7ef74f294cb70ef7f"</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&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&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 &\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'>"0c8db85112873a79b7ef74f294cb70ef7f"</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)