- conf: Parse hyperv features even for host-model (RHEL-151688) - qemu: Wire up new hyperv host-model mode behavior (RHEL-151688) - Introduce EXPAND_CPU_FEATURES flag for domain capabilities (RHEL-153653) - qemu: Implement VIR_CONNECT_GET_DOMAIN_CAPABILITIES_EXPAND_CPU_FEATURES (RHEL-153653) - virsh: Add --expand-cpu-features option for domcapabilities (RHEL-153653) - docs: Clarify host-model description in domain capabilities (RHEL-153653) - qemu: Fix job handling when domain dies in post-copy migration (RHEL-145179) - security_apparmor: Use g_auto* in AppArmorSetSecurityHostdevLabel (RHEL-159902) - security: Cleanup hostdev label error logic (RHEL-159902) - qemu: Fix IOMMUFD and VFIO security labels (RHEL-159902) - viriommufd: Set IOMMU_OPTION_RLIMIT_MODE only when running privileged (RHEL-156803) - conf: Move and rename virStorageSourceFDTuple object (RHEL-156803) - conf: Refactor virHostdevIsPCIDevice (RHEL-156803) - hypervisor: Fix virHostdevNeedsVFIO detection (RHEL-156803) - qemu: Expand call to qemuDomainNeedsVFIO (RHEL-156803) - qemu: Update qemuDomainNeedsVFIO to ignore PCI hostdev with IOMMUFD (RHEL-156803) - src: Use virHostdevIsPCIDeviceWith* to check for IOMMUFD (RHEL-156803) - conf: Introduce domain iommufd element (RHEL-156803) - qemu: Implement iommufd (RHEL-156803) - conf: Add iommufd fdgroup support (RHEL-156803) - qemu: Implement iommufd fdgroup (RHEL-156803) - tests: Add iommufd fdgroup test (RHEL-156803) - hypervisor: Call virWaitForDevices() after detaching host devices (RHEL-156803) - qemuMigrationSrcBeginXML: Don't call 'qemuMigrationSrcBeginPhaseBlockDirtyBitmaps' with offline VM (RHEL-173433) - qemuMigrationSrcBeginPhase: Don't call 'qemuBlockNodesEnsureActive' with offline VM (RHEL-173433) - util: virGetSubIDs: do not limit file size (RHEL-174491) - cpu_conf: Introduce virCPUDefSortFeatures (RHEL-177364) - qemu_capabilities: Split virQEMUCapsFillDomainCPUCaps (RHEL-177364) - qemu: Move domain caps flags handling to virQEMUCapsFillDomainCPUHostModel (RHEL-177364) - qemu_capabilities: Always sort features in host-model CPU (RHEL-177364) - qemu_capabilities: Use g_autoptr in virQEMUCapsInitHostCPUModel (RHEL-177364) - qemu_capabilities: Split conditions in virQEMUCapsInitHostCPUModel (RHEL-177364) - qemu_capabilities: Cache expanded CPU (RHEL-177364) - domaincapstest: Test EXPAND_CPU_FEATURES flag (RHEL-177364) - util: Publish and mock virHostCPUGetMSRFromKVM (RHEL-177364) - cpu_x86: Introduce virCPUx86DataAddMSR (RHEL-177364) - cpu: Introduce virCPUUpdateFeatures (RHEL-177364) - Fix documentation of VIR_CONNECT_GET_DOMAIN_CAPABILITIES_EXPAND_CPU_FEATURES (RHEL-177364) - Introduce VIR_CONNECT_GET_DOMAIN_CAPABILITIES_SUPPORTED_CPU_FEATURES flag (RHEL-177364) - virsh: Add --supported-cpu-features option for domcapabilities (RHEL-177364) - domaincapstest: Test SUPPORTED_CPU_FEATURES flag (RHEL-177364) - qemu_capabilities: Fix domain capabilities on AMD CPUs (RHEL-177364) - distro: Replace old gating with tmt Resolves: RHEL-145179, RHEL-151688, RHEL-153653, RHEL-156803, RHEL-159902 Resolves: RHEL-173433, RHEL-174491, RHEL-177364
151 lines
6.0 KiB
Diff
151 lines
6.0 KiB
Diff
From b41da9180160e455bf36d9db7870b64457a6ca8c Mon Sep 17 00:00:00 2001
|
|
Message-ID: <b41da9180160e455bf36d9db7870b64457a6ca8c.1780571166.git.jdenemar@redhat.com>
|
|
From: Jiri Denemark <jdenemar@redhat.com>
|
|
Date: Thu, 21 May 2026 12:24:25 +0200
|
|
Subject: [PATCH] qemu_capabilities: Split virQEMUCapsFillDomainCPUCaps
|
|
|
|
Each CPU mode is filled in its own dedicated function.
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
|
(cherry picked from commit 354ac21caba1da52d3d48e57c7395f899efc9ca4)
|
|
|
|
https://redhat.atlassian.net/browse/RHEL-177364
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
---
|
|
src/qemu/qemu_capabilities.c | 96 ++++++++++++++++++++++++------------
|
|
1 file changed, 64 insertions(+), 32 deletions(-)
|
|
|
|
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
|
index ed6aa86da2..0b32296cc8 100644
|
|
--- a/src/qemu/qemu_capabilities.c
|
|
+++ b/src/qemu/qemu_capabilities.c
|
|
@@ -6553,6 +6553,66 @@ virQEMUCapsFillDomainOSCaps(virDomainCapsOS *os,
|
|
}
|
|
|
|
|
|
+static void
|
|
+virQEMUCapsFillDomainCPUHostPassthrough(virQEMUCaps *qemuCaps,
|
|
+ virDomainCaps *domCaps)
|
|
+{
|
|
+ domCaps->cpu.hostPassthrough = true;
|
|
+
|
|
+ domCaps->cpu.hostPassthroughMigratable.report = true;
|
|
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MIGRATABLE)) {
|
|
+ VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable,
|
|
+ VIR_TRISTATE_SWITCH_ON);
|
|
+ }
|
|
+ VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable,
|
|
+ VIR_TRISTATE_SWITCH_OFF);
|
|
+}
|
|
+
|
|
+
|
|
+static void
|
|
+virQEMUCapsFillDomainCPUMaximum(virDomainCaps *domCaps)
|
|
+{
|
|
+ domCaps->cpu.maximum = true;
|
|
+
|
|
+ domCaps->cpu.maximumMigratable.report = true;
|
|
+ VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
|
|
+ VIR_TRISTATE_SWITCH_ON);
|
|
+ VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
|
|
+ VIR_TRISTATE_SWITCH_OFF);
|
|
+}
|
|
+
|
|
+
|
|
+static void
|
|
+virQEMUCapsFillDomainCPUHostModel(virQEMUCaps *qemuCaps,
|
|
+ virDomainCaps *domCaps)
|
|
+{
|
|
+ virCPUDef *cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype,
|
|
+ VIR_QEMU_CAPS_HOST_CPU_REPORTED);
|
|
+
|
|
+ domCaps->cpu.hostModel = virCPUDefCopy(cpu);
|
|
+ domCaps->cpu.hostModel->addr = virQEMUCapsGetHostPhysAddr(qemuCaps,
|
|
+ domCaps->virttype);
|
|
+}
|
|
+
|
|
+
|
|
+static void
|
|
+virQEMUCapsFillDomainCPUCustom(virQEMUCaps *qemuCaps,
|
|
+ virDomainCaps *domCaps)
|
|
+{
|
|
+ const char *forbidden[] = { "host", NULL };
|
|
+ g_auto(GStrv) models = NULL;
|
|
+
|
|
+ if (virCPUGetModels(domCaps->arch, &models) >= 0) {
|
|
+ domCaps->cpu.custom = virQEMUCapsGetCPUModels(qemuCaps,
|
|
+ domCaps->virttype,
|
|
+ (const char **)models,
|
|
+ forbidden);
|
|
+ } else {
|
|
+ domCaps->cpu.custom = NULL;
|
|
+ }
|
|
+}
|
|
+
|
|
+
|
|
static void
|
|
virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps,
|
|
virArch hostarch,
|
|
@@ -6561,53 +6621,25 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps,
|
|
if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
|
|
VIR_CPU_MODE_HOST_PASSTHROUGH,
|
|
domCaps->machine)) {
|
|
- domCaps->cpu.hostPassthrough = true;
|
|
-
|
|
- domCaps->cpu.hostPassthroughMigratable.report = true;
|
|
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MIGRATABLE)) {
|
|
- VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable,
|
|
- VIR_TRISTATE_SWITCH_ON);
|
|
- }
|
|
- VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.hostPassthroughMigratable,
|
|
- VIR_TRISTATE_SWITCH_OFF);
|
|
+ virQEMUCapsFillDomainCPUHostPassthrough(qemuCaps, domCaps);
|
|
}
|
|
|
|
if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
|
|
VIR_CPU_MODE_MAXIMUM,
|
|
domCaps->machine)) {
|
|
- domCaps->cpu.maximum = true;
|
|
-
|
|
- domCaps->cpu.maximumMigratable.report = true;
|
|
- VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
|
|
- VIR_TRISTATE_SWITCH_ON);
|
|
- VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
|
|
- VIR_TRISTATE_SWITCH_OFF);
|
|
+ virQEMUCapsFillDomainCPUMaximum(domCaps);
|
|
}
|
|
|
|
if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
|
|
VIR_CPU_MODE_HOST_MODEL,
|
|
domCaps->machine)) {
|
|
- virCPUDef *cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype,
|
|
- VIR_QEMU_CAPS_HOST_CPU_REPORTED);
|
|
- domCaps->cpu.hostModel = virCPUDefCopy(cpu);
|
|
- domCaps->cpu.hostModel->addr = virQEMUCapsGetHostPhysAddr(qemuCaps,
|
|
- domCaps->virttype);
|
|
+ virQEMUCapsFillDomainCPUHostModel(qemuCaps, domCaps);
|
|
}
|
|
|
|
if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
|
|
VIR_CPU_MODE_CUSTOM,
|
|
domCaps->machine)) {
|
|
- const char *forbidden[] = { "host", NULL };
|
|
- g_auto(GStrv) models = NULL;
|
|
-
|
|
- if (virCPUGetModels(domCaps->arch, &models) >= 0) {
|
|
- domCaps->cpu.custom = virQEMUCapsGetCPUModels(qemuCaps,
|
|
- domCaps->virttype,
|
|
- (const char **)models,
|
|
- forbidden);
|
|
- } else {
|
|
- domCaps->cpu.custom = NULL;
|
|
- }
|
|
+ virQEMUCapsFillDomainCPUCustom(qemuCaps, domCaps);
|
|
}
|
|
}
|
|
|
|
--
|
|
2.54.0
|