virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
virDomainVirtType type)
{
+ virDomainCapsCPUModelsPtr cpuModels;
+
if (type == VIR_DOMAIN_VIRT_KVM)
- return qemuCaps->kvmCPUModels;
+ cpuModels = qemuCaps->kvmCPUModels;
else
- return qemuCaps->tcgCPUModels;
+ cpuModels = qemuCaps->tcgCPUModels;
+
+ if (!cpuModels)
+ return NULL;
+
+ return virDomainCapsCPUModelsCopy(cpuModels);
}
virCPUDefPtr cpu,
bool migratable)
{
+ g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
virCPUDataPtr data = NULL;
int ret = -1;
if (!(data = virQEMUCapsGetCPUModelX86Data(qemuCaps, model, migratable)))
goto cleanup;
- if (cpuDecode(cpu, data, virQEMUCapsGetCPUDefinitions(qemuCaps, type)) < 0)
+ cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type);
+
+ if (cpuDecode(cpu, data, cpuModels) < 0)
goto cleanup;
ret = 0;
if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, cpu, false)) < 0) {
goto error;
} else if (rc == 1) {
+ g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
+
VIR_DEBUG("No host CPU model info from QEMU; probing host CPU directly");
- hostCPU = virQEMUCapsProbeHostCPU(hostArch,
- virQEMUCapsGetCPUDefinitions(qemuCaps, type));
+ cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, type);
+ hostCPU = virQEMUCapsProbeHostCPU(hostArch, cpuModels);
+
if (!hostCPU ||
virCPUDefCopyModelFilter(cpu, hostCPU, true,
virQEMUCapsCPUFilterFeatures,
/* nothing to update for host-passthrough */
if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
+ g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
+
if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
virCPUCompare(caps->host.arch,
virQEMUCapsGetHostModel(qemuCaps, def->virtType,
VIR_QEMU_CAPS_HOST_CPU_MIGRATABLE)) < 0)
return -1;
- if (virCPUTranslate(def->os.arch, def->cpu,
- virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType)) < 0)
+ cpuModels = virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType);
+
+ if (virCPUTranslate(def->os.arch, def->cpu, cpuModels) < 0)
return -1;
def->cpu->fallback = VIR_CPU_FALLBACK_FORBID;