From 1b87cfe48914ab43ef5884ef1ed8b57c9e990e6f Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: May 10 2022 07:04:06 +0000 Subject: import libvirt-8.0.0-5.module+el8.6.0+14480+c0a3aa0f --- 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: -From: Markus Schade -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit e06590f1708a599286f3ee3690b3dc50ee525d40) - -https://bugzilla.redhat.com/show_bug.cgi?id=1861506 - -Signed-off-by: Jiri Denemark -Message-Id: <2efe44ce5c929916c92656803d39635ae7c189b9.1602172344.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ EPYC-IBPB -+ AMD -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ x86_64 -+ EPYC-IBPB -+ AMD -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ EPYC-IBPB -+ AMD -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -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 -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: <365508c75e579e9037ad555d6c372068ccd50c95.1604938867.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - cpus specifies the CPU or range of CPUs that are - part of the node. memory specifies the node memory - in kibibytes (i.e. blocks of 1024 bytes). -+ Since 6.6.0 the cpus attribute -+ is optional and if omitted a CPU-less NUMA node is created. - Since 1.2.11 one can use an additional unit attribute to - define units in which memory 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 @@ - - - -- -- -- -+ -+ -+ -+ -+ - - - -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, "\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, "\n"); - } -- -- VIR_FREE(cpustr); - } - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\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 @@ -+ -+ QEMUGuest -+ c7a5fdb2-cdaf-9455-926a-d65c16db1809 -+ 12582912 -+ 12582912 -+ 12 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ restart -+ -+ /usr/bin/qemu-system-x86_64 -+ -+
-+ -+ -+ -+ -+ -+
-+ -+ -+ -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: +From f0d0a6a9701522eee013682eb0ef566ef7cdac61 Mon Sep 17 00:00:00 2001 +Message-Id: From: =?UTF-8?q?J=C3=A1n=20Tomko?= 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 --- - 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: +From: Peter Krempa +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 +--- + 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?= Date: Mon, 27 Aug 2018 13:09:38 +0200 Subject: [PATCH] RHEL: Fix virConnectGetMaxVcpus output @@ -26,10 +26,10 @@ Reviewed-by: Andrea Bolognani 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 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 --- - 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: +From: Martin Kletzander +Date: Fri, 28 Jan 2022 20:33:12 +0100 +Subject: [PATCH] RHEL: Remove +Reviewed-by: Peter Krempa +--- + 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: +From d6956a1aaa8757fab60132c3ee46c2bb199a78a8 Mon Sep 17 00:00:00 2001 +Message-Id: From: John Ferlan 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 +Signed-off-by: Ján Tomko Signed-off-by: Jiri Denemark -(cherry picked from commit f2cf0ae7bc371c75f6c0e79192711f2b1d201b10) -Reviewed-by: Ján Tomko --- - 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 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: From: John Ferlan 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 +Signed-off-by: Ján Tomko Signed-off-by: Jiri Denemark -(cherry picked from commit 712005bcf26190dc6fd1fe56283377987909cc4b) -Reviewed-by: Ján Tomko --- 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: -From: John Ferlan -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 element -was removed from the domain , 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 -Reviewed-by: Ján Tomko ---- - 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 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: -From: John Ferlan -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 -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko ---- - 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: -From: John Ferlan -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: - - - - - - - -Signed-off-by: John Ferlan -Reviewed-by: Ján Tomko ---- - 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 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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Signed-off-by: Andrea Bolognani -Message-Id: <20200306145226.1610708-7-abologna@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 -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 -Signed-off-by: Andrea Bolognani -Message-Id: <20200306145226.1610708-6-abologna@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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: +From 9c5daeb8c99ca12a66387de448f585742887fd75 Mon Sep 17 00:00:00 2001 +Message-Id: <9c5daeb8c99ca12a66387de448f585742887fd75@dist-git> From: Michal Privoznik 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 Message-Id: <20200306145226.1610708-2-abologna@redhat.com> Reviewed-by: Jiri Denemark --- - 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; -+ -+ while (virDirRead(dir, &entry, path) > 0) { -+ name = g_strdup(entry->d_name); -+ break; -+ } ++ return NULL; + -+ cleanup: -+ VIR_DIR_CLOSE(dir); ++ if (virDirRead(dir, &entry, path) > 0) ++ return g_strdup(entry->d_name); + -+ 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: +From 1ce4faffcd4616bbcea4d198c3f60cbcfddd784e Mon Sep 17 00:00:00 2001 +Message-Id: <1ce4faffcd4616bbcea4d198c3f60cbcfddd784e@dist-git> From: Michal Privoznik 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 --- 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: +From 5b96a8773d33af9822f6b6ccddc8f372841895a6 Mon Sep 17 00:00:00 2001 +Message-Id: <5b96a8773d33af9822f6b6ccddc8f372841895a6@dist-git> From: Michal Privoznik 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 Message-Id: <20200306145226.1610708-3-abologna@redhat.com> Reviewed-by: Jiri Denemark --- - 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 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 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: +From ac8357ab7dd676af82b971673f8d7e862ff07624 Mon Sep 17 00:00:00 2001 +Message-Id: From: Michal Privoznik 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 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: -From: Michal Privoznik -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 element can have two types of children -elements: and (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 -Reviewed-by: Ján Tomko -(cherry picked from commit fd2ad818b29ca56904dd228f0774f553f99c1157) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518 - -Signed-off-by: Michal Privoznik -Message-Id: <48b8e99ea6fbc6bcab0f7b3d17e7824ef1b232e2.1604938847.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -- -- -- -- -- -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - --- -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: -From: Peter Krempa -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 -Reviewed-by: Michal Privoznik -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit f742461389c11a7d4cc8bda941814c4128eadf94) -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 +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 +Reviewed-by: Andrea Bolognani +(cherry picked from commit 105dace22cc7b5b18d72a4dcad4a2cf386ce5c99) +Signed-off-by: Michal Privoznik +--- + 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 -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 -Reviewed-by: Daniel Henrique Barboza -Reviewed-by: Michal Privoznik -(cherry picked from commit 4cc90c2e62df653e909ad31fd810224bf8bcf913) - -https://bugzilla.redhat.com/show_bug.cgi?id=1814508 - -Signed-off-by: Jonathon Jongsma -Message-Id: <20200325162119.9047-2-jjongsma@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Michal Privoznik -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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?= -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 -Fixes: 71efb59a4de7c51b1bc889a316f1796ebf55738f -https://bugzilla.redhat.com/show_bug.cgi?id=1876907 -Reviewed-by: Peter Krempa -Reviewed-by: Martin Kletzander -(cherry picked from commit 92b252456ee6d6ffc6e39e62ce1ce6c50113e00e) - -https://bugzilla.redhat.com/show_bug.cgi?id=1861176 - -Signed-off-by: Ján Tomko -Message-Id: <7d3c84f6556d0d46ada037d5e56c831babba609f.1601639064.git.jtomko@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 yes and - no. Since 6.2.0 - -+
cookies
-+
-+ For http and https accessed storage it's -+ possible to pass one or more cookies. The cookie name and value -+ must conform to the HTTP specification. -+ Since 6.2.0 -+
- - -

-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 @@ - - - -+ -+ -+ -+ -+ -+ -+ [!#$%&'*+\-.0-9A-Z\^_`a-z|~]+ -+ -+ -+ -+ [!#$%&'()*+\-./0-9:>=<?@A-Z\^_`\[\]a-z|~]+ -+ -+ -+ -+ -+ -+ -+ - - - -@@ -1833,6 +1851,9 @@ - - - -+ -+ -+ - - - -@@ -1849,6 +1870,9 @@ - - - -+ -+ -+ - - - -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, "", src->cookies[i]->name); -+ virBufferEscapeString(&childBuf, "%s\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 @@ - - - -+ -+ testcookievalue -+ blurb -+ - - - -@@ -41,6 +45,10 @@ - - - -+ -+ testcookievalue -+ blurb -+ - - - --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 56368124728f0d65dde07244c741b459fcd6b939) -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Jiri Denemark ---- - 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' Since 4.5.0) -

- -+

For protocols http and https an -+ optional attribute query specifies the query string. -+ (Since 6.2.0) -+

-+ -

For "iscsi" (since 1.0.4), the - name 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 @@ - - - -+ -+ -+ - - - -@@ -1894,6 +1897,9 @@ - - - -+ -+ -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - --- -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: -From: Peter Krempa -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 - to the disk source XML which will allow configuring the validation -process using the 'verify' attribute. - -Signed-off-by: Peter Krempa -Reviewed-by: Ján Tomko -(cherry picked from commit 25481e25b14108373bf2e5e95c04fe30bff96bb4) - -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 offset and size values are in bytes. - Since 6.1.0 - -+

ssl
-+
-+ For https and ftps accessed storage it's -+ possible to tweak the SSL transport parameters with this element. -+ The verify attribute allows to turn on or off SSL -+ certificate validation. Supported values are yes and -+ no. Since 6.2.0 -+
- - -

-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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ https -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - - - http -- https - - - -@@ -1825,13 +1852,31 @@ - - - -+ -+ -+ -+ -+ ftps -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - - - sheepdog - ftp -- ftps - tftp - - -@@ -1909,6 +1954,8 @@ - - - -+ -+ - - - -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, "\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 @@ - - - -+ - - - -@@ -35,6 +36,14 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ - - - --- -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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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. - Since 6.2.0 - -+

readahead
-+
-+ 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. -+ Since 6.2.0 -+
-+
timeout
-+
-+ Specifies the connection timeout for protocols which support it. -+ Note that '0' is considered as if the value is not provided. -+ Since 6.2.0 -+
- - -

-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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -@@ -1854,6 +1873,7 @@ - - - -+ - - - -@@ -1873,6 +1893,7 @@ - - - -+ - - - -@@ -1892,6 +1913,7 @@ - - - -+ - - - -@@ -1910,6 +1932,7 @@ - - - -+ - - - -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, "\n", src->readahead); -+ -+ if (src->timeout) -+ virBufferAsprintf(childBuf, "\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 @@ - testcookievalue - blurb - -+ -+ - - - --- -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 -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 -Signed-off-by: Peter Krempa -Reviewed-by: Erik Skultety -(cherry picked from commit a5b064bf4b17a9884d7d361733737fb614ad8979) - -CVE-2020-14301 -Message-Id: <592a0b594666f580e743b6bd2b4ddccbd1e0cc7c.1592914898.git.pkrempa@redhat.com> - -Reviewed-by: Jiri Denemark ---- - 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, "", src->cookies[i]->name); - virBufferEscapeString(&childBuf, "%s\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, "\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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 2695191a44eb7375225b4ad073825ed3563a172a) -Signed-off-by: Michal Privoznik -Message-Id: <355e05e31ec98522fa0e03a0c2c7af8ca097070d.1584101247.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -Date: Wed, 19 Feb 2020 15:10:20 +0100 -Subject: [PATCH] conf: Implement support for 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 -Reviewed-by: Ján Tomko -(cherry picked from commit bbf5d05cfd003e33600009cac7ea98ef1539dd7c) - -https://bugzilla.redhat.com/show_bug.cgi?id=1791788 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Andrea Bolognani -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 -Reviewed-by: Masayoshi Mizuma -Reviewed-by: Ján Tomko -(cherry picked from commit 3809e88a87e5898c9cf3a277cb32e20fca8fb2d0) - -https://bugzilla.redhat.com/show_bug.cgi?id=1762634 - -Signed-off-by: Andrea Bolognani -Message-Id: <20200214121237.623948-5-abologna@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - hpet - pit -+ armvtimer - - - -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 -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 -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: <26a847deef5941fd90f892cf5fe1443cf3fc90ca.1602087923.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 - as under NUMA and or - under numa/latencies. - -1: https://www.redhat.com/archives/libvir-list/2020-January/msg00422.html - -Signed-off-by: Michal Privoznik -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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. -

- -+

ACPI Heterogeneous Memory Attribute Table

-+ -+
-+...
-+<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>
-+...
-+ -+

-+ Since 6.6.0 the cell element can -+ have a cache child element which describes memory side cache -+ for memory proximity domains. The cache element has a -+ level attribute describing the cache level and thus the -+ element can be repeated multiple times to describe different levels of -+ the cache. -+

-+ -+

-+ The cache element then has following mandatory attributes: -+

-+ -+
-+
level
-+
-+ Level of the cache this description refers to. -+
-+ -+
associativity
-+
-+ Describes cache associativity (accepted values are none, -+ direct and full). -+
-+ -+
policy
-+
-+ Describes cache write associativity (accepted values are -+ none, writeback and -+ writethrough). -+
-+
-+ -+

-+ The cache element has two mandatory child elements then: -+ size and line which describe cache size and -+ cache line size. Both elements accept two attributes: value -+ and unit which set the value of corresponding cache -+ attribute. -+

-+ -+

-+ The NUMA description has an optional interconnects 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). -+

-+ -+

-+ The interconnects element can have zero or more -+ latency child elements to describe latency between two -+ memory nodes and zero or more bandwidth child elements to -+ describe bandwidth between two memory nodes. Both these have the -+ following mandatory attributes: -+

-+ -+
-+
initiator
-+
Refers to the source NUMA node
-+ -+
target
-+
Refers to the target NUMA node
-+ -+
type
-+
The type of the access. Accepted values: access, -+ read, write
-+ -+
value
-+
The actual value. For latency this is delay in nanoseconds, for -+ bandwidth this value is in kibibytes per second. Use additional -+ unit attribute to change the units.
-+
-+ -+

-+ To describe latency from one NUMA node to a cache of another NUMA node -+ the latency element has optional cache -+ attribute which in combination with target attribute creates -+ full reference to distant NUMA node's cache level. For instance, -+ target='0' cache='1' refers to the first level cache of NUMA -+ node 0. -+

-+ -

Events configuration

- -

