diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 964299b01a..74fe2c258c 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -373,14 +373,6 @@ struct virQEMUCapsMachineType { unsigned int maxCpus; bool hotplugCpus; }; - -typedef struct _virQEMUCapsCPUModel virQEMUCapsCPUModel; -typedef virQEMUCapsCPUModel *virQEMUCapsCPUModelPtr; -struct _virQEMUCapsCPUModel { - virCPUDefPtr full; - virCPUDefPtr migratable; -}; - /* * Update the XML parser/formatter when adding more * information to this struct so that it gets cached @@ -423,8 +415,8 @@ struct _virQEMUCaps { * time we probe QEMU or load the results from the cache. */ struct { - virQEMUCapsCPUModel kvm; - virQEMUCapsCPUModel tcg; + virCPUDefPtr kvm; + virCPUDefPtr tcg; } hostCPU; }; @@ -2109,20 +2101,12 @@ virQEMUCapsCopyHostCPUData(virQEMUCapsPtr dst, !(dst->tcgCPUModelInfo = qemuMonitorCPUModelInfoCopy(src->tcgCPUModelInfo))) return -1; - if (src->hostCPU.kvm.full && - !(dst->hostCPU.kvm.full = virCPUDefCopy(src->hostCPU.kvm.full))) + if (src->hostCPU.kvm && + !(dst->hostCPU.kvm = virCPUDefCopy(src->hostCPU.kvm))) return -1; - if (src->hostCPU.kvm.migratable && - !(dst->hostCPU.kvm.migratable = virCPUDefCopy(src->hostCPU.kvm.migratable))) - return -1; - - if (src->hostCPU.tcg.full && - !(dst->hostCPU.tcg.full = virCPUDefCopy(src->hostCPU.tcg.full))) - return -1; - - if (src->hostCPU.tcg.migratable && - !(dst->hostCPU.tcg.migratable = virCPUDefCopy(src->hostCPU.tcg.migratable))) + if (src->hostCPU.tcg && + !(dst->hostCPU.tcg = virCPUDefCopy(src->hostCPU.tcg))) return -1; return 0; @@ -2217,10 +2201,8 @@ void virQEMUCapsDispose(void *obj) qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo); qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo); - virCPUDefFree(qemuCaps->hostCPU.kvm.full); - virCPUDefFree(qemuCaps->hostCPU.kvm.migratable); - virCPUDefFree(qemuCaps->hostCPU.tcg.full); - virCPUDefFree(qemuCaps->hostCPU.tcg.migratable); + virCPUDefFree(qemuCaps->hostCPU.kvm); + virCPUDefFree(qemuCaps->hostCPU.tcg); } void @@ -2449,9 +2431,9 @@ virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps, virDomainVirtType type) { if (type == VIR_DOMAIN_VIRT_KVM) - return qemuCaps->hostCPU.kvm.full; + return qemuCaps->hostCPU.kvm; else - return qemuCaps->hostCPU.tcg.full; + return qemuCaps->hostCPU.tcg; } @@ -3298,40 +3280,26 @@ virQEMUCapsInitCPUModel(virQEMUCapsPtr qemuCaps, } -static virCPUDefPtr -virQEMUCapsNewHostCPUModel(void) -{ - virCPUDefPtr cpu; - - if (VIR_ALLOC(cpu) < 0) - return NULL; - - cpu->type = VIR_CPU_TYPE_GUEST; - cpu->mode = VIR_CPU_MODE_CUSTOM; - cpu->match = VIR_CPU_MATCH_EXACT; - cpu->fallback = VIR_CPU_FALLBACK_ALLOW; - - return cpu; -} - - void virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, virCapsPtr caps, virDomainVirtType type) { virCPUDefPtr cpu = NULL; - virCPUDefPtr migCPU = NULL; virCPUDefPtr hostCPU = NULL; - virQEMUCapsCPUModelPtr model; int rc; if (!caps || !virQEMUCapsGuestIsNative(caps->host.arch, qemuCaps->arch)) return; - if (!(cpu = virQEMUCapsNewHostCPUModel())) + if (VIR_ALLOC(cpu) < 0) goto error; + cpu->type = VIR_CPU_TYPE_GUEST; + cpu->mode = VIR_CPU_MODE_CUSTOM; + cpu->match = VIR_CPU_MATCH_EXACT; + cpu->fallback = VIR_CPU_FALLBACK_ALLOW; + if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, cpu, false)) < 0) { goto error; } else if (rc == 1) { @@ -3345,26 +3313,10 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, goto error; } - if (!(migCPU = virQEMUCapsNewHostCPUModel())) - goto error; - - if ((rc = virQEMUCapsInitCPUModel(qemuCaps, type, migCPU, true)) < 0) { - goto error; - } else if (rc == 1) { - VIR_DEBUG("CPU migratibility not provided by QEMU"); - - virCPUDefFree(migCPU); - if (!(migCPU = virCPUCopyMigratable(qemuCaps->arch, cpu))) - goto error; - } - if (type == VIR_DOMAIN_VIRT_KVM) - model = &qemuCaps->hostCPU.kvm; + qemuCaps->hostCPU.kvm = cpu; else - model = &qemuCaps->hostCPU.tcg; - - model->full = cpu; - model->migratable = migCPU; + qemuCaps->hostCPU.tcg = cpu; cleanup: virCPUDefFree(hostCPU); @@ -3372,7 +3324,6 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps, error: virCPUDefFree(cpu); - virCPUDefFree(migCPU); virResetLastError(); goto cleanup; } @@ -4120,10 +4071,8 @@ virQEMUCapsReset(virQEMUCapsPtr qemuCaps) qemuCaps->kvmCPUModelInfo = NULL; qemuCaps->tcgCPUModelInfo = NULL; - virCPUDefFree(qemuCaps->hostCPU.kvm.full); - virCPUDefFree(qemuCaps->hostCPU.kvm.migratable); - virCPUDefFree(qemuCaps->hostCPU.tcg.full); - virCPUDefFree(qemuCaps->hostCPU.tcg.migratable); + virCPUDefFree(qemuCaps->hostCPU.kvm); + virCPUDefFree(qemuCaps->hostCPU.tcg); memset(&qemuCaps->hostCPU, 0, sizeof(qemuCaps->hostCPU)); }