On 5/1/25 22:17, Collin Walling wrote:
Currently, virQEMUCapsUpdateCPUDeprecatedFeatures only allows for
disabling deprecated features. This locks the deprecated_features
attribute to only do something if set to 'off'.
Let's add a virCPUFeaturePolicy to the function's parameters which will
allow the caller to decide what happens to these features.
Additionally, group the relevant code in qemu_process.c.
Signed-off-by: Collin Walling <walling(a)linux.ibm.com>
---
src/qemu/qemu_capabilities.c | 6 +++---
src/qemu/qemu_capabilities.h | 3 ++-
src/qemu/qemu_driver.c | 3 ++-
src/qemu/qemu_process.c | 19 ++++++++++++-------
4 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a804335c85..5f94863818 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3341,7 +3341,8 @@ virQEMUCapsGetCPUFeatures(virQEMUCaps *qemuCaps,
void
virQEMUCapsUpdateCPUDeprecatedFeatures(virQEMUCaps *qemuCaps,
virDomainVirtType virtType,
- virCPUDef *cpu)
+ virCPUDef *cpu,
+ virCPUFeaturePolicy policy)
{
qemuMonitorCPUModelInfo *modelInfo;
size_t i;
@@ -3352,8 +3353,7 @@ virQEMUCapsUpdateCPUDeprecatedFeatures(virQEMUCaps *qemuCaps,
return;
for (i = 0; i < g_strv_length(modelInfo->deprecated_props); i++) {
- virCPUDefUpdateFeature(cpu, modelInfo->deprecated_props[i],
- VIR_CPU_FEATURE_DISABLE);
+ virCPUDefUpdateFeature(cpu, modelInfo->deprecated_props[i], policy);
}
}
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index ea7c14daa9..e4d8b0b6b6 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -778,7 +778,8 @@ int virQEMUCapsGetCPUFeatures(virQEMUCaps *qemuCaps,
char ***features);
void virQEMUCapsUpdateCPUDeprecatedFeatures(virQEMUCaps *qemuCaps,
virDomainVirtType virtType,
- virCPUDef *cpu);
+ virCPUDef *cpu,
+ virCPUFeaturePolicy policy);
virDomainVirtType virQEMUCapsGetVirtType(virQEMUCaps *qemuCaps);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a34d6f1437..677b4b72a8 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -16722,7 +16722,8 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
if (flags & VIR_CONNECT_GET_DOMAIN_CAPABILITIES_DISABLE_DEPRECATED_FEATURES) {
virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, virttype,
- domCaps->cpu.hostModel);
+ domCaps->cpu.hostModel,
+ VIR_CPU_FEATURE_DISABLE);
}
return virDomainCapsFormat(domCaps);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 1af91c5909..5820499710 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -6588,15 +6588,20 @@ qemuProcessUpdateGuestCPU(virDomainDef *def,
&def->os.arch) < 0)
return -1;
- if (def->cpu->deprecated_feats &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION_DEPRECATED_PROPS))
{
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ if (def->cpu->deprecated_feats) {
+ virCPUFeaturePolicy policy = VIR_CPU_FEATURE_REQUIRE;
+
+ if (def->cpu->deprecated_feats == VIR_TRISTATE_SWITCH_OFF)
+ policy = VIR_CPU_FEATURE_DISABLE;
+
+ if (!virQEMUCapsGet(qemuCaps,
QEMU_CAPS_QUERY_CPU_MODEL_EXPANSION_DEPRECATED_PROPS)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("toggling deprecated features for CPU model is
unsupported"));
- return -1;
- }
+ return -1;
+ }
- if (def->cpu->deprecated_feats == VIR_TRISTATE_SWITCH_OFF) {
- virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, def->virtType,
def->cpu);
+ virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, def->virtType,
+ def->cpu, policy);
}
There are no tests with deprecated_features='on'.
Could you please add some before doing this change.
I would also suggest to separate the code refactoring from code changes
introducing an alternative behavior.
return 0;
--
Mit freundlichen Grüßen/Kind regards
Boris Fiuczynski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294