qemu_capabilities: filter deprecated features if requested

If flag VIR_CONNECT_GET_DOMAIN_CAPABILITIES_DISABLE_DEPRECATED_FEATURES
is passed to qemuConnectGetDomainCapabilities, then the domain's CPU
model features will be updated to set any deprecated features to the
'disabled' policy.

Signed-off-by: Collin Walling <walling@linux.ibm.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Collin Walling 2024-12-16 18:03:56 -05:00 committed by Jiri Denemark
parent 4e2c8de204
commit cd1e837c22
3 changed files with 30 additions and 1 deletions

View File

@ -3330,6 +3330,26 @@ virQEMUCapsGetCPUFeatures(virQEMUCaps *qemuCaps,
} }
void
virQEMUCapsUpdateCPUDeprecatedFeatures(virQEMUCaps *qemuCaps,
virDomainVirtType virtType,
virCPUDef *cpu)
{
qemuMonitorCPUModelInfo *modelInfo;
size_t i;
modelInfo = virQEMUCapsGetCPUModelInfo(qemuCaps, virtType);
if (!modelInfo || !modelInfo->deprecated_props)
return;
for (i = 0; i < g_strv_length(modelInfo->deprecated_props); i++) {
virCPUDefUpdateFeature(cpu, modelInfo->deprecated_props[i],
VIR_CPU_FEATURE_DISABLE);
}
}
struct tpmTypeToCaps { struct tpmTypeToCaps {
int type; int type;
virQEMUCapsFlags caps; virQEMUCapsFlags caps;

View File

@ -764,6 +764,9 @@ int virQEMUCapsGetCPUFeatures(virQEMUCaps *qemuCaps,
virDomainVirtType virtType, virDomainVirtType virtType,
bool migratable, bool migratable,
char ***features); char ***features);
void virQEMUCapsUpdateCPUDeprecatedFeatures(virQEMUCaps *qemuCaps,
virDomainVirtType virtType,
virCPUDef *cpu);
virDomainVirtType virQEMUCapsGetVirtType(virQEMUCaps *qemuCaps); virDomainVirtType virQEMUCapsGetVirtType(virQEMUCaps *qemuCaps);

View File

@ -16530,7 +16530,8 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
virDomainVirtType virttype; virDomainVirtType virttype;
g_autoptr(virDomainCaps) domCaps = NULL; g_autoptr(virDomainCaps) domCaps = NULL;
virCheckFlags(0, NULL); virCheckFlags(VIR_CONNECT_GET_DOMAIN_CAPABILITIES_DISABLE_DEPRECATED_FEATURES,
NULL);
if (virConnectGetDomainCapabilitiesEnsureACL(conn) < 0) if (virConnectGetDomainCapabilitiesEnsureACL(conn) < 0)
return NULL; return NULL;
@ -16549,6 +16550,11 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
arch, virttype))) arch, virttype)))
return NULL; return NULL;
if (flags & VIR_CONNECT_GET_DOMAIN_CAPABILITIES_DISABLE_DEPRECATED_FEATURES) {
virQEMUCapsUpdateCPUDeprecatedFeatures(qemuCaps, virttype,
domCaps->cpu.hostModel);
}
return virDomainCapsFormat(domCaps); return virDomainCapsFormat(domCaps);
} }