From 3c0c8e12180b37ffcbdc6359025e98da1534b25e Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 22 Dec 2025 06:34:37 +0000 Subject: [PATCH] import OL libvirt-10.10.0-15.4.0.1.el9_7 --- ...yperv-features-with-passthrough-mode.patch | 35 + ...onf-Introduce-hyperv-host-model-mode.patch | 251 +++++++ ...-conf-Introduce-virDomainDefHasTimer.patch | 79 ++ ...related-members-into-a-single-struct.patch | 439 +++++++++++ ...hyperv-values-in-domain-capabilities.patch | 285 ++++++++ ...-virCPUDefFilterFeatures-return-void.patch | 138 ++++ ...t-of-hyperv-features-into-a-function.patch | 196 +++++ ...matElement-to-format-hyperv-features.patch | 105 +++ .../libvirt-qemu-Ignore-ht-CPU-feature.patch | 290 ++++++++ ...ibvirt-qemu-Use-virXPathTristateBool.patch | 52 ++ ...apabilities-Fetch-new-hyperv-domcaps.patch | 684 ++++++++++++++++++ ...and-parse-new-hyperv-domcaps-members.patch | 92 +++ ...uce-virQEMUCapsGetHypervCapabilities.patch | 56 ++ ...s-Prefer-VIR_DOMAIN_CAPS_ENUM_IS_SET.patch | 37 + ...-cmd-line-generation-into-a-function.patch | 193 +++++ ...Lit-in-qemuBuildCpuHypervCommandLine.patch | 37 + ...-qemu_domain-Fix-qemuDomainFixupCPUs.patch | 74 ++ ..._domain-Simplify-qemuDomainFixupCPUs.patch | 108 +++ ...Filter-CPU-features-reported-by-QEMU.patch | 182 +++++ ...process-Always-fix-CPUs-on-reconnect.patch | 46 ++ ...ulate-hyperv-features-for-host-model.patch | 150 ++++ ...ate-Reflect-dependencies-of-hv-evmcs.patch | 42 ++ ...idate-Reflect-dependencies-of-hv-ipi.patch | 42 ++ ...te-Reflect-dependencies-of-hv-stimer.patch | 53 ++ ...ate-Reflect-dependencies-of-hv-synic.patch | 89 +++ ...t-dependencies-of-hv-tlbflush-direct.patch | 51 ++ ...-Reflect-dependencies-of-hv-tlbflush.patch | 42 ++ ...fdata-Adjust-hv-stimer-related-tests.patch | 114 +++ ...s-typecast-to-virDomainTimerNameType.patch | 125 ++++ ...irxml-Introduce-virXPathTristateBool.patch | 94 +++ ...xml-Introduce-virXPathTristateSwitch.patch | 98 +++ SPECS/libvirt.spec | 85 ++- 32 files changed, 4362 insertions(+), 2 deletions(-) create mode 100644 SOURCES/libvirt-conf-Do-not-parse-hyperv-features-with-passthrough-mode.patch create mode 100644 SOURCES/libvirt-conf-Introduce-hyperv-host-model-mode.patch create mode 100644 SOURCES/libvirt-conf-Introduce-virDomainDefHasTimer.patch create mode 100644 SOURCES/libvirt-conf-More-hyperv-related-members-into-a-single-struct.patch create mode 100644 SOURCES/libvirt-conf-Report-default-hyperv-values-in-domain-capabilities.patch create mode 100644 SOURCES/libvirt-cpu_conf-Make-virCPUDefFilterFeatures-return-void.patch create mode 100644 SOURCES/libvirt-domain_conf-Move-format-of-hyperv-features-into-a-function.patch create mode 100644 SOURCES/libvirt-domain_conf-Use-virXMLFormatElement-to-format-hyperv-features.patch create mode 100644 SOURCES/libvirt-qemu-Ignore-ht-CPU-feature.patch create mode 100644 SOURCES/libvirt-qemu-Use-virXPathTristateBool.patch create mode 100644 SOURCES/libvirt-qemu_capabilities-Fetch-new-hyperv-domcaps.patch create mode 100644 SOURCES/libvirt-qemu_capabilities-Format-and-parse-new-hyperv-domcaps-members.patch create mode 100644 SOURCES/libvirt-qemu_caps-Introduce-virQEMUCapsGetHypervCapabilities.patch create mode 100644 SOURCES/libvirt-qemu_caps-Prefer-VIR_DOMAIN_CAPS_ENUM_IS_SET.patch create mode 100644 SOURCES/libvirt-qemu_command-Move-hyperv-cmd-line-generation-into-a-function.patch create mode 100644 SOURCES/libvirt-qemu_command-Prefer-virBufferAddLit-in-qemuBuildCpuHypervCommandLine.patch create mode 100644 SOURCES/libvirt-qemu_domain-Fix-qemuDomainFixupCPUs.patch create mode 100644 SOURCES/libvirt-qemu_domain-Simplify-qemuDomainFixupCPUs.patch create mode 100644 SOURCES/libvirt-qemu_monitor-Filter-CPU-features-reported-by-QEMU.patch create mode 100644 SOURCES/libvirt-qemu_process-Always-fix-CPUs-on-reconnect.patch create mode 100644 SOURCES/libvirt-qemu_process-Populate-hyperv-features-for-host-model.patch create mode 100644 SOURCES/libvirt-qemu_validate-Reflect-dependencies-of-hv-evmcs.patch create mode 100644 SOURCES/libvirt-qemu_validate-Reflect-dependencies-of-hv-ipi.patch create mode 100644 SOURCES/libvirt-qemu_validate-Reflect-dependencies-of-hv-stimer.patch create mode 100644 SOURCES/libvirt-qemu_validate-Reflect-dependencies-of-hv-synic.patch create mode 100644 SOURCES/libvirt-qemu_validate-Reflect-dependencies-of-hv-tlbflush-direct.patch create mode 100644 SOURCES/libvirt-qemu_validate-Reflect-dependencies-of-hv-tlbflush.patch create mode 100644 SOURCES/libvirt-qemuxmlconfdata-Adjust-hv-stimer-related-tests.patch create mode 100644 SOURCES/libvirt-src-Drop-needless-typecast-to-virDomainTimerNameType.patch create mode 100644 SOURCES/libvirt-virxml-Introduce-virXPathTristateBool.patch create mode 100644 SOURCES/libvirt-virxml-Introduce-virXPathTristateSwitch.patch diff --git a/SOURCES/libvirt-conf-Do-not-parse-hyperv-features-with-passthrough-mode.patch b/SOURCES/libvirt-conf-Do-not-parse-hyperv-features-with-passthrough-mode.patch new file mode 100644 index 0000000..007d4f1 --- /dev/null +++ b/SOURCES/libvirt-conf-Do-not-parse-hyperv-features-with-passthrough-mode.patch @@ -0,0 +1,35 @@ +From 9e481e4b77d05a8951845272ec4ee51013b245ee Mon Sep 17 00:00:00 2001 +Message-ID: <9e481e4b77d05a8951845272ec4ee51013b245ee.1763133104.git.jdenemar@redhat.com> +From: Martin Kletzander +Date: Fri, 10 Jan 2025 15:56:34 +0100 +Subject: [PATCH] conf: Do not parse hyperv features with passthrough mode + +The schema does not allow that anyway and we then format them all back +which leads to libvirt producing an invalid XML. + +Resolves: https://issues.redhat.com/browse/RHEL-70656 +Signed-off-by: Martin Kletzander +Reviewed-by: Michal Privoznik +(cherry picked from commit a4def2eb9597b83c7c6a4b9f8b08c995cbf7ee1a) +Resolves: https://issues.redhat.com/browse/RHEL-122930 +Signed-off-by: Michal Privoznik +--- + src/conf/domain_conf.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 38179a7e59..8c69feda6e 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -16735,6 +16735,9 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, + + def->features[VIR_DOMAIN_FEATURE_HYPERV] = mode; + ++ if (mode == VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH) ++ return 0; ++ + node = xmlFirstElementChild(node); + while (node != NULL) { + int feature; +-- +2.51.1 diff --git a/SOURCES/libvirt-conf-Introduce-hyperv-host-model-mode.patch b/SOURCES/libvirt-conf-Introduce-hyperv-host-model-mode.patch new file mode 100644 index 0000000..373e997 --- /dev/null +++ b/SOURCES/libvirt-conf-Introduce-hyperv-host-model-mode.patch @@ -0,0 +1,251 @@ +From d90f7c57e9cd6a146788726a5a0d1c6ba3de4a19 Mon Sep 17 00:00:00 2001 +Message-ID: +From: Michal Privoznik +Date: Mon, 29 Sep 2025 10:20:41 +0200 +Subject: [PATCH] conf: Introduce hyperv host-model mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +So far we have two modes for hyperv features: + +1) custom, where users have to enable features explicitly, and +2) passthrough, where hypervisor enables features automagically. + +Problem with 'custom' mode is that some features are not plain +on/off switches but expect int/string value. Until very recently, +these were not reported in domcaps. And even if they were it's a +bit cumbersome. + +Problem with 'passthrough' mode is that users don't get to see +the expanded list of enlightenments enabled. + +Therefore, mimic what we're already doing with CPUs: have +'host-model' which gets expanded at domain startup and is fixed +throughout domain's run. + +Signed-off-by: Michal Privoznik +Reviewed-by: Ján Tomko +(cherry picked from commit c181c7dd1358ee1a2d125a869a44f46eee393452) + +Conflicts: +src/libxl/libxl_conf.c: Not enabled in RHEL, so nobody cares. + +Resolves: https://issues.redhat.com/browse/RHEL-122930 +Signed-off-by: Michal Privoznik +--- + docs/formatdomain.rst | 6 ++++ + src/conf/domain_conf.c | 4 ++- + src/conf/domain_conf.h | 1 + + src/conf/schemas/domaincommon.rng | 3 ++ + src/qemu/qemu_command.c | 1 + + .../hyperv-host-model.x86_64-latest.args | 32 ++++++++++++++++++ + .../hyperv-host-model.x86_64-latest.xml | 33 +++++++++++++++++++ + tests/qemuxmlconfdata/hyperv-host-model.xml | 27 +++++++++++++++ + tests/qemuxmlconftest.c | 1 + + 9 files changed, 107 insertions(+), 1 deletion(-) + create mode 100644 tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.args + create mode 100644 tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.xml + create mode 100644 tests/qemuxmlconfdata/hyperv-host-model.xml + +diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst +index bfe28759e7..3dba9e3073 100644 +--- a/docs/formatdomain.rst ++++ b/docs/formatdomain.rst +@@ -2126,6 +2126,12 @@ are: + virtual CPU may or may not contain features which may block migration + even to an identical host. + ++ ``host-model`` ++ Similar to the ``passthrough`` mode, except libvirt detects which ++ enlightenments are supported by hypervisor and expands them on domain ++ startup into the live XML. In a sense, this is similar to ``host-model`` ++ CPU mode (See `CPU model and topology`_). :since:`Since 11.9.0` ++ + The ``mode`` attribute can be omitted and will default to ``custom``. + + ``pvspinlock`` +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 67f8ef4676..b869ac885b 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -145,6 +145,7 @@ VIR_ENUM_IMPL(virDomainHyperVMode, + "none", + "custom", + "passthrough", ++ "host-model", + ); + + VIR_ENUM_IMPL(virDomainBoot, +@@ -16742,7 +16743,8 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, + + def->features[VIR_DOMAIN_FEATURE_HYPERV] = mode; + +- if (mode == VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH) ++ if (mode == VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH || ++ mode == VIR_DOMAIN_HYPERV_MODE_HOST_MODEL) + return 0; + + node = xmlFirstElementChild(node); +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index 643deefec2..abb50dd5cf 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -164,6 +164,7 @@ typedef enum { + VIR_DOMAIN_HYPERV_MODE_NONE = 0, + VIR_DOMAIN_HYPERV_MODE_CUSTOM, + VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH, ++ VIR_DOMAIN_HYPERV_MODE_HOST_MODEL, + + VIR_DOMAIN_HYPERV_MODE_LAST + } virDomainHyperVMode; +diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng +index 93bc128dec..58dbe478af 100644 +--- a/src/conf/schemas/domaincommon.rng ++++ b/src/conf/schemas/domaincommon.rng +@@ -8038,6 +8038,9 @@ + + passthrough + ++ ++ host-model ++ + + + +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index 3f290931a1..61aeb14757 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -6289,6 +6289,7 @@ qemuBuildCpuHypervCommandLine(virBuffer *buf, + + switch ((virDomainHyperVMode) def->features[VIR_DOMAIN_FEATURE_HYPERV]) { + case VIR_DOMAIN_HYPERV_MODE_CUSTOM: ++ case VIR_DOMAIN_HYPERV_MODE_HOST_MODEL: + break; + + case VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH: +diff --git a/tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.args b/tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.args +new file mode 100644 +index 0000000000..2ed72fcd1b +--- /dev/null ++++ b/tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.args +@@ -0,0 +1,32 @@ ++LC_ALL=C \ ++PATH=/bin \ ++HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ ++USER=test \ ++LOGNAME=test \ ++XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ ++XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ ++XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ ++/usr/bin/qemu-system-x86_64 \ ++-name guest=QEMUGuest1,debug-threads=on \ ++-S \ ++-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ ++-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=on \ ++-accel tcg \ ++-cpu qemu64 \ ++-m size=219136k \ ++-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ ++-overcommit mem-lock=off \ ++-smp 6,sockets=6,cores=1,threads=1 \ ++-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ ++-display none \ ++-no-user-config \ ++-nodefaults \ ++-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ ++-mon chardev=charmonitor,id=monitor,mode=control \ ++-rtc base=utc \ ++-no-shutdown \ ++-boot strict=on \ ++-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ ++-audiodev '{"id":"audio1","driver":"none"}' \ ++-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ ++-msg timestamp=on +diff --git a/tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.xml b/tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.xml +new file mode 100644 +index 0000000000..453a43b3c9 +--- /dev/null ++++ b/tests/qemuxmlconfdata/hyperv-host-model.x86_64-latest.xml +@@ -0,0 +1,33 @@ ++ ++ QEMUGuest1 ++ c7a5fdbd-edaf-9455-926a-d65c16db1809 ++ 219100 ++ 219100 ++ 6 ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ ++ qemu64 ++ ++ ++ destroy ++ restart ++ destroy ++ ++ /usr/bin/qemu-system-x86_64 ++ ++
++ ++ ++ ++ ++