* re-computed from the other fields or external data sources every
* time we probe QEMU or load the results from the cache.
*/
- virCPUDefPtr kvmCPUModel;
- virCPUDefPtr tcgCPUModel;
+ struct {
+ virCPUDefPtr kvm;
+ virCPUDefPtr tcg;
+ } hostCPU;
};
struct virQEMUCapsSearchData {
}
+static int
+virQEMUCapsCopyHostCPUData(virQEMUCapsPtr dst,
+ virQEMUCapsPtr src)
+{
+
+ if (src->kvmCPUModelInfo &&
+ !(dst->kvmCPUModelInfo = qemuMonitorCPUModelInfoCopy(src->kvmCPUModelInfo)))
+ return -1;
+
+ if (src->tcgCPUModelInfo &&
+ !(dst->tcgCPUModelInfo = qemuMonitorCPUModelInfoCopy(src->tcgCPUModelInfo)))
+ return -1;
+
+ if (src->hostCPU.kvm &&
+ !(dst->hostCPU.kvm = virCPUDefCopy(src->hostCPU.kvm)))
+ return -1;
+
+ if (src->hostCPU.tcg &&
+ !(dst->hostCPU.tcg = virCPUDefCopy(src->hostCPU.tcg)))
+ return -1;
+
+ return 0;
+}
+
+
virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
{
virQEMUCapsPtr ret = virQEMUCapsNew();
goto error;
}
- if (qemuCaps->kvmCPUModel &&
- !(ret->kvmCPUModel = virCPUDefCopy(qemuCaps->kvmCPUModel)))
- goto error;
-
- if (qemuCaps->tcgCPUModel &&
- !(ret->tcgCPUModel = virCPUDefCopy(qemuCaps->tcgCPUModel)))
- goto error;
-
- if (qemuCaps->kvmCPUModelInfo &&
- !(ret->kvmCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->kvmCPUModelInfo)))
- goto error;
-
- if (qemuCaps->tcgCPUModelInfo &&
- !(ret->tcgCPUModelInfo = qemuMonitorCPUModelInfoCopy(qemuCaps->tcgCPUModelInfo)))
+ if (virQEMUCapsCopyHostCPUData(ret, qemuCaps) < 0)
goto error;
if (VIR_ALLOC_N(ret->machineTypes, qemuCaps->nmachineTypes) < 0)
qemuMonitorCPUModelInfoFree(qemuCaps->kvmCPUModelInfo);
qemuMonitorCPUModelInfoFree(qemuCaps->tcgCPUModelInfo);
- virCPUDefFree(qemuCaps->kvmCPUModel);
- virCPUDefFree(qemuCaps->tcgCPUModel);
+ virCPUDefFree(qemuCaps->hostCPU.kvm);
+ virCPUDefFree(qemuCaps->hostCPU.tcg);
}
void
virDomainVirtType type)
{
if (type == VIR_DOMAIN_VIRT_KVM)
- return qemuCaps->kvmCPUModel;
+ return qemuCaps->hostCPU.kvm;
else
- return qemuCaps->tcgCPUModel;
+ return qemuCaps->hostCPU.tcg;
}
}
if (type == VIR_DOMAIN_VIRT_KVM)
- qemuCaps->kvmCPUModel = cpu;
+ qemuCaps->hostCPU.kvm = cpu;
else
- qemuCaps->tcgCPUModel = cpu;
+ qemuCaps->hostCPU.tcg = cpu;
cleanup:
virCPUDefFree(hostCPU);
qemuCaps->kvmCPUModelInfo = NULL;
qemuCaps->tcgCPUModelInfo = NULL;
- virCPUDefFree(qemuCaps->kvmCPUModel);
- virCPUDefFree(qemuCaps->tcgCPUModel);
- qemuCaps->kvmCPUModel = NULL;
- qemuCaps->tcgCPUModel = NULL;
+ virCPUDefFree(qemuCaps->hostCPU.kvm);
+ virCPUDefFree(qemuCaps->hostCPU.tcg);
+ memset(&qemuCaps->hostCPU, 0, sizeof(qemuCaps->hostCPU));
}