-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 @@ - - - -- -- -- -+ -+ -+ -+ -+ -+ -+ -+ - - - -@@ -148,6 +153,9 @@ - - - -+ -+ -+ - - - -@@ -162,6 +170,102 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ none -+ direct -+ full -+ -+ -+ -+ -+ none -+ writeback -+ writethrough -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ access -+ read -+ write -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ access -+ read -+ write -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -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, "\n"); -- virBufferAdjustIndent(buf, 2); -- for (j = 0; j < ndistances; j++) { -- if (distances[j].value) { -- virBufferAddLit(buf, "\n"); -+ -+ if (ndistances) { -+ virDomainNumaDistancePtr distances = def->mem_nodes[i].distances; -+ -+ virBufferAddLit(buf, "\n"); -+ virBufferAdjustIndent(buf, 2); -+ for (j = 0; j < ndistances; j++) { -+ if (distances[j].value) { -+ virBufferAddLit(buf, "\n"); -+ } - } -+ virBufferAdjustIndent(buf, -2); -+ virBufferAddLit(buf, "\n"); -+ } -+ -+ for (j = 0; j < ncaches; j++) { -+ virDomainNumaCachePtr cache = &def->mem_nodes[i].caches[j]; -+ -+ virBufferAsprintf(buf, "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, -+ "\n", -+ cache->size); -+ -+ if (cache->line) { -+ virBufferAsprintf(buf, -+ "\n", -+ cache->line); -+ } -+ -+ virBufferAdjustIndent(buf, -2); -+ virBufferAddLit(buf, "\n"); - } -- virBufferAdjustIndent(buf, -2); -- virBufferAddLit(buf, "\n"); - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\n"); - } - } -+ -+ if (def->ninterconnects) { -+ virBufferAddLit(buf, "\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, "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, "\n"); -+ } -+ - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "\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 @@ -+ -+ QEMUGuest -+ c7a5fdb2-cdaf-9455-926a-d65c16db1809 -+ 8388608 -+ 8388608 -+ 12 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ restart -+ -+ /usr/bin/qemu-system-x86_64 -+ -+

-+ -+ -+ -+ -+ -+
-+ -+ -+ -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 -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 -Reviewed-by: Daniel Henrique Barboza -(cherry picked from commit f0611fe8830543d03d1871422f8c542453f0c8db) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518 - -Signed-off-by: Michal Privoznik -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit c296a846ad7de3066a17404f4f407d3e1b6d7935) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump -Message-Id: <20200426170415.18328-8-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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: -From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= -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 - - - -Reviewed-by: Jiri Denemark -Reviewed-by: Daniel Henrique Barboza -Signed-off-by: Daniel P. Berrangé -(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 ---- - 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 @@ -
- <cpu mode='host-model'>
-   <model fallback='forbid'/>
--  <topology sockets='1' cores='2' threads='1'/>
-+  <topology sockets='1' dies='1' cores='2' threads='1'/>
- </cpu>
- ...
- -@@ -1498,7 +1498,7 @@ -
- ...
- <cpu>
--  <topology sockets='1' cores='2' threads='1'/>
-+  <topology sockets='1' dies='1' cores='2' threads='1'/>
- </cpu>
- ...
- -@@ -1673,13 +1673,15 @@ - -
topology
-
The topology element specifies requested topology of -- virtual CPU provided to the guest. Three non-zero values have to be -- given for sockets, cores, and -- threads: 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 -- cpus element equals to the number of vcpus resulting -- from the topology.
-+ virtual CPU provided to the guest. Four attributes, sockets, -+ dies, cores, and threads, -+ 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 dies -+ 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 cpus element equals to -+ the number of vcpus resulting from the topology. - -
feature
-
The cpu 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 @@ - - - -+ -+ -+ -+ -+ - - - -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, "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 @@ - - 486 -- -+ - - - -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 @@ - - Nehalem -- -+ - - - -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 @@ - - Penryn -- -+ - - - -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 @@ - - Penryn -- -+ - - - -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 @@ - - Penryn - Intel -- -+ - - - -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 @@ - - Haswell -- -+ - - - -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 @@ - - Haswell -- -+ - - - -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 @@ - - Haswell-noTSX -- -+ - -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 @@ - - Penryn -- -+ - - - -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - hvm - - -- -+ - - - /usr/bin/qemu-system-ppc64 -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - destroy -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 @@ - - - core2duo -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - core2duo - Intel -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - hvm - - -- -+ - - - -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 @@ - hvm - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - hvm - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - core2duo - Intel -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - destroy -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - destroy -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 @@ - hvm - - -- -+ - - - destroy -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 @@ - hvm - - -- -+ - - - destroy --- -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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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: - - - - - - - - -Signed-off-by: Ján Tomko -Reviewed-by: Daniel P. Berrangé -Reviewed-by: Masayoshi Mizuma -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit 66079339847dc942b9b673e3040b56b055a8d8f5) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <506d0532c6043a9b8c946bdc42c3d9c5529f6fb8.1583322090.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 @@ - Virtio-specific options can also be - set. (Since 3.5.0) - -+
  • -+ For virtiofs, the queue attribute can be used -+ to specify the queue size (i.e. how many requests can the queue fit). -+ (Since 6.2.0) -+
  • - -
    - -+
    binary
    -+
    -+ The optional binary element can tune the options for virtiofsd. -+ All of the following attributes and elements are optional. -+ The attribute path can be used to override the path to the daemon. -+ Attribute xattr enables the use of filesystem extended attributes. -+ Caching can be tuned via the cache element, possible mode -+ values being none and always. -+ Locking can be controlled via the lock -+ element - attributes posix and flock both accepting -+ values on or off. -+ (Since 6.2.0) -+
    -+ -
    source
    -
    - 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 @@ - - - -+ -+ -+ - - - -@@ -2649,12 +2652,57 @@ - - virtiofs - -+ -+ -+ -+ -+ - - - - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ none -+ always -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -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, "\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 @@ - - - -- -+ -+ -+ -+ -+ - - -
    -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 @@ - - - -+ - - -
    --- -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 -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 -Reviewed-by: Daniel Henrique Barboza -Reviewed-by: Eric Blake -(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 ---- - 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 @@ -
    Setting this attribute to yes(default) specifies - that the disk should take part in the backup and using - no excludes the disk from the backup.
    -+
    exportname
    -+
    Allows modification of the NBD export name for the given disk. -+ By default equal to disk target. -+ Valid only for pull mode backups.
    -+
    exportbitmap
    -+
    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.
    -
    type
    -
    A mandatory attribute to describe the type of the - disk, except when backup='no' 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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ - - - -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, "\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 1525889631 - - -- -+ - - - -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 @@ - 1525889631 - - -- -+ - - - --- -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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit b8295160c36e555d8bcaef5015d0c1e3ae85fb17) -https://bugzilla.redhat.com/show_bug.cgi?id=1804593 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -From: Laine Stump -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit a283189f8c64882681ea99259ccfc8d1b8e524dd) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump -Message-Id: <20200426171703.18808-2-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -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 -Reviewed-by: Erik Skultety -(cherry picked from commit 45464db8ba502764cf37ec9335770248bdb3d9a8) - -Prerequisite for: https://bugzilla.redhat.com/show_bug.cgi?id=1808499 - -Signed-off-by: Michal Privoznik -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Michal Privoznik -(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 ---- - 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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit 7118bdee1550b6022e7362402ca8204add4cf80b) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump -Message-Id: <20200426171703.18808-3-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 -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 -Reviewed-by: Michal Privoznik -(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 -Message-Id: <631e05bc5363abb3e48d8b652a806324801cce16.1621599207.git.phrdina@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 @@ - ESX and VMWare hypervisor drivers, however, - the i686 arch will always be chosen even on an - x86_64 host. Since 0.0.1
    -+
    firmware
    -+
    -+

    Since 7.2.0 QEMU/KVM only

    -+

    -+ When used together with firmware attribute of -+ os element the type attribute must -+ have the same value. -+

    -+

    -+ List of mandatory attributes: -+

      -+
    • -+ type (accepted values are bios -+ and efi) same as the firmware -+ attribute of os element. -+
    • -+
    -+

    -+

    -+ 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 -+ feature elements. Libvirt will take into consideration -+ only the listed features and ignore the rest when selecting the firmware. -+ -+

    -+
    feature
    -+
    -+ The list of mandatory attributes: -+ -+
      -+
    • -+ enabled (accepted values are yes -+ and no) is used to tell libvirt if the feature -+ must be enabled or not in the automatically selected firmware -+
    • -+
    • -+ name the name of the feature, the list of the features: -+
        -+
      • -+ enrolled-keys 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. -+
      • -+
      • -+ secure-boot whether the firmware implements -+ UEFI Secure boot feature. -+
      • -+
      -+
    • -+
    -+
    -+
    -+

    -+
    -
    loader
    -
    The optional loader 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 @@ - - - -+ -+ -+ -+ -+ bios -+ efi -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ enrolled-keys -+ secure-boot -+ -+ -+ -+ -+ -+ - - - -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 - * 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\n", - virDomainOSTypeToString(def->os.type)); - -+ if (def->os.firmware) { -+ virBufferAsprintf(buf, "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, "\n", -+ virTristateBoolTypeToString(def->os.firmwareFeatures[i]), -+ virDomainOsDefFirmwareFeatureTypeToString(i)); -+ } -+ -+ virBufferAdjustIndent(buf, -2); -+ -+ virBufferAddLit(buf, "\n"); -+ } else { -+ virBufferAddLit(buf, "/>\n"); -+ } -+ } -+ - virBufferEscapeString(buf, "%s\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 @@ -+ -+ fedora -+ 63840878-0deb-4095-97e6-fc444d9bc9fa -+ 8192 -+ 8192 -+ 1 -+ -+ hvm -+ -+ -+ /var/lib/libvirt/qemu/nvram/fedora_VARS.fd -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ restart -+ -+ /usr/bin/qemu-system-x86_64 -+ -+ -+ -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 @@ - 1 - - hvm -+ - /aarch64.kernel - /aarch64.initrd - earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait -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 @@ - 1 - - hvm -+ - - /var/lib/libvirt/qemu/nvram/fedora_VARS.fd - -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 @@ - 1 - - hvm -+ - - /var/lib/libvirt/qemu/nvram/fedora_VARS.fd - -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 @@ - 1 - - hvm -+ - - /var/lib/libvirt/qemu/nvram/fedora_VARS.fd - -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 @@ - 1 - - hvm -+ - - - destroy --- -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 -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 -Reviewed-by: Michal Privoznik -(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 -Message-Id: <5fb7ee0165340ff517b3f7f16ddc542813ac385d.1621599207.git.phrdina@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit bcf97abfc6b45694f0d789ae2bdf87c8d082fddf) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357 - -Signed-off-by: Pavel Hrdina -Message-Id: <9a090d9f2a43b261ed1b6db608779a01a7594f4a.1621599207.git.phrdina@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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: -From: Pavel Hrdina -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 -Reviewed-by: Michal Privoznik -(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 -Message-Id: -Reviewed-by: Michal Privoznik ---- - 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 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 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 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 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 element")); -- return -1; -- } - -- if (!nodes[i]->children || -- !nodes[i]->children->content) { -- virReportError(VIR_ERR_XML_ERROR, -- _("No value supplied for 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: -From: Pavel Hrdina -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit bf9b3f8e573092cc98ea647f25cf116e22bbfe3c) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357 - -Signed-off-by: Pavel Hrdina -Message-Id: <936428a5fa6d4104361ac8080639a55111c14965.1621599207.git.phrdina@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 -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 -Reviewed-by: Michal Privoznik -(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 -Message-Id: -Reviewed-by: Michal Privoznik ---- - 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 -Date: Sun, 26 Apr 2020 13:04:07 -0400 -Subject: [PATCH] conf: new attribute "hotplug" for pci controllers - -a element can now have a "hotplug" -attribute in the subelement. This is intended to control -whether or not the slot(s) of the controller support -hotplugging/unplugging a device: - - - - - -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit 78f4d5e6f188a9f0f8d6da6b1fe78b9f4172d9ad) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump - -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 -Message-Id: <20200426170415.18328-5-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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. -
    -+
    hotplug
    -+
    -+ pcie-root-port and pcie-switch-downstream-port controllers can -+ also have a hotplug attribute in -+ the <target> subelement, which is used to -+ disable hotplug/unplug of devices on a particular -+ controller. The default setting of hotplug -+ is on; it should be set to off to -+ disable hotplug/unplug of devices on a particular controller. -+ Since 6.3.0 -+
    -
    busNr
    -
    - 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 @@ - - - -+ -+ -+ -+ -+ - - - -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, "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 @@ -+ -+ guest -+ 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 -+ 2097152 -+ 2097152 -+ 2 -+ -+ hvm -+ -+ -+ /usr/bin/qemu-system-x86_64 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ guest -+ 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 -+ 2097152 -+ 2097152 -+ 2 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-x86_64 -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+
    -+ -+ -+
    -+ -+ -+ -+ -+ -+ -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 -Date: Thu, 30 Jan 2020 14:12:40 -0500 -Subject: [PATCH] conf: parse/format subelement of -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The subelement of devices is used to configure a -simple teaming association between two interfaces in a domain. Example: - - - - - - - - - - -
    - - - - - -The interface with 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 -Reviewed-by: Daniel P. Berrangé -(cherry picked from commit fb0509d06ac57434c2edbd81ee63deb32a0e598a) - -https://bugzilla.redhat.com/1693587 -Signed-off-by: Laine Stump -Message-Id: <20200130191244.24174-3-laine@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ -+ -+ -+ -+ -+ persistent -+ -+ -+ -+ -+ transient -+ -+ -+ -+ -+ -+ -+ -+ - - - -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, "\n"); - } - -+ if (def->teaming.type != VIR_DOMAIN_NET_TEAMING_TYPE_NONE) { -+ virBufferAsprintf(buf, "teaming.type)); -+ virBufferEscapeString(buf, " persistent='%s'", def->teaming.persistent); -+ virBufferAddLit(buf, "/>\n"); -+ } - if (def->linkstate) { - virBufferAsprintf(buf, "\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 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219100 -+ 219100 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-i386 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219100 -+ 219100 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-i386 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219100 -+ 219100 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-i386 -+ -+ -+ -+ -+
    -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -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 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219100 -+ 219100 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-i386 -+ -+ -+ -+ -+
    -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -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: -From: Laine Stump -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 -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 - autogenerated -names were not cleared for (which could -also result in a macvtap device). - -Although the names of "vnetX" tap devices had always been -automatically cleared when parsing (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), -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 -Reviewed-by: Daniel Henrique Barboza -(cherry picked from commit 282d135ddbb7203565cd5527b451469b14953994) - -https://bugzilla.redhat.com/1872610 - -Signed-off-by: Laine Stump -Message-Id: <20201202030100.458879-1-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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?= -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. - - - - - -
    - - -Signed-off-by: Ján Tomko -Reviewed-by: Daniel P. Berrangé -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit ecc6ad6b90ad674a903c95d2a637f8b1b5833be2) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: -Reviewed-by: Michal Privoznik ---- - 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> - ... -@@ -3963,6 +3968,9 @@ - while the value immediate means that a host writeback - is immediately triggered for all pages touched during a guest file - write operation (since 0.9.10). -+ Since 6.2.0, type='virtiofs' -+ is also supported. Using virtiofs requires setting up shared memory, -+ see the guide: Virtio-FS -
    -
    template
    -
    -@@ -3998,7 +4006,9 @@ - The filesystem element has an optional attribute accessmode - which specifies the security mode for accessing the source - (since 0.8.5). Currently this only works -- with type='mount' for the QEMU/KVM driver. The possible -+ with type='mount' for the QEMU/KVM driver. -+ For driver type virtiofs, only passthrough is -+ supported. For other driver types, the possible - values are: - -
    -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 @@ - - - -+ -+ -+ virtiofs -+ -+ -+ - - - -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 @@ -+ -+ guest -+ 126f2720-6f8e-45ab-a886-ec9277079a67 -+ 14680064 -+ 14680064 -+ -+ -+ -+ -+ 2 -+ -+ hvm -+ -+ -+ -+ qemu64 -+ -+ -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-x86_64 -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ guest -+ 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 -+ 4194304 -+ 4194304 -+ -+ -+ -+ -+ -+ -+ 2 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ qemu64 -+ -+ -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-x86_64 -+ -+ -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit 7c98f5e3652e19e4eb015d290c1eed2f1b58ee72) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump -Message-Id: <20200426170415.18328-9-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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?= -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 - - - - - - - -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: - - - - - - - -which also means that we don't need to emit the empty element - for all existing configs too. - -Reviewed-by: Pavel Hrdina -Signed-off-by: Daniel P. Berrangé -(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 -Message-Id: <299fd16fc3ce632bf25ca55cc4bb65a225437d61.1621599207.git.phrdina@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 @@ -
    firmware
    -
    -

    Since 7.2.0 QEMU/KVM only

    --

    -- When used together with firmware attribute of -- os element the type attribute must -- have the same value. --

    --

    -- List of mandatory attributes: --

      --
    • -- type (accepted values are bios -- and efi) same as the firmware -- attribute of os element. --
    • --
    --

    -

    - 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 @@ - - - -- -- -- bios -- efi -- -- -- -+ - - - -@@ -288,7 +282,7 @@ - - - -- -+ - - - -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\n", - virDomainOSTypeToString(def->os.type)); - -- if (def->os.firmware) { -- virBufferAsprintf(buf, "os.firmware)); -- -- if (def->os.firmwareFeatures) { -- virBufferAddLit(buf, ">\n"); -- -- virBufferAdjustIndent(buf, 2); -+ 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; -+ for (i = 0; i < VIR_DOMAIN_OS_DEF_FIRMWARE_FEATURE_LAST; i++) { -+ if (def->os.firmwareFeatures[i] == VIR_TRISTATE_BOOL_ABSENT) -+ continue; - -- virBufferAsprintf(buf, "\n", -- virTristateBoolTypeToString(def->os.firmwareFeatures[i]), -- virDomainOsDefFirmwareFeatureTypeToString(i)); -- } -+ virBufferAsprintf(buf, "\n", -+ virTristateBoolTypeToString(def->os.firmwareFeatures[i]), -+ virDomainOsDefFirmwareFeatureTypeToString(i)); -+ } - -- virBufferAdjustIndent(buf, -2); -+ virBufferAdjustIndent(buf, -2); - -- virBufferAddLit(buf, "\n"); -- } else { -- virBufferAddLit(buf, "/>\n"); -- } -+ virBufferAddLit(buf, "\n"); - } - - virBufferEscapeString(buf, "%s\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 @@ - 1 - - hvm -- -+ - - - -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 @@ -- -- fedora -- 63840878-0deb-4095-97e6-fc444d9bc9fa -- 8192 -- 8192 -- 1 -- -- hvm -- -- -- /var/lib/libvirt/qemu/nvram/fedora_VARS.fd -- -- -- -- -- -- -- -- -- -- destroy -- restart -- restart -- -- /usr/bin/qemu-system-x86_64 -- -- -- -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 @@ - 1 - - hvm -- - /aarch64.kernel - /aarch64.initrd - earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait -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 @@ - 1 - - hvm -- - - /var/lib/libvirt/qemu/nvram/fedora_VARS.fd - -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 @@ - 1 - - hvm -- - - /var/lib/libvirt/qemu/nvram/fedora_VARS.fd - -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 @@ - 1 - - hvm -- - - /var/lib/libvirt/qemu/nvram/fedora_VARS.fd - -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 @@ - 1 - - hvm -- - - - destroy --- -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?= -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 -Reviewed-by: Jiri Denemark -Signed-off-by: Daniel P. Berrangé -(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 ---- - 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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit 5793b8baa75747860f6ba97470969047e60c8579) - -https://bugzilla.redhat.com/show_bug.cgi?id=1804617 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Laine Stump -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit fcdf87d3ef14de9dfb0acaf4b4445e1580dfc629) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump -Message-Id: <20200426170415.18328-10-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit 6330be1ba3af5c4d2150fe2b831f7bc5d87c6d2a) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1929357 - -Signed-off-by: Pavel Hrdina -Message-Id: <900c870b1720688123ed7b69850548ae308ea9a8.1621599207.git.phrdina@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Reviewed-by: Peter Krempa -(cherry picked from commit 3efdbae5bf054d1a2bdc98fdccff0273abe54c88) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <966ad0eebcb1ae5f20f59fc6cc84008bbfa6426f.1583322090.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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, "\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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 68c0b85ecb07c8cefcf4f4a2ffc28e123baa9e8c) - -https://bugzilla.redhat.com/show_bug.cgi?id=1839999 - -Signed-off-by: Jiri Denemark -Message-Id: <2633727669ca50970bd10abe9b045e24b76028d1.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 - - - - - -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 -Reviewed-by: Ján Tomko -(cherry picked from commit ac36a824641862dcac057c6403b27ab1e91874f5) - -https://bugzilla.redhat.com/show_bug.cgi?id=1839999 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Peter Krempa -(cherry picked from commit 609acf1f5d5d666148355719346c8ee05f911e33) - -https://bugzilla.redhat.com/show_bug.cgi?id=1794691 - -Signed-off-by: Michal Privoznik -Message-Id: <033f07f79bc9fa26f669c83f9aa790bfaef25b93.1579874719.git.mprivozn@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 0905f222f1bfd9d741e94a8d653e05bb174846d3) -Signed-off-by: Jiri Denemark -Message-Id: <0b46ae9e26d1c7dbaa7f2dd58fd1156db237a853.1582186015.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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, "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\n", def->model); -+ if (def->type == VIR_CPU_TYPE_GUEST) -+ virBufferEscapeString(buf, " vendor_id='%s'", def->vendor_id); -+ -+ if (def->model) -+ virBufferEscapeString(buf, ">%s\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 @@ - hvm - - -- -+ -+ -+ - - destroy - restart --- -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 -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 -Reviewed-by: Pavel Hrdina -(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 -Message-Id: <62f2fa3e2ecab2026c41e93430b4e2b695c674f0.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - - - -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ - -- Cascadelake-Server -+ Cooperlake - Intel - - -@@ -20,22 +20,13 @@ - - - -+ - -- - - -- -- -- - - - - -- -- -- -- -- - -- - -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 @@ - - x86_64 -- Cascadelake-Server -+ Cooperlake - Intel - - -@@ -21,22 +21,13 @@ - - - -+ - -- - - -- -- -- - - - - -- -- -- -- -- - -- - -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 @@ - -- Cascadelake-Server -+ Cooperlake - Intel - - - - -+ - -- - -- -- -- - - - -- -- -- -- -- - -- - -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 @@ - EPYC-IBPB - EPYC - Dhyana -+ Cooperlake - Conroe - Cascadelake-Server-noTSX - Cascadelake-Server -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 @@ - EPYC-IBPB - EPYC - Dhyana -+ Cooperlake - Conroe - Cascadelake-Server-noTSX - Cascadelake-Server -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 @@ - EPYC-IBPB - EPYC - Dhyana -+ Cooperlake - Conroe - Cascadelake-Server-noTSX - Cascadelake-Server --- -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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(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 -Message-Id: <715abc0f90faafb7daa193dd24bad65046c36de0.1614766279.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - - - -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -Date: Tue, 26 May 2020 10:58:56 +0200 -Subject: [PATCH] cpu_map: Add 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 -Reviewed-by: Christian Ehrhardt -Tested-by: Christian Ehrhardt -(cherry picked from commit f4914045c2bff46b120c6c2af80066d24e48b609) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840008 - -Signed-off-by: Jiri Denemark -Message-Id: <3097db79eff1e45257ef12f891e8f9243bc8580f.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - - - - - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - - - -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 @@ - - -+ - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ -+ -+ - -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 @@ - - - -+ -+ -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ - -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 @@ - - - -+ -+ -+ - -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 @@ - - - -+ - - - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ - - -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 @@ - - - -+ -+ -+ -+ - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -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 @@ - - - -+ -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - -@@ -57,6 +58,7 @@ - - - -+ - - - qemu64 -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 @@ - - - -+ - - - -@@ -57,6 +58,7 @@ - - - -+ - - - qemu64 -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 @@ - - - -+ - - - -@@ -57,6 +58,7 @@ - - - -+ - - - qemu64 -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 @@ - - - -+ - - - -@@ -56,6 +57,7 @@ - - - -+ - - - qemu64 -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: -From: Jiri Denemark -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 -Reviewed-by: Daniel P. Berrangé -(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 -Message-Id: <04da640b0fbbbcec9be63e552a3029f983bf879a.1602172344.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ -+ -+ - - - -@@ -310,9 +313,18 @@ - - - -+ -+ -+ - - - -+ -+ -+ -+ -+ -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - --- -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 -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 -Reviewed-by: Daniel P. Berrangé -(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 -Message-Id: <27effeb5e12252982411796bd72e078d3afe49cb.1602172344.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ -+ -+ - - - - - - -+ -+ -+ - - - -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 @@ - - - -- -+ - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - -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 @@ - - - -+ - --- -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 -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 -Message-Id: <20200310104806.2723-2-christian.ehrhardt@canonical.com> -Reviewed-by: Jiri Denemark -(cherry picked from commit dd17a4eba8618aeb0144f268f2222f65a85425fc) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840008 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - - -+ - -+ - -+ - -+ - - - -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ - -- Skylake-Client-IBRS -+ Skylake-Client-noTSX-IBRS - Intel - - -@@ -26,6 +26,4 @@ - - - -- -- - -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 @@ - - x86_64 -- Broadwell-noTSX-IBRS -+ Skylake-Client-noTSX-IBRS - Intel -- - - - -@@ -18,22 +17,14 @@ - - - -- -- -- - -- - - - - - -- -- -- - - -- - - - -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 @@ - -- Skylake-Client-IBRS -+ Skylake-Client-noTSX-IBRS - Intel - - -@@ -14,6 +14,4 @@ - - - -- -- - -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 @@ - athlon - Westmere-IBRS - Westmere -+ Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -+ Skylake-Client-noTSX-IBRS - Skylake-Client-IBRS - Skylake-Client - SandyBridge-IBRS -@@ -79,7 +81,9 @@ - Nehalem - IvyBridge-IBRS - IvyBridge -+ Icelake-Server-noTSX - Icelake-Server -+ Icelake-Client-noTSX - Icelake-Client - Haswell-noTSX-IBRS - Haswell-noTSX -@@ -89,6 +93,7 @@ - EPYC - Dhyana - Conroe -+ Cascadelake-Server-noTSX - Cascadelake-Server - Broadwell-noTSX-IBRS - Broadwell-noTSX -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 @@ - athlon - Westmere-IBRS - Westmere -+ Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -+ Skylake-Client-noTSX-IBRS - Skylake-Client-IBRS - Skylake-Client - SandyBridge-IBRS -@@ -89,7 +91,9 @@ - Nehalem - IvyBridge-IBRS - IvyBridge -+ Icelake-Server-noTSX - Icelake-Server -+ Icelake-Client-noTSX - Icelake-Client - Haswell-noTSX-IBRS - Haswell-noTSX -@@ -99,6 +103,7 @@ - EPYC - Dhyana - Conroe -+ Cascadelake-Server-noTSX - Cascadelake-Server - Broadwell-noTSX-IBRS - Broadwell-noTSX -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 @@ - athlon - Westmere-IBRS - Westmere -+ Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -+ Skylake-Client-noTSX-IBRS - Skylake-Client-IBRS - Skylake-Client - SandyBridge-IBRS -@@ -78,7 +80,9 @@ - Nehalem - IvyBridge-IBRS - IvyBridge -+ Icelake-Server-noTSX - Icelake-Server -+ Icelake-Client-noTSX - Icelake-Client - Haswell-noTSX-IBRS - Haswell-noTSX -@@ -88,6 +92,7 @@ - EPYC - Dhyana - Conroe -+ Cascadelake-Server-noTSX - Cascadelake-Server - Broadwell-noTSX-IBRS - Broadwell-noTSX -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 @@ - athlon - Westmere-IBRS - Westmere -+ Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -+ Skylake-Client-noTSX-IBRS - Skylake-Client-IBRS - Skylake-Client - SandyBridge-IBRS -@@ -79,7 +81,9 @@ - Nehalem - IvyBridge-IBRS - IvyBridge -+ Icelake-Server-noTSX - Icelake-Server -+ Icelake-Client-noTSX - Icelake-Client - Haswell-noTSX-IBRS - Haswell-noTSX -@@ -89,6 +93,7 @@ - EPYC - Dhyana - Conroe -+ Cascadelake-Server-noTSX - Cascadelake-Server - Broadwell-noTSX-IBRS - Broadwell-noTSX -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 @@ - athlon - Westmere-IBRS - Westmere -+ Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -+ Skylake-Client-noTSX-IBRS - Skylake-Client-IBRS - Skylake-Client - SandyBridge-IBRS -@@ -88,7 +90,9 @@ - Nehalem - IvyBridge-IBRS - IvyBridge -+ Icelake-Server-noTSX - Icelake-Server -+ Icelake-Client-noTSX - Icelake-Client - Haswell-noTSX-IBRS - Haswell-noTSX -@@ -98,6 +102,7 @@ - EPYC - Dhyana - Conroe -+ Cascadelake-Server-noTSX - Cascadelake-Server - Broadwell-noTSX-IBRS - Broadwell-noTSX -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 @@ - athlon - Westmere-IBRS - Westmere -+ Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -+ Skylake-Client-noTSX-IBRS - Skylake-Client-IBRS - Skylake-Client - SandyBridge-IBRS -@@ -78,7 +80,9 @@ - Nehalem - IvyBridge-IBRS - IvyBridge -+ Icelake-Server-noTSX - Icelake-Server -+ Icelake-Client-noTSX - Icelake-Client - Haswell-noTSX-IBRS - Haswell-noTSX -@@ -88,6 +92,7 @@ - EPYC - Dhyana - Conroe -+ Cascadelake-Server-noTSX - Cascadelake-Server - Broadwell-noTSX-IBRS - Broadwell-noTSX --- -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 -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 -Reviewed-by: Pavel Hrdina -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ -+ -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -- -+ - -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 @@ - - - -+ - - - -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 @@ - - - -+ - -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 @@ - - - -+ - - - -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 @@ - - - -- -+ - -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 @@ - - - -+ - - -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 @@ - - - -+ - - - qemu64 -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 @@ - - - -+ - - - qemu64 -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 @@ - - - -+ - - - qemu64 -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 @@ - - - -+ - - - qemu64 --- -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 -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit e06dd56032acf904da1aedfc097fa0cae7cb0b0f) - -https://bugzilla.redhat.com/show_bug.cgi?id=1537734 - -Signed-off-by: Tim Wiederhake -Message-Id: <20210115141722.14986-5-twiederh@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ -+ -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - --- -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 -Date: Fri, 15 Jan 2021 15:17:19 +0100 -Subject: [PATCH] cpu_map: Add support for fsrm CPU feature - -Signed-off-by: Tim Wiederhake -Reviewed-by: Jiri Denemark -(cherry picked from commit 8c5c660b99101544d8cfcb8edbe48688c04bee25) - -https://bugzilla.redhat.com/show_bug.cgi?id=1537734 - -Signed-off-by: Tim Wiederhake -Message-Id: <20210115141722.14986-4-twiederh@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ -+ -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - --- -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 -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit 13db542cf3099f7955438e208dbe4b2b4e58067e) - -https://bugzilla.redhat.com/show_bug.cgi?id=1537734 - -Signed-off-by: Tim Wiederhake -Message-Id: <20210115141722.14986-6-twiederh@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ -+ -+ -+ -+ - -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 @@ - - - -+ - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - --- -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: -From: Tim Wiederhake -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 -Reviewed-by: Jiri Denemark -(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 -Message-Id: <20210115141722.14986-7-twiederh@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ - - - -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ - -- IvyBridge-IBRS -+ Snowridge - Intel - - -@@ -16,36 +16,17 @@ - - - -- - -- - - -- -- -- -- - -- -- - -- - -- -- -- - - -- -- -- -- -- -- - - - -- - - - -@@ -53,7 +34,8 @@ - - - -- -- -- -+ -+ -+ -+ - -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 @@ - -- IvyBridge-IBRS -+ Snowridge - Intel - - - -- - -- - -- -- -- -- -- -- -- - -- -- -- - - -- -- -- -- -- - -- - - - -@@ -36,6 +18,8 @@ - - - -- -- -+ -+ -+ -+ - -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-IBRS - Skylake-Server - Skylake-Client-IBRS -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-IBRS - Skylake-Server - Skylake-Client-IBRS -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-IBRS - Skylake-Server - Skylake-Client-IBRS -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server -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 @@ - athlon - Westmere-IBRS - Westmere -+ Snowridge - Skylake-Server-noTSX-IBRS - Skylake-Server-IBRS - Skylake-Server --- -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: -From: Markus Schade -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 -Reviewed-by: Jiri Denemark -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - - - -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ - -- EPYC-IBPB -+ EPYC-Rome - AMD - - - -- -- -- - - - -@@ -17,18 +14,11 @@ - - - -- - - -- -- -- -- - -- - - -- - - - -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 @@ - - x86_64 -- EPYC-IBPB -+ EPYC-Rome - AMD - - - -- -- -- - - - -@@ -18,18 +15,11 @@ - - - -- - - -- -- -- -- - -- - - -- - - - -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 @@ - -- EPYC-IBPB -+ EPYC-Rome - AMD - - - - -- -- -- - - - - - - -- -- -- -- -- - - -- -- - - - -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 @@ - Haswell-noTSX - Haswell-IBRS - Haswell -+ EPYC-Rome - EPYC-IBPB - EPYC - Dhyana -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 @@ - Haswell-noTSX - Haswell-IBRS - Haswell -+ EPYC-Rome - EPYC-IBPB - EPYC - Dhyana -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 @@ - Haswell-noTSX - Haswell-IBRS - Haswell -+ EPYC-Rome - EPYC-IBPB - EPYC - Dhyana --- -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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 5d6059f8ec16d64f240dc5e6413ca55a3b46b3f7) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <8711c401083e2605e7d8734764a5fe1b092749b0.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - -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 @@ - -- Cascadelake-Server -+ Skylake-Server-IBRS - Intel - - -@@ -20,14 +20,15 @@ - - - -+ - - - - - -+ - - - - -- - -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 @@ - -- Cascadelake-Server -+ Skylake-Server-IBRS - Intel - - - - -+ - - - - - -+ - - -- - --- -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: -From: Jiri Denemark -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 -Reviewed-by: Daniel P. Berrangé -(cherry picked from commit 1c425857fb9f652c7811f075f3d31ff561b95632) - -https://bugzilla.redhat.com/show_bug.cgi?id=1781878 - -Signed-off-by: Jiri Denemark -Message-Id: <98b6a65536435b8130694e50adc9f39ff3110d90.1590652079.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Christian Ehrhardt -Tested-by: Christian Ehrhardt -(cherry picked from commit 17cdefe5f197030c70a0d250f3c5387b41663516) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840008 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - -- -+ - - - -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 @@ - - -- -+ - - - -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 @@ - - -- -+ - - - -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 @@ - - -- -+ - - - - - -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 @@ - -- Skylake-Client-noTSX-IBRS -+ Skylake-Client-IBRS - Intel - - -@@ -26,4 +26,6 @@ - - - -+ -+ - -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 @@ - -- Skylake-Client-noTSX-IBRS -+ Skylake-Client-IBRS - Intel - - -@@ -14,4 +14,6 @@ - - - -+ -+ - --- -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: -From: Tim Wiederhake -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit 1278ac6265589cd83cc2e661056c860e98105507) - -https://bugzilla.redhat.com/show_bug.cgi?id=1537734 - -Signed-off-by: Tim Wiederhake -Message-Id: <20210115141722.14986-2-twiederh@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - --- -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: -From: Jiri Denemark -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 -Reviewed-by: Tim Wiederhake -(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 -Message-Id: <75071287f9fc55f4bec82916726fcb8f31c1e014.1614847231.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - - --- -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 -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 -Reviewed-by: Pavel Hrdina -(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 -Message-Id: <77cf69a7222fd9fc5ef0f1c25f0534090c29865f.1614766279.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Peter Krempa -(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 -Message-Id: <74b9257f49925312b025a99dd934a9613ca295d4.1602172344.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -- - - - -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 @@ - EPYC-Rome - AMD - -+ - - - -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 @@ - EPYC-Rome - AMD - -+ - - - -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 @@ - - - -- - --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit c7a27949954d78dc95459758e329fb9c580361bb) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <20bd9df72a22a004bb665409ddba20ff89a5b66d.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 70f3041d39802e53a19901bee040ff33850cd5e0) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <3db9e891cf44e608a45504b120a5c276ead3ea8d.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 8452779049ef785b1d2e373b4d42633d4a929a60) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <1126fcc8a0e18f0eed38c182013429fd7266c274.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -Date: Tue, 26 May 2020 10:58:57 +0200 -Subject: [PATCH] cpu_x86: Honor CPU models' element -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Jiri Denemark -Reviewed-by: Christian Ehrhardt -Tested-by: Christian Ehrhardt -(cherry picked from commit 7cd896ef31d33f78d40df918a33fe3867e251509) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840008 - -Signed-off-by: Jiri Denemark -Message-Id: <15f1eedf2c0df29a3942b4b28bc4575fa51ca19a.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 3b474c1f8f3c1f124fab303625733ea79047660c) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <1fe352bfb7cf40b5b8e24eea3bf4e476269adb92.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 372b2cf1ca3f4361546732a3f5f9c0c0be2591e9) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <163ef39d14ce5457272e7508172f64d58d22a56b.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit a8ec1d746ed41ac76df2e28cbc5683b3e37b9a60) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <0d4f902805cd5534eadedd2ec61385e9798c8b40.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 782be9f0af2e02e725fca45b7674e8b2f008dc6c) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <7662ee03449ae588a5381c546eb7e8a3b64cadb3.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 8dc791b5d3b20552cc0b8d6c04e34dd0f3ebe2ff) - -https://bugzilla.redhat.com/show_bug.cgi?id=1839999 - -Signed-off-by: Jiri Denemark -Message-Id: <169ed0334144715b52575ca3f7e67ce3170ba91a.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 -Message-Id: <21c1eee9c7bb3811f43aa044bb97fa373a159e26.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 5efefe7d7eb129b72bcbbebfbba2d5750ffeeeff) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 3b5f1ca58e8f12bc7b768206cb9c7c2ef237e3ff) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <0834c0debe689b9b8a5f694738edc149856a08fa.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit bc62d7a49141d745b19d066c07599f228020a0b3) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <548eeddbf9eabf5e4a872390189bb0adf746c75f.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit a32a3e934f5e7769dc9d12a221f344319200b435) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <240a340d63d1c8612e58c2d5c52970291f3e7b6d.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit c1532711dda6db27c7f6fa7d86ab5ec5d2ab2224) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit ff6897c84504a3e663759d710968ad1f72bc9208) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 4a7f6f43a2a6144780d7ab74b8a6f6b008a7aa9d) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <94056710375d491c42d12a46b20f670453c2a1c8.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 3c650a8f7a89046b925fb5ddc78c4b6669ed76ef) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <63da1b86ef1c4f174234ff34e43d502afe326a2b.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit dff59020187c34e3f814c2aa24f3832d1d5b34f9) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <574920457f9fec4bc1938615016278eddd46ba90.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit e0244a786db265647ab6c1c37ca3852876e4b0a3) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <1d8ad3e099081c35a41e1013458fa52d8fb4fae0.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 2748e91c548cbc48a5ea499e06e62de528c10d20) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <5c29b10ead2332033087fc6ed487c9ca53b7e3a4.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit edf3c9045f1742d6c132066e4ba2da25c9ad7b26) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <6022f3717ce7ab0df25d31f2aaa08cac1c5f82de.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 4f2fdad36db2da1aa139470846b3f60f65da8424) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <6f88b9d54c70352f9e4aeadd515cd9f4a599545a.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 9bb9cbf6761ecf985fe9cf8a18030a8aff9b448b) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <1414d86a79eb63d5600cf494455411814cbf10f7.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit e6e54fcebe99f1c07fe905c419cbe5d12f6844b1) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <4729842dcc538cca58a2ccd18fe2bcf9be410bbb.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 5b45d2cf1ff0d2d972f103a678c01bc0eb7c1e18) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 3125688f78f6289e51bfdaa196addb230b0de4e1) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <14cf6ca6816ee8bda3e195aa5218162b280715b5.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 93f173adbecee92f9973745a2aca65a27c4aa8a6) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit b239a60967cc2979f01e4521d6582b7d6acedd72) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 2f9d15b495efdd9e63c07cd6fda611701e71ee46) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 6a0a7db9041cb1d8d92919bb4adf0d19bdd5dd68) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <3d21717ab7a594e301afc7f33ddbb32b57a8c56e.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 800868583012e20fb60eb4be9fb1ccc018677006) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 51b6e9c1000151cc515804134a00ccb0d7b3e44a) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <4c4090765c01f7359c521cb09d247b1694afbe9c.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 247e115e2753bde7957cc07a20d5a48a8a6632b0) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <0e3dc412e6e755f75e39a9ec22b2b5549c82930e.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit ccc0c2e4de58d62308e224076a7aa979ae97b520) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 8a41417b23dda97eb09bcd2921c1ab0d5fbce1b6) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit e43e2ff7f5b629f979e56387c4be46f2be251b75) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <1d1d9c9b60f1ea44a2252cb2fbfbf3886ecd245f.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Tim Wiederhake -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit 5c17a7ba41670f3182186c06e621995b5d03fc95) - -https://bugzilla.redhat.com/show_bug.cgi?id=1926864 - -Signed-off-by: Jiri Denemark -Message-Id: <0aee3baa35e04f56e3c95bb2f60c8a17d7806e7a.1614766279.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ -+ -+ - - - -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 @@ - - - -+ - - - -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 @@ - - - -+ - - - --- -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 -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit 5ac6ab2fde63881d3c5cc7372a0d0e59618feb55) - -https://bugzilla.redhat.com/show_bug.cgi?id=1926864 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ -+ -+ - - - --- -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 -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 -Reviewed-by: Pavel Hrdina -(cherry picked from commit 58691208e2063285d981a620873d48ddf8df8be5) - -https://bugzilla.redhat.com/show_bug.cgi?id=1781878 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ x86_64 -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -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 -Reviewed-by: Christian Ehrhardt -(cherry picked from commit 62a50628ff34cf4c2c95e82bc645a4648b8f0422) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840008 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Skylake-Client-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ x86_64 -+ Broadwell-noTSX-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Skylake-Client-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 3714779b15e594a14de4e6fe49c2e3eafe39b161) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ x86_64 -+ Skylake-Server-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 8605960389d208936b7f2cf3d2842a22a1aa7e22) - -https://bugzilla.redhat.com/show_bug.cgi?id=1840010 - -Signed-off-by: Jiri Denemark -Message-Id: <72ee1c6054fd300004508dd4fa01fd319dc2b527.1590483392.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ x86_64 -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ Cascadelake-Server -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -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 -Reviewed-by: Jiri Denemark -(cherry picked from commit 59a585fdb047669ee36251c7338bb2e2ccd58998) - -https://bugzilla.redhat.com/show_bug.cgi?id=1537734 - -Signed-off-by: Tim Wiederhake -Message-Id: <20210115141722.14986-3-twiederh@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ IvyBridge-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ x86_64 -+ Westmere-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ IvyBridge-IBRS -+ Intel -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -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 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -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 -Signed-off-by: Boris Fiuczynski -Reviewed-by: Paulo de Rezende Pinatti -Reviewed-by: Erik Skultety -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ -

    Secure usage
    -
    Secure usage of the libvirt APIs
    - -+
    Protected virtualization on s390
    -+
    Running secure s390 guests with IBM Secure Execution
    -+ -
    Launch security
    -
    Securely launching VMs with AMD SEV
    - -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 -+``_ -+ -+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 -+ -+:: -+ -+ -+ -+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. -+ -+:: -+ -+ -+ -+ -+ -+ -+ -+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 -+ -+:: -+ -+ -+ -+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 -+ -+:: -+ -+ -+ protected -+ 2048000 -+ 2048000 -+ 1 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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 -Date: Wed, 19 Feb 2020 15:10:19 +0100 -Subject: [PATCH] docs: Document the new sub-element of disk's - -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 element filled with either a for the -offset of the image format data. - -Add the XML documentation and RNG schema. - -Signed-off-by: Peter Krempa -Reviewed-by: Ján Tomko -(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 ---- - 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. - Since 6.0.0 -
    -+
    slices
    -+
    The slices element using its slice -+ sub-elements allows configuring offset and size of either the -+ location of the image format (slice type='storage') -+ inside the storage source or the guest data inside the image format -+ container (future expansion). -+ -+ The offset and size values are in bytes. -+ Since 6.1.0 -+
    - - -

    -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 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - - - - -+ -+ -+ -+ -+ storage -+ -+ -+ -+ -+ - - - --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 1d742a8772848a72667e1e5e0fa0841abf0af647) - -https://bugzilla.redhat.com/show_bug.cgi?id=1762634 - -Signed-off-by: Andrea Bolognani -Message-Id: <20200214135034.719753-1-abologna@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 - -- since 3.2.0) -- or "hypervclock" -- (qemu - since 1.2.2). -+ since 3.2.0), "hypervclock" -+ (qemu - since 1.2.2) or -+ "armvtimer" (qemu - since 6.1.0). - - The hypervclock 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: -From: Boris Fiuczynski -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 -Reviewed-by: Erik Skultety -(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 -Message-Id: <1229877019008ac6f0135296af502e596c3e30e5.1592996194.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: - - - --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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit aecf1f5d702ad710aed99a688f38f05cc304b03a) -Signed-off-by: Ján Tomko - -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: -Reviewed-by: Michal Privoznik ---- - 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 @@ -

    Backing chain management
    -
    Explanation of how disk backing chain specification impacts libvirt's - behaviour and basic troubleshooting steps of disk problems.
    -+ -+
    Virtio-FS
    -+
    Share a filesystem between the guest and the host
    - - - -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: -+ -+ :: -+ -+ -+ ... -+ -+ -+ -+ -+ -+ ... -+ -+ -+ 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 -+ -+ :: -+ -+ -+ ... -+ -+ -+ -+ ... -+ -+ -+ This will create a file in the directory specified in ``qemu.conf`` -+ -+ * Hugepage-backed memory -+ -+ :: -+ -+ -+ ... -+ -+ -+ -+ -+ -+ -+ ... -+ -+ -+#. Add the ``vhost-user-fs`` QEMU device via the ``filesystem`` element -+ -+ :: -+ -+ -+ ... -+ -+ ... -+ -+ -+ -+ -+ -+ ... -+ -+ -+ -+ 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 -+ -+:: -+ -+ -+ -+ -+ -+ --- -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: -From: Laine Stump -Date: Thu, 30 Jan 2020 14:12:44 -0500 -Subject: [PATCH] docs: document subelement -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Laine Stump -Reviewed-by: Daniel P. Berrangé -(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 -Message-Id: <20200130191244.24174-7-laine@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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> - ... - -+
    Teaming a virtio/hostdev NIC pair
    -+ -+

    -+ 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) -+ -+ The <teaming> 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). -+

    -+ -+
    -+...
    -+<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>
    -+...
    -+ -+

    -+ The <teaming> element required -+ attribute type will be set to -+ either "persistent" to indicate a device that -+ should always be present in the domain, -+ or "transient" 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 <teaming> called "persistent" -+ - this attribute should be set to the alias name of the other -+ device in the pair (the one that has <teaming -+ type="persistent'/>). -+

    -+

    -+ In the particular case of QEMU, -+ libvirt's <teaming> element is used to setup -+ a virtio-net "failover" device pair. For this setup, the -+ persistent device must be an interface with <model -+ type="virtio"/>, and the transient device must -+ be <interface type='hostdev'/> -+ (or <interface type='network'/> 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). -+

    -+

    -+ 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-"). -+

    -+

    -+ 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. -+

    -+

    -+ 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 <source> of the -+ hostdev NIC (<interface type='hostdev'>) 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. -+

    - -
    Multicast tunnel
    - -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 @@ - - -
    -+ -+ -+ support for virtio+hostdev NIC <teaming> -+ -+ -+ 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. -+ -+ - - - 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 -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 . Mention it in the docs. - -Signed-off-by: Peter Krempa -Reviewed-by: Pavel Hrdina -(cherry picked from commit 7d7e7e2c197782ce06525b0a63cd43e452c3a711) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - -

    Reports whether the hypervisor supports the backup, checkpoint, and - related features. (virDomainBackupBegin, -- virDomainCheckpointCreateXML etc). -+ virDomainCheckpointCreateXML etc). The presence of the -+ backup element even if supported='no' implies that -+ the VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA flag for -+ virDomainUndefine is supported. -

    - -

    SEV capabilities

    --- -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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Fixes: f0f34056ab26eaa9f903a51cd1fa155088fd640f -(cherry picked from commit 5b63cb5abff09882feda8e333285259aecc8e9e8) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1805742 -Message-Id: -Reviewed-by: Jiri Denemark ---- - 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 @@ - -

    - 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) - --- -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 -Date: Wed, 19 Feb 2020 15:10:13 +0100 -Subject: [PATCH] docs: formatdomain: Close 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 -Reviewed-by: Ján Tomko -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Ján Tomko -(cherry picked from commit b24281c93405d6e3efb6edb3e7abff31628966b8) -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Jiri Denemark ---- - 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 @@ -

    - The protocol 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". - --

    If the protocol attribute is "rbd", "sheepdog", -- "gluster", or "vxhs", an additional attribute name -+

    For any protocol other than nbd -+ an additional attribute name - is mandatory to specify which volume/image will be used. -

    - --- -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 -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 -Reviewed-by: Kashyap Chamarthy -Reviewed-by: Michal Privoznik -(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 -Message-Id: -Reviewed-by: Michal Privoznik ---- - 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, type should be - pflash. Moreover, some firmwares may - implement the Secure boot feature. Attribute -- secure can be used then to control it. -+ secure 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. - Since 2.1.0
    -
    nvram
    -
    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 -Date: Sun, 26 Apr 2020 13:04:09 -0400 -Subject: [PATCH] docs: mention hotplug='off' in news.xml - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik -(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 -Message-Id: <20200426170415.18328-7-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 @@ - -
    -
    -+ -+ -+ qemu: support disabling hotplug/unplug of PCIe devices -+ -+ -+ 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). -+ -+ - - - 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: -From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= -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

    tags inside the -

  • , 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é -Reviewed-by: Ján Tomko -(cherry picked from commit 4be5a2f0c2c6f1236828592d8cb9ca5dc6f9df10) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <7d1090688b1ea9a76e46416d461784318b5cb8d4.1583322090.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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?= -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 ... -instead of .... 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
     blocks.
    -
    -Reviewed-by: Ján Tomko 
    -Signed-off-by: Daniel P. Berrangé 
    -(cherry picked from commit 039787c71a2bee6e60ddf5cb0515c0cdb85dd20b)
    -Signed-off-by: Ján Tomko 
    -https://bugzilla.redhat.com/show_bug.cgi?id=1694166
    -Message-Id: <72f7f14e62e058c436303fdeed68986f435b9011.1583322090.git.jtomko@redhat.com>
    -Reviewed-by: Michal Privoznik 
    ----
    - 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: 
    -From: Pavel Hrdina 
    -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  changed the cpu quota
    -value that reflects what kernel allows but did not update our
    -documentation.
    -
    -Signed-off-by: Pavel Hrdina 
    -Reviewed-by: Michal Privoznik 
    -(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 
    -Message-Id: 
    -Reviewed-by: Ján Tomko 
    ----
    - 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 quota 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.
    -         Only QEMU driver support since 0.9.4, LXC since
    -@@ -894,7 +894,7 @@
    -         domain. A domain with global_quota 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 global_quota
    -+        [1000, 17592186044415] or less than 0. A global_quota
    -         with value 0 means no value.
    -         Only QEMU driver support since 1.3.3
    -       
    -@@ -915,7 +915,7 @@
    -         excluding vCPUs). A domain with emulator_quota 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.
    -         Only QEMU driver support since 0.10.0
    -       
    -@@ -937,7 +937,7 @@
    -         iothread_quota 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 iothread_quota
    -+        [1000, 17592186044415] or less than 0. An iothread_quota
    -         with value 0 means no value. You can use this feature to ensure that
    -         all IOThreads run at the same speed.
    -         Only QEMU driver support since 2.1.0
    -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 @@
    -   
    -     
    -       -?[0-9]+
    --      18446744073709551
    -+      17592186044415
    -       -1
    -     
    -   
    --- 
    -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 
    -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 
    -Reviewed-by: Pavel Hrdina 
    -(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 
    -Message-Id: <82f4beea71e682c43ec10370d5a43a608d1cb411.1621599207.git.phrdina@redhat.com>
    -Reviewed-by: Michal Privoznik 
    ----
    - 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 
    -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  and
    -<98a09ca48ed4fc011abf2aa290e02ce1b8f1bb5f> fixed the code to use
    -defines instead of magic numbers but missed this place.
    -
    -Following commit  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 
    -Reviewed-by: Michal Privoznik 
    -(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 
    -Message-Id: <63a44700876e2bd59f276fcd8395abaff011b4c1.1614858616.git.phrdina@redhat.com>
    -Reviewed-by: Ján Tomko 
    ----
    - 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?= 
    -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:
    -
    - 
    -   
    -   
    -   
    -   
    - 
    -
    -Notice how core_id is repeated within the scope of the same socket_id.
    -
    -It now reports
    -
    - 
    -   
    -   
    -   
    -   
    - 
    -
    -So core_id is now unique within a (socket_id, die_id) pair.
    -
    -Reviewed-by: Daniel Henrique Barboza 
    -Reviewed-by: Jiri Denemark 
    -Signed-off-by: Daniel P. Berrangé 
    -(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 
    ----
    - 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 @@
    -         
    -           
    -         
    -+        
    -+          
    -+        
    -         
    -           
    -         
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -28,10 +28,10 @@
    -           6144
    -           8192
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -40,10 +40,10 @@
    -           8192
    -           10240
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -52,10 +52,10 @@
    -           10240
    -           12288
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -26,10 +26,10 @@
    -           6144
    -           8192
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -38,10 +38,10 @@
    -           8192
    -           10240
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -50,10 +50,10 @@
    -           10240
    -           12288
    -           
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -31,12 +31,12 @@
    -           6144
    -           8192
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -31,12 +31,12 @@
    -           6144
    -           8192
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -31,12 +31,12 @@
    -           6144
    -           8192
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    -+            
    -           
    -         
    -       
    -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 @@
    -           4096
    -           6144
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -         
    -@@ -31,12 +31,12 @@
    -           6144
    -           8192
    -           
    --            
    --            
    --            
    --            
    --            
    --            
    -+            
    -+            
    -+            
    -+            
    -+            
    -+            
    -           
    -         
    -       
    --- 
    -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: 
    -From: Thomas Huth 
    -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 
    -Reviewed-by: Ján Tomko 
    -(cherry picked from commit 964738cff3d949d90fc5c3317a2618fcd8d217b4)
    -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1940449
    -Signed-off-by: Thomas Huth 
    -Message-Id: <20210511121028.304070-2-thuth@redhat.com>
    -Reviewed-by: Erik Skultety 
    ----
    - 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 
    -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  is in use by
    -driver QEMU, domain "
    -
    -Fixes: https://gitlab.com/libvirt/libvirt/-/issues/119
    -
    -Signed-off-by: Erik Skultety 
    -Reviewed-by: Ján Tomko 
    -(cherry picked from commit 49cb59778a4e6c2d04bb9383a9d97fbbc83f9fce)
    -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1940449
    -Signed-off-by: Thomas Huth 
    -Message-Id: <20210511121028.304070-3-thuth@redhat.com>
    -Reviewed-by: Erik Skultety 
    ----
    - 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 
    -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 
    -Reviewed-by: Eric Blake 
    -(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: 
    -Reviewed-by: Ján Tomko 
    ----
    - 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 @@
    - 
    -         
    Virtio-FS
    -
    Share a filesystem between the guest and the host
    -+ -+
    Incremental backup internals
    -+
    Incremental backup implementation details relevant for users
    - - - -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 `_ 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -Reviewed-by: Daniel P. Berrangé -(cherry picked from commit d552b93448e253552c7e53a1240132c9763d2b24) - -https://bugzilla.redhat.com/show_bug.cgi?id=1798148 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 - ```` - -+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-lib-Fix-calling-of-virNetworkUpdate-driver-callback.patch b/SOURCES/libvirt-lib-Fix-calling-of-virNetworkUpdate-driver-callback.patch deleted file mode 100644 index ec02048..0000000 --- a/SOURCES/libvirt-lib-Fix-calling-of-virNetworkUpdate-driver-callback.patch +++ /dev/null @@ -1,210 +0,0 @@ -From 39a12e8336d314a1f1e6ed1abf15e4ff10f6f81e Mon Sep 17 00:00:00 2001 -Message-Id: <39a12e8336d314a1f1e6ed1abf15e4ff10f6f81e@dist-git> -From: Michal Privoznik -Date: Mon, 10 Jan 2022 12:08:08 +0100 -Subject: [PATCH] lib: Fix calling of virNetworkUpdate() driver callback - -The order in which virNetworkUpdate() accepts @section and -@command arguments is not the same as in which it passes them -onto networkUpdate() callback. Until recently, it did not really -matter, because calling the API on client side meant arguments -were encoded in reversed order (compared to the public API), but -then on the server it was fixed again - because the server -decoded RPC (still swapped), called public API (still swapped) -and in turn called the network driver callback (with reversing -the order - so magically fixing the order). - -Long story short, if the public API is called even number of -times those swaps cancel each other out. The problem is when the -API is called an odd numbed of times - which happens with split -daemons and the right URI. There's one call in the client (e.g. -virsh net-update), the other in a hypervisor daemon (say -virtqemud) which ends up calling the API in the virnetworkd. - -The fix is obvious - fix the order in which arguments are passed -to the callback. - -But, to maintain compatibility with older, yet unfixed, daemons -new connection feature is introduced. The feature is detected -just before calling the callback and allows client to pass -arguments in correct order (talking to fixed daemon) or in -reversed order (talking to older daemon). - -Unfortunately, older client talking to newer daemon can't be -fixed. Let's hope that it's less frequent scenario. - -Fixes: 574b9bc66b6b10cc4cf50f299c3f0ff55f2cbefb -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1870552 -Signed-off-by: Michal Privoznik -Reviewed-by: Martin Kletzander -(cherry picked from commit b0f78d626a18bcecae3a4d165540ab88bfbfc9ee) -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2038812 -Signed-off-by: Michal Privoznik -Message-Id: <4601f7b2c8ef354e0f8c8020ecd1bb20b20d0f53.1641812574.git.mprivozn@redhat.com> -Reviewed-by: Jiri Denemark ---- - src/esx/esx_driver.c | 3 +++ - src/libvirt-network.c | 24 ++++++++++++++++++++++-- - src/libvirt_internal.h | 5 +++++ - src/libxl/libxl_driver.c | 1 + - src/lxc/lxc_driver.c | 1 + - src/network/bridge_driver.c | 2 ++ - src/openvz/openvz_driver.c | 1 + - src/qemu/qemu_driver.c | 1 + - src/remote/remote_daemon_dispatch.c | 1 + - src/test/test_driver.c | 1 + - 10 files changed, 38 insertions(+), 2 deletions(-) - -diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c -index 0ede65279a..07ce7961b0 100644 ---- a/src/esx/esx_driver.c -+++ b/src/esx/esx_driver.c -@@ -1059,6 +1059,9 @@ esxConnectSupportsFeature(virConnectPtr conn, int feature) - return priv->vCenter && - supportsVMotion == esxVI_Boolean_True ? 1 : 0; - -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: -+ return 1; -+ - case VIR_DRV_FEATURE_FD_PASSING: - case VIR_DRV_FEATURE_MIGRATE_CHANGE_PROTECTION: - case VIR_DRV_FEATURE_MIGRATION_DIRECT: -diff --git a/src/libvirt-network.c b/src/libvirt-network.c -index 09e24fb0a8..9edd30d2b7 100644 ---- a/src/libvirt-network.c -+++ b/src/libvirt-network.c -@@ -543,8 +543,28 @@ virNetworkUpdate(virNetworkPtr network, - - if (conn->networkDriver && conn->networkDriver->networkUpdate) { - int ret; -- ret = conn->networkDriver->networkUpdate(network, section, command, -- parentIndex, xml, flags); -+ int rc; -+ -+ /* Since its introduction in v0.10.2-rc1~9 the @section and @command -+ * arguments were mistakenly swapped when passed to driver's callback. -+ * Detect if the other side is fixed already or not. */ -+ rc = VIR_DRV_SUPPORTS_FEATURE(conn->driver, conn, -+ VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER); -+ -+ VIR_DEBUG("Argument order feature detection returned: %d", rc); -+ if (rc < 0) -+ goto error; -+ -+ if (rc == 0) { -+ /* Feature not supported, preserve swapped order */ -+ ret = conn->networkDriver->networkUpdate(network, section, command, -+ parentIndex, xml, flags); -+ } else { -+ /* Feature supported, correct order can be used */ -+ ret = conn->networkDriver->networkUpdate(network, command, section, -+ parentIndex, xml, flags); -+ } -+ - if (ret < 0) - goto error; - return ret; -diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h -index 4a74dbc2af..21b7243557 100644 ---- a/src/libvirt_internal.h -+++ b/src/libvirt_internal.h -@@ -123,6 +123,11 @@ typedef enum { - * Support for driver close callback rpc - */ - VIR_DRV_FEATURE_REMOTE_CLOSE_CALLBACK = 15, -+ -+ /* -+ * Whether the virNetworkUpdate() API implementation passes arguments to -+ * the driver's callback in correct order. */ -+ VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER = 16, - } virDrvFeature; - - -diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c -index 9269e9b475..827a58b2c6 100644 ---- a/src/libxl/libxl_driver.c -+++ b/src/libxl/libxl_driver.c -@@ -5714,6 +5714,7 @@ libxlConnectSupportsFeature(virConnectPtr conn, int feature) - case VIR_DRV_FEATURE_TYPED_PARAM_STRING: - case VIR_DRV_FEATURE_MIGRATION_PARAMS: - case VIR_DRV_FEATURE_MIGRATION_P2P: -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: - return 1; - case VIR_DRV_FEATURE_FD_PASSING: - case VIR_DRV_FEATURE_MIGRATE_CHANGE_PROTECTION: -diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c -index 853ddac8b9..8cf4dbab57 100644 ---- a/src/lxc/lxc_driver.c -+++ b/src/lxc/lxc_driver.c -@@ -1699,6 +1699,7 @@ lxcConnectSupportsFeature(virConnectPtr conn, int feature) - - switch ((virDrvFeature) feature) { - case VIR_DRV_FEATURE_TYPED_PARAM_STRING: -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: - return 1; - case VIR_DRV_FEATURE_FD_PASSING: - case VIR_DRV_FEATURE_MIGRATE_CHANGE_PROTECTION: -diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c -index 703348888a..cd6d09e164 100644 ---- a/src/network/bridge_driver.c -+++ b/src/network/bridge_driver.c -@@ -968,6 +968,8 @@ networkConnectSupportsFeature(virConnectPtr conn, int feature) - return -1; - - switch ((virDrvFeature) feature) { -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: -+ return 1; - case VIR_DRV_FEATURE_MIGRATION_V2: - case VIR_DRV_FEATURE_MIGRATION_V3: - case VIR_DRV_FEATURE_MIGRATION_P2P: -diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c -index 62644f3129..22715c8e22 100644 ---- a/src/openvz/openvz_driver.c -+++ b/src/openvz/openvz_driver.c -@@ -2007,6 +2007,7 @@ openvzConnectSupportsFeature(virConnectPtr conn G_GNUC_UNUSED, int feature) - switch ((virDrvFeature) feature) { - case VIR_DRV_FEATURE_MIGRATION_PARAMS: - case VIR_DRV_FEATURE_MIGRATION_V3: -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: - return 1; - case VIR_DRV_FEATURE_FD_PASSING: - case VIR_DRV_FEATURE_MIGRATE_CHANGE_PROTECTION: -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 3914d3ff68..73f6247f2e 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -1215,6 +1215,7 @@ qemuConnectSupportsFeature(virConnectPtr conn, int feature) - case VIR_DRV_FEATURE_XML_MIGRATABLE: - case VIR_DRV_FEATURE_MIGRATION_OFFLINE: - case VIR_DRV_FEATURE_MIGRATION_PARAMS: -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: - return 1; - case VIR_DRV_FEATURE_MIGRATION_DIRECT: - case VIR_DRV_FEATURE_MIGRATION_V1: -diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c -index 9c294ddc39..b82548a999 100644 ---- a/src/remote/remote_daemon_dispatch.c -+++ b/src/remote/remote_daemon_dispatch.c -@@ -5009,6 +5009,7 @@ static int remoteDispatchConnectSupportsFeature(virNetServerPtr server G_GNUC_UN - case VIR_DRV_FEATURE_XML_MIGRATABLE: - case VIR_DRV_FEATURE_MIGRATION_OFFLINE: - case VIR_DRV_FEATURE_MIGRATION_PARAMS: -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: - default: - if ((supported = virConnectSupportsFeature(conn, args->feature)) < 0) - goto cleanup; -diff --git a/src/test/test_driver.c b/src/test/test_driver.c -index 1908185743..d21fedbcf8 100644 ---- a/src/test/test_driver.c -+++ b/src/test/test_driver.c -@@ -1588,6 +1588,7 @@ testConnectSupportsFeature(virConnectPtr conn G_GNUC_UNUSED, - { - switch ((virDrvFeature) feature) { - case VIR_DRV_FEATURE_TYPED_PARAM_STRING: -+ case VIR_DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER: - return 1; - case VIR_DRV_FEATURE_MIGRATION_V2: - case VIR_DRV_FEATURE_MIGRATION_V3: --- -2.34.1 - diff --git a/SOURCES/libvirt-network-Implement-virConnectSupportsFeature.patch b/SOURCES/libvirt-network-Implement-virConnectSupportsFeature.patch deleted file mode 100644 index ee78f4e..0000000 --- a/SOURCES/libvirt-network-Implement-virConnectSupportsFeature.patch +++ /dev/null @@ -1,81 +0,0 @@ -From d6c2ed7802c150c9bd2d125e5757aabff5f75d05 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Michal Privoznik -Date: Mon, 10 Jan 2022 12:08:07 +0100 -Subject: [PATCH] network: Implement virConnectSupportsFeature() - -So far, it was not needed, but shortly a client will want to know -whether virNetworkUpdate() API is fixed or not. See next commits -for more info. - -Side note, this driver's implementation is called only when using -sub-driver's connection, i.e. "network:///system". For any other -URI the corresponding hypervisor's driver callback is called. - -Signed-off-by: Michal Privoznik -Reviewed-by: Martin Kletzander -(cherry picked from commit 94741bc53e9b9a405fae8f2e96b780c2891b2ff0) - -Conflicts: -- src/network/bridge_driver.c: Well, context. The code in - RHEL-8.5.0 is very old and this commit is very new. It's - nothing unexpected. - -https://bugzilla.redhat.com/show_bug.cgi?id=2038812 -Signed-off-by: Michal Privoznik -Message-Id: <9f53a76a7bdeac4e4d85aace8f8dcbe008bc25df.1641812574.git.mprivozn@redhat.com> -Reviewed-by: Jiri Denemark ---- - src/network/bridge_driver.c | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c -index b8118067d1..703348888a 100644 ---- a/src/network/bridge_driver.c -+++ b/src/network/bridge_driver.c -@@ -961,6 +961,34 @@ static int networkConnectIsAlive(virConnectPtr conn G_GNUC_UNUSED) - } - - -+static int -+networkConnectSupportsFeature(virConnectPtr conn, int feature) -+{ -+ if (virConnectSupportsFeatureEnsureACL(conn) < 0) -+ return -1; -+ -+ switch ((virDrvFeature) feature) { -+ case VIR_DRV_FEATURE_MIGRATION_V2: -+ case VIR_DRV_FEATURE_MIGRATION_V3: -+ case VIR_DRV_FEATURE_MIGRATION_P2P: -+ case VIR_DRV_FEATURE_MIGRATE_CHANGE_PROTECTION: -+ case VIR_DRV_FEATURE_FD_PASSING: -+ case VIR_DRV_FEATURE_TYPED_PARAM_STRING: -+ case VIR_DRV_FEATURE_XML_MIGRATABLE: -+ case VIR_DRV_FEATURE_MIGRATION_OFFLINE: -+ case VIR_DRV_FEATURE_MIGRATION_PARAMS: -+ case VIR_DRV_FEATURE_MIGRATION_DIRECT: -+ case VIR_DRV_FEATURE_MIGRATION_V1: -+ case VIR_DRV_FEATURE_PROGRAM_KEEPALIVE: -+ case VIR_DRV_FEATURE_REMOTE: -+ case VIR_DRV_FEATURE_REMOTE_CLOSE_CALLBACK: -+ case VIR_DRV_FEATURE_REMOTE_EVENT_CALLBACK: -+ default: -+ return 0; -+ } -+} -+ -+ - /* networkKillDaemon: - * - * kill the specified pid/name, and wait a bit to make sure it's dead. -@@ -5824,6 +5852,7 @@ static virHypervisorDriver networkHypervisorDriver = { - .connectIsEncrypted = networkConnectIsEncrypted, /* 4.1.0 */ - .connectIsSecure = networkConnectIsSecure, /* 4.1.0 */ - .connectIsAlive = networkConnectIsAlive, /* 4.1.0 */ -+ .connectSupportsFeature = networkConnectSupportsFeature, /* 7.2.0 */ - }; - - --- -2.34.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 -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 -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: <20210116035151.1066734-6-laine@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 -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 -Reviewed-by: Daniel P. Berrangé -(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 -Message-Id: <20210415032534.723202-3-laine@redhat.com> -Reviewed-by: Pavel Hrdina ---- - 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 - - 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 -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 -Reviewed-by: Daniel P. Berrangé -(cherry picked from commit de110f110fb917a31b9f33ad8e4b3c1d3284766a) - -https://bugzilla.redhat.com/1942805 - -Message-Id: <20210415032534.723202-2-laine@redhat.com> -Reviewed-by: Pavel Hrdina ---- - 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 +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 +Reviewed-by: Peter Krempa +(cherry picked from commit ec9e2adb961f2e1a121f47e7985142e827f3347b) +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2056673 +Signed-off-by: Michal Privoznik +--- + 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: +From: Michal Privoznik +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 +Reviewed-by: Peter Krempa +(cherry picked from commit f103976ff34a52298df1810d82ececa3e7da4291) +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2056673 +Signed-off-by: Michal Privoznik +--- + 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 -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 -Reviewed-by: Bjoern Walk -Signed-off-by: Boris Fiuczynski -(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 ---- - 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 @@ - - - -+ - - - -@@ -651,6 +652,21 @@ - - - -+ -+ -+ css -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -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, "0x%x\n", - data->ccw_dev.cssid); - virBufferAsprintf(&buf, "0x%x\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 @@ - - ccw_0_0_10000 -- /sys/devices/css0/0.0.0000/0.0.10000 -- computer -+ /sys/devices/css0/0.0.0070/0.0.10000 -+ css_0_0_0070 - - 0x0 - 0x0 -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 @@ - - ccw_0_0_ffff -- /sys/devices/css0/0.0.0000/0.0.ffff -- computer -+ /sys/devices/css0/0.0.0070/0.0.ffff -+ css_0_0_0070 - - 0x0 - 0x0 -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 @@ -+ -+ css_0_0_ffff -+ /sys/devices/css0/0.0.ffff -+ computer -+ -+ 0x0 -+ 0x0 -+ 0xffff -+ -+ -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: -From: Boris Fiuczynski -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 -Reviewed-by: Erik Skultety -Signed-off-by: Boris Fiuczynski -(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 ---- - 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: -From: Boris Fiuczynski -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 -Reviewed-by: Bjoern Walk -Signed-off-by: Boris Fiuczynski -(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 ---- - 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: -From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= -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 -Signed-off-by: Daniel P. Berrangé -(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 ---- - 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: -From: Michal Privoznik -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 -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Michal Privoznik -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 -. There is nothing CPU specific about them. Drop the -infix. - -Signed-off-by: Michal Privoznik -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Michal Privoznik -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 -Reviewed-by: Daniel Henrique Barboza -(cherry picked from commit 1050c6beb1f2238cd847d93eab17d658720b08e1) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518 - -Signed-off-by: Michal Privoznik -Message-Id: <8564849f4fc4aaca69eec3d2b7e59d03234ea39f.1602087923.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -with @cache attribute refer to an existing cache level. For -instance: - - - - - - - - - - - - - - - - -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: - - - - - - - - - - - - - - - - - - - - -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 -Reviewed-by: Laine Stump -(cherry picked from commit e41ac71fca309b50e2c8e6ec142d8fe1280ca2ad) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1749518 - -Signed-off-by: Michal Privoznik -Message-Id: <4bb47f9e97ca097cee1259449da4739b55753751.1602087923.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -Reviewed-by: Masayoshi Mizuma -Reviewed-by: Ján Tomko -(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 -Message-Id: <20200214121237.623948-4-abologna@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - 4002050 - 0 - 61700241 --- -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 -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: - - - - - - -Signed-off-by: Boris Fiuczynski -Signed-off-by: Michal Privoznik -Reviewed-by: Michal Privoznik -(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 ---- - 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 - auto is set to yes, libvirt - will assign a free CID automatically on domain startup. -- Since 4.4.0

    -+ Since 4.4.0 -+ The optional driver element allows to specify virtio options, see -+ Virtio-specific options for more details. -+ Since 7.1.0

    - -
    - ...
    -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 @@
    -         
    -           
    -         
    -+        
    -+          
    -+            
    -+          
    -+        
    -       
    -     
    -   
    -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 @@
    -+
    -+  QEMUGuest1
    -+  c7a5fdbd-edaf-9455-926a-d65c16db1809
    -+  219136
    -+  219136
    -+  1
    -+  
    -+    hvm
    -+    
    -+  
    -+  
    -+    qemu
    -+  
    -+  
    -+  destroy
    -+  restart
    -+  destroy
    -+  
    -+    /usr/bin/qemu-system-s390x
    -+    
    -+      
    -+      
    -+      
    -+      
    -+ -+ -+ -+
    -+ -+ -+ -+ -+
    -+ -+ -+ -+ -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: -From: Michal Privoznik -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 -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: <0e8dfded8022b564ec7d0563cd745a0d3ffc815f.1602087923.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Signed-off-by: Boris Fiuczynski -Reviewed-by: Bjoern Walk -Reviewed-by: Erik Skultety -(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 -Message-Id: <1c3393cb71b731f5632d150d77f9920b591aa5ee.1592996194.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Signed-off-by: Boris Fiuczynski -Tested-by: Viktor Mihajlovski -Reviewed-by: Bjoern Walk -Reviewed-by: Erik Skultety -(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 -Message-Id: <3b91df0693526810b255db4ddc9af3484d655cbf.1592996194.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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, "\n"); - -+ if (qemuCaps->kvmSupportsSecureGuest) -+ virBufferAddLit(&buf, "\n"); -+ - virBufferAdjustIndent(&buf, -2); - virBufferAddLit(&buf, "\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 -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 -Tested-by: Lin Ma -Reviewed-by: Jim Fehlig -(cherry picked from commit a30078cb832646177defd256e77c632905f1e6d0) - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1814157 - -Signed-off-by: Michal Privoznik - -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 -Message-Id: <7a59996bd80955551d37f775e8d682649b1f4a45.1584457667.git.mprivozn@redhat.com> -Acked-by: Peter Krempa ---- - 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 -@@ -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 - - #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 @@ -+ -+ -+ -+ -+ -+ -+
    -+ -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 @@ -+ -+ hotplug -+ d091ea82-29e6-2e34-3005-f02617b36e87 -+ 4194304 -+ 4194304 -+ 4 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ restart -+ -+ /usr/bin/qemu-system-x86_64 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ --- -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: -From: Michal Privoznik -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 -Reviewed-by: Peter Krempa -Reviewed-by: Ján Tomko -(cherry picked from commit aeb909bf9b4c3fa48d017475545df94f7c5d3b3a) -Signed-off-by: Michal Privoznik -Message-Id: <3f21a46399486a42b8dd0fbbac25b75f4f6ac80a.1584643597.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jiri Denemark -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 -Reviewed-by: Ján Tomko -(cherry picked from commit bd04d63ad97c21b6955710e6473a502f49816a3c) - -https://bugzilla.redhat.com/show_bug.cgi?id=1791886 - -Signed-off-by: Jiri Denemark -Message-Id: <9b32d5af0dd1d3bf7108abc426dc4d6ceeaa84f8.1579193220.git.jdenemar@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Jonathon Jongsma -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 -Signed-off-by: Michal Privoznik -Reviewed-by: Michal Privoznik -(cherry picked from commit 306b4cb070b8f57a22a261d1f097283f4ef84e65) -Signed-off-by: Jonathon Jongsma -https://bugzilla.redhat.com/show_bug.cgi?id=1759566 -Message-Id: <20200220165227.11491-4-jjongsma@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Ján Tomko -(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 ---- - 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: -From: Thomas Huth -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é -Signed-off-by: Thomas Huth -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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: -From: Andrea Bolognani -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 -Reviewed-by: Masayoshi Mizuma -Reviewed-by: Ján Tomko -(cherry picked from commit 7c4bc108a9bd7bda1543131d232e2ccee92a9e43) - -https://bugzilla.redhat.com/show_bug.cgi?id=1762634 - -Signed-off-by: Andrea Bolognani -Message-Id: <20200214121237.623948-7-abologna@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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: -From: Michal Privoznik -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 -Reviewed-by: Daniel Henrique Barboza -(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 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - 4002050 - 0 - 61700241 -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 @@ - - - -+ - 4002091 - 0 - 43100241 --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit bb2a81df21710ed8258854e0dc2b3c2e923831f2) -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 in their xml data). - -Reported-by: Sebastian Mitterle -Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1763191 -Signed-off-by: Thomas Huth -Signed-off-by: Michal Privoznik -Reviewed-by: Michal Privoznik -(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 -Message-Id: <89c778ca322240423dd81945daa165f5d6c803a9.1591616651.git.mprivozn@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ - 1005003 - 0 - 43100245 -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 @@ - - - -+ - 1006000 - 0 - 43100243 -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 @@ - - - -+ - 1007000 - 0 - 43100244 -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 @@ - - - -+ - 2001001 - 0 - 43100240 -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 @@ - - - -+ - 2010000 - 0 - 42900287 -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 @@ - - - -+ - 2010000 - 0 - 43100287 -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 @@ - - - -+ - 2011000 - 0 - 43100288 -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 @@ - - - -+ - 2011090 - 0 - 42900289 -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 @@ - - - -+ - 2011090 - 0 - 43100289 -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 @@ - - - -+ - 2004000 - 0 - 43100242 -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 @@ - - - -+ - 2005000 - 0 - 43100243 -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 @@ - - - -+ - 2006000 - 0 - 42900244 -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 @@ - - - -+ - 2006000 - 0 - 43100244 -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 @@ - - - -+ - 2007000 - 0 - 43100245 -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 @@ - - - -+ - 2008000 - 0 - 43100246 -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 @@ - - - -+ - 2009000 - 0 - 42900247 -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 @@ - - - -+ - 2009000 - 0 - 43100247 -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 @@ - - - -+ - 2012050 - 0 - 42900239 -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 @@ - - - -+ - 3000000 - 0 - 43100239 -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 @@ - - - -+ - 3000091 - 0 - 42900240 -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 @@ - - - -+ - 3000092 - 0 - 43100240 -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 @@ - - - -+ - 4000000 - 0 - 42900240 -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 @@ - - - -+ - 4000000 - 0 - 43100240 -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 @@ - - - -+ - 4001000 - 0 - 43100241 -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 @@ - - - -+ - 4001050 - 0 - 42900242 -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 @@ - - - -+ - 4002000 - 0 - 43100242 -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 @@ - - - -+ - 4002091 - 0 - 43100241 -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - -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 @@ - -
    - -- -- -- -- -- -- - - - --- -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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 740dd1a4e5ce81e5b0be855dd413dd7eec81ccd3) - -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Daniel Henrique Barboza -(cherry picked from commit 4c581527d431939a63be70c201b4ddab703cddbe) -Signed-off-by: Michal Privoznik -Message-Id: <4048f92488a8b8c31c7a17a14b579840a9492328.1579165329.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: -From: Michal Privoznik -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 -Reviewed-by: Peter Krempa -(cherry picked from commit 13eb6c14682004d0dc692554475125db0f161da7) -Signed-off-by: Michal Privoznik -Message-Id: -Reviewed-by: Jiri Denemark ---- - 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: -From: Michal Privoznik -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 -Reviewed-by: Daniel Henrique Barboza - -Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1718707 - -(cherry picked from commit 3203ad6cfd617fb11d4bb47e514c370b6624641b) -Signed-off-by: Michal Privoznik -Message-Id: <5e58b5853f9bd1a2b5109145afdad190071f5c44.1579165329.git.mprivozn@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Masayoshi Mizuma -Reviewed-by: Ján Tomko -(cherry picked from commit f8e923c1ba70d7be53ea18d9b4de040763347f9e) - -https://bugzilla.redhat.com/show_bug.cgi?id=1762634 - -Signed-off-by: Andrea Bolognani -Message-Id: <20200214121237.623948-3-abologna@redhat.com> -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Masayoshi Mizuma -Reviewed-by: Ján Tomko -(cherry picked from commit aeddab230cd1e2a12d5d6352971bb70ea067a1c4) - -https://bugzilla.redhat.com/show_bug.cgi?id=1762634 - -Signed-off-by: Andrea Bolognani -Message-Id: <20200214121237.623948-6-abologna@redhat.com> -Reviewed-by: Ján Tomko ---- - 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: +From: Michal Privoznik +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 +Reviewed-by: Peter Krempa +(cherry picked from commit 517b8c12b98d7ac0bb4d582e0b491d50d776eb6d) +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2050702 +Signed-off-by: Michal Privoznik +--- + 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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Reviewed-by: Peter Krempa -Acked-by: Stefan Hajnoczi -Reviewed-by: Daniel P. Berrangé -Tested-by: Andrea Bolognani -(cherry picked from commit d99128a62b9f84e3e5b372d1e6419f4f1d1dffe6) -Signed-off-by: Ján Tomko - -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 ---- - 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 @@ - - - -+ - 4001050 - 0 - 61700242 -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 @@ - - - -+ - 4001050 - 0 - 39100242 -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 @@ - - - -+ - 4002000 - 0 - 43100242 -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 @@ - - - -+ - 4002050 - 0 - 61700241 --- -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?= -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 -Reviewed-by: Peter Krempa -(cherry picked from commit 47e84b06ec8181cbdb00c87bcc67f20edd9e949b) -Signed-off-by: Ján Tomko - -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 ---- - 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 @@ - - - -+ - 2010000 - 0 - 39100287 -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 @@ - - - -+ - 2011000 - 0 - 39100288 -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 @@ - - - -+ - 2012000 - 0 - 39100289 -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 @@ - - - -+ - 2007000 - 0 - 39100245 -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 @@ - - - -+ - 2007093 - 0 - 39100246 -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 @@ - - - -+ - 2009000 - 0 - 39100247 -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 @@ - - - -+ - 3000000 - 0 - 0 -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 @@ - - - -+ - 3000000 - 0 - 0 -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 @@ - - - -+ - 3000000 - 0 - 39100239 -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 @@ - - - -+ - 3000000 - 0 - 43100239 -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 @@ - - - -+ - 3000091 - 0 - 42900240 -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 @@ - - - -+ - 3000092 - 0 - 43100240 -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 @@ - - - -+ - 4000000 - 0 - 61700240 -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 @@ - - - -+ - 4000000 - 0 - 42900240 -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 @@ - - - -+ - 4000000 - 0 - 0 -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 @@ - - - -+ - 4000000 - 0 - 0 -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 @@ - - - -+ - 4000000 - 0 - 39100240 -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 @@ - - - -+ - 4000000 - 0 - 43100240 -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 @@ - - - -+ - 4001000 - 0 - 43100241 -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 @@ - - - -+ - 4001050 - 0 - 61700242 -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 @@ - - - -+ - 4001050 - 0 - 42900242 -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 @@ - - - -+ - 4001050 - 0 - 39100242 -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 @@ - - - -+ - 4002000 - 0 - 43100242 -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 @@ - - - -+ - 4002050 - 0 - 61700241 --- -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: -From: Laine Stump -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 -Reviewed-by: Daniel P. Berrangé -(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 -Message-Id: <20200130191244.24174-2-laine@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 @@ - - - -+ - 4001050 - 0 - 61700242 -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 @@ - - - -+ - 4002000 - 0 - 43100242 --- -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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 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 -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit f0f986efa8a8e352fbdce7079ec440a4f3c8f522) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <78ba169fbe59c5307db462ad78b65b06776d64a6.1583322091.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 - -+#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 -+ * . -+ */ -+ -+#include -+ -+#include -+#include -+#include -+ -+#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 -+ * . -+ */ -+ -+#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?= -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 -Reviewed-by: Jiri Denemark -Signed-off-by: Daniel P. Berrangé -(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 ---- - 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 @@ - - - -+ - 4001000 - 0 - 43100241 -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 @@ - - - -+ - 4001050 - 0 - 61700242 -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 @@ - - - -+ - 4001050 - 0 - 42900242 -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 @@ - - - -+ - 4001050 - 0 - 39100242 -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 @@ - - - -+ - 4002000 - 0 - 43100242 -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 @@ -+ -+ QEMUGuest1 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 4 -+ -+ hvm -+ -+ -+ -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-i386 -+ -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+ -+ -+ -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?= -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 -Reviewed-by: Daniel P. Berrangé -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit f04319a5449974f1553458e96c2a6ee25e65ab93) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <6e46af8184e9e982a6aca92a62534623795bb1fc.1583322091.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 -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 -Reviewed-by: Daniel P. Berrangé -(cherry picked from commit 8a226ddb3602586a2ba2359afc4448c02f566a0e) - -https://bugzilla.redhat.com/1693587 -Signed-off-by: Laine Stump -Message-Id: <20200130191244.24174-6-laine@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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?= -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 -Reported-by: Ilja Van Sprundel -Fixes: 0977b8aa071de550e1a013d35e2c72615e65d520 -Reviewed-by: Mauro Matteo Cascella -(cherry picked from commit a63b48c5ecef077bf0f909a85f453a605600cf05) -Signed-off-by: Ján Tomko - -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 ---- - 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: -From: Laine Stump -Date: Thu, 30 Jan 2020 14:12:42 -0500 -Subject: [PATCH] qemu: allow migration with assigned PCI hostdev if - 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 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 -Reviewed-by: Daniel P. Berrangé -(cherry picked from commit 2758f680b7d586baf084f340b153d7706b8ce12b) - -https://bugzilla.redhat.com/1693587 -Signed-off-by: Laine Stump -Message-Id: <20200130191244.24174-5-laine@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 ")); -+ 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 "), -+ virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type)); -+ return false; -+ -+ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: -+ /* -+ * if this is a network interface with , 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 "), -+ 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: -From: Daniel Henrique Barboza -Date: Mon, 30 Mar 2020 17:18:27 -0400 -Subject: [PATCH] qemu: avoid launching non-x86 guests with APIC-EOI setting - -The "" 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 "", -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 "" 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 "" declared in the domain (and A LOT of guests -running with "" 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 -Reviewed-by: Andrea Bolognani -(cherry picked from commit dbda73ff27cf185fb5db498cc4db281b2d76778d) - -https://bugzilla.redhat.com/show_bug.cgi?id=1829729 - -Signed-off-by: Daniel Henrique Barboza -Message-Id: <20200330211827.951474-2-dbarboza@redhat.com> -Reviewed-by: Andrea Bolognani ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit c89a44777fdf89b400878adcb03a3557bcec3f4e) - -https://bugzilla.redhat.com/show_bug.cgi?id=1804593 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Daniel Henrique Barboza -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Daniel Henrique Barboza -Reviewed-by: Eric Blake -(cherry picked from commit bce4ac55f8d3df9d649c74d2f35feeaad4422028) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit 562511afa6cef5948e6339596ba5954cb5ed0565) -https://bugzilla.redhat.com/show_bug.cgi?id=1804593 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 @@ - - - -+ -+ testcookievalue -+ blurb -+ - - - -@@ -39,6 +43,10 @@ - - - -+ -+ testcookievalue -+ blurb -+ - - - --- -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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 41c7e5c2a689a4ad091cec40b61beeeb3dde49b8) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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: - - - - - - - - - - -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -Reviewed-by: Michal Privoznik -(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: - -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 1753f605506e28eb42bc5bb6fa9abe8fcbe6fb9b) -https://bugzilla.redhat.com/show_bug.cgi?id=1799013 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 @@ - - - -+ - - - -@@ -24,6 +25,7 @@ - - - -+ - - - --- -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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 304da9376c972413d77cc6c7f094a1b39d651ea8) -https://bugzilla.redhat.com/show_bug.cgi?id=1804750 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - - - --- -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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit ffc6249c79dbf980d116af7c7ed20222538a7c1c) -Message-Id: <05fc4389e00afd4b8bf5653fb730c4d8f6a4516d.1585581552.git.pkrempa@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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: -From: Peter Krempa -Date: Wed, 19 Feb 2020 15:10:18 +0100 -Subject: [PATCH] qemu: block: forbid creation of storage sources with -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 96063ce280a398493d7a78a35f674ed25078d849) -https://bugzilla.redhat.com/show_bug.cgi?id=1799013 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 65a12c467cd683809b4d445b8cf1c3ae250209b2) -Message-Id: <296aeeaa0ab2b90e872c76c6f15eda080b749bdb.1589296861.git.pkrempa@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit cc7868a8b3cfa4a0062936c23e82e4a31923f724) - -https://bugzilla.redhat.com/show_bug.cgi?id=1803092 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(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: - -Reviewed-by: Jiri Denemark ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit db450a742224fb96d8f4d45fde3d0c19faeabfdb) -https://bugzilla.redhat.com/show_bug.cgi?id=1799013 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit 057e4bc591093a333624acb9ed065f8f796cca1e) -https://bugzilla.redhat.com/show_bug.cgi?id=1804593 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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, "\n", job->data.commit.base->nodeformat); -@@ -2608,9 +2607,6 @@ qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job, - if (job->data.commit.deleteCommittedImages) - virBufferAddLit(buf, "\n"); - -- while (bitmaps && *bitmaps) -- virBufferEscapeString(&disabledBitmapsBuf, "\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 @@ - - - -- -- -- -- - - - --- -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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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, "%s", 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 @@ - - - -- -+ - - - -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 @@ - - - -- -+ - - -- -+ - - - - - -- -+ - - -- -+ - - - --- -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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 41de7230ab169e80237f3e3a29bfecd9baf1a578) -https://bugzilla.redhat.com/show_bug.cgi?id=1799013 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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, "\n", job->data.commit.base->nodeformat); - -@@ -2614,6 +2617,11 @@ qemuDomainPrivateBlockJobFormatCommit(qemuBlockJobDataPtr job, - - if (job->data.commit.deleteCommittedImages) - virBufferAddLit(buf, "\n"); -+ -+ while (bitmaps && *bitmaps) -+ virBufferEscapeString(&disabledBitmapsBuf, "\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 @@ - - - -+ -+ -+ -+ - - - --- -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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Reviewed-by: Daniel P. Berrangé -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit 0627150a56fd53841918d558d8466feceb18552a) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <2df3adbe3991cb97a06707e818c30dfcb1f6de26.1583322091.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit ecdd92976144ba9caeae3ce781e39b5e9cc08807) - -https://bugzilla.redhat.com/show_bug.cgi?id=1799013 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 135a0b3f7142a8d4f591bb24b3ae7d0f36877bf7) - -https://bugzilla.redhat.com/show_bug.cgi?id=1819755 - -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 1f92aa454aa3b04ece9f7479d517bf08ba547f0a) -https://bugzilla.redhat.com/show_bug.cgi?id=1804593 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit 4c33c5568c3ee3c5952e5f3b217d78df95683b71) -https://bugzilla.redhat.com/show_bug.cgi?id=1804593 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(cherry picked from commit 30bc426071c0f5957af01181c063cd68ade97899) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit 606dc66b0958fe3545a318ae9bc6a62a67786378) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Ján Tomko -(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 ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit 7973f7d7926ac9dbc5464e6be6eb2aaacecc2251) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit f3e0a45a00465a6f19f510f7806ade1764a7e162) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 44e1b85717b9a4e6df24f9cbf846627e4f29b859) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Eric Blake -(cherry picked from commit f19248a1395e59abbd68ac31af3d9bd1273555bf) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit aa15e9259f1f246e69fb9742581ced720c88695d) - -https://bugzilla.redhat.com/1802592 -Signed-off-by: Laine Stump -Message-Id: <20200426171703.18808-1-laine@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 ", --- -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: -From: =?UTF-8?q?J=C3=A1n=20Tomko?= -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 -Fixes: f02e21cb3379a41cd42f2d8116f2d10dabace83b -https://bugzilla.redhat.com/show_bug.cgi?id=1800505 -Reviewed-by: Daniel Henrique Barboza -(cherry picked from commit bd622e2a211aad449b54683e2ebd5e980418dd7c) -Signed-off-by: Ján Tomko -Message-Id: <6096c4347521d1493728cc7842f6ad455665b744.1581350626.git.jtomko@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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 -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 -Reviewed-by: Daniel P. Berrangé -(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 ---- - 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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 0b0f389335e5d11150fa60561cae960f20d5ca44) - -https://bugzilla.redhat.com/show_bug.cgi?id=1792195 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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: -From: Peter Krempa -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 -Reviewed-by: Pavel Mores -Reviewed-by: Eric Blake -(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 ---- - 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, "\n", job->data.commit.base->nodeformat); -+ -+ if (job->data.commit.top) -+ virBufferAsprintf(buf, "\n", job->data.commit.top->nodeformat); -+ -+ if (job->data.commit.topparent) -+ virBufferAsprintf(buf, "\n", job->data.commit.topparent->nodeformat); -+ -+ if (job->data.commit.deleteCommittedImages) -+ virBufferAddLit(buf, "\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, "\n", job->data.commit.base->nodeformat); -- if (job->data.commit.top) -- virBufferAsprintf(&childBuf, "\n", job->data.commit.top->nodeformat); -- if (job->data.commit.topparent) -- virBufferAsprintf(&childBuf, "\n", job->data.commit.topparent->nodeformat); -- if (job->data.commit.deleteCommittedImages) -- virBufferAddLit(&childBuf, "\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 -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 -Reviewed-by: Pavel Mores -Reviewed-by: Eric Blake -(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 ---- - 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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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, "\n"); -- virBufferAdjustIndent(buf, 2); -- virBufferEscapeString(buf, "\n", src->nodestorage); -- virBufferEscapeString(buf, "\n", src->nodeformat); -- virBufferAdjustIndent(buf, -2); -- virBufferAddLit(buf, "\n"); -- } -+ virBufferEscapeString(&nodenamesChildBuf, "\n", src->nodestorage); -+ virBufferEscapeString(&nodenamesChildBuf, "\n", src->nodeformat); -+ -+ virXMLFormatElement(buf, "nodenames", NULL, &nodenamesChildBuf); - - if (src->pr) - virBufferAsprintf(buf, "\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 -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 -Reviewed-by: Eric Blake -(cherry picked from commit 180b3422e9a3391a0ee59d0076730ba85778fc7a) - -https://bugzilla.redhat.com/show_bug.cgi?id=1207659 -Message-Id: -Reviewed-by: Ján Tomko ---- - 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 -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 -Reviewed-by: Ján Tomko -(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: -Reviewed-by: Ján Tomko ---- - 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 @@ - - - -+ - - - --- -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 -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 -Reviewed-by: Ján Tomko -(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 ---- - 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, "\n", src->nodestorage); - virBufferEscapeString(&nodenamesChildBuf, "\n", src->nodeformat); - -+ if (src->sliceStorage) -+ virBufferEscapeString(&nodenamesChildBuf, "\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 @@ - - - -+ -+ -+ - - - -@@ -322,6 +325,7 @@ - - - -+ - - - base.qcow2 --- -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 -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 -Reviewed-by: Michal Privoznik -(cherry picked from commit 599ae372d8cf0923757c5a3792acb07dcf3e8802) -Signed-off-by: Jonathon Jongsma -https://bugzilla.redhat.com/show_bug.cgi?id=1759566 -Message-Id: <20200220165227.11491-5-jjongsma@redhat.com> -Reviewed-by: Ján Tomko ---- - 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?= -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 -Reviewed-by: Peter Krempa -(cherry picked from commit d5256cbd5575fb714714de1d543d1e5d41daf8ff) -Signed-off-by: Ján Tomko -https://bugzilla.redhat.com/show_bug.cgi?id=1694166 -Message-Id: <1a2cb184deb18bf67e3fdc50785e829f74d89352.1583322090.git.jtomko@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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?= -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 -Reported-by: Dan Zheng -Fixes: e005c95f56fee9ed780be7f8db103d690bd34cbd -(cherry picked from commit d61f95cf6a6fbd564e104c168d325581acd9cd8d) -Signed-off-by: Ján Tomko -Message-Id: -Reviewed-by: Jiri Denemark ---- - 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: -From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= -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 - - 16 - - - - -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 -Signed-off-by: Daniel P. Berrangé -(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 ---- - 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?= +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 +(cherry picked from commit 76deb656132bb8817ddae4b7f417930c4db824c9) + +https://bugzilla.redhat.com/show_bug.cgi?id=2043584 + +Signed-off-by: Ján Tomko +--- + 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?= -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é - 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 -Tested-by: Richard W.M. Jones -Reviewed-by: Michal Privoznik -Signed-off-by: Daniel P. Berrangé -(cherry picked from commit 6d786f95a366600e7bbae68c1b324a8131f5e2c5) - -https://bugzilla.redhat.com/show_bug.cgi?id=1836351 - -Signed-off-by: Andrea Bolognani -Message-Id: <20200515171850.135870-2-abologna@redhat.com> -Reviewed-by: Jiri Denemark ---- - 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?= -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 -Reviewed-by: Daniel P. Berrangé -Reviewed-by: Peter Krempa -Tested-by: Andrea Bolognani -(cherry picked from commit 5c0444a38bb37ddeb7049683ef72d02beab9e617) -Signed-off-by: Ján Tomko - -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 ---- - 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 -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 -Reviewed-by: Daniel Henrique Barboza -Signed-off-by: Ján Tomko -Reviewed-by: Ján Tomko -(cherry picked from commit c5815b31976f3982d18c7f6c1367ab6e403eb7eb) - -https://bugzilla.redhat.com/show_bug.cgi?id=1876297 - -Signed-off-by: Jonathon Jongsma -Message-Id: <20201204210242.822641-2-jjongsma@redhat.com> -Reviewed-by: Michal Privoznik ---- - 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 @@ -+ -+ QEMUGuest2 -+ c7a5fdbd-edaf-9455-926a-d65c16db1809 -+ 219136 -+ 219136 -+ 1 -+ -+ hvm -+ -+ -+ -+ destroy -+ restart -+ destroy -+ -+ /usr/bin/qemu-system-i386 -+ -+
    -+ -+ -+ -+
    -+ -+ -+ -+ -+ -+ -+