char *kernelVersion;
virArch arch;
+ virCPUData *cpuData;
size_t ngicCapabilities;
virGICCapability *gicCapabilities;
ret->kernelVersion = g_strdup(qemuCaps->kernelVersion);
ret->arch = qemuCaps->arch;
+ ret->cpuData = virCPUDataNewCopy(qemuCaps->cpuData);
if (virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm) < 0 ||
virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0)
g_free(qemuCaps->gicCapabilities);
+ virCPUDataFree(qemuCaps->cpuData);
+
virSEVCapabilitiesFree(qemuCaps->sevCapabilities);
virQEMUCapsAccelClear(&qemuCaps->kvm);
}
VIR_FREE(str);
+ if (virXPathBoolean("boolean(./cpudata)", ctxt) > 0) {
+ qemuCaps->cpuData = virCPUDataParseNode(virXPathNode("./cpudata", ctxt));
+ if (!qemuCaps->cpuData)
+ goto cleanup;
+ }
+
if (virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 ||
virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0)
goto cleanup;
virBufferAsprintf(&buf, "<kernelVersion>%s</kernelVersion>\n",
qemuCaps->kernelVersion);
+ if (qemuCaps->cpuData) {
+ g_autofree char * cpudata = virCPUDataFormat(qemuCaps->cpuData);
+ virBufferAsprintf(&buf, "%s", cpudata);
+ }
+
virBufferAsprintf(&buf, "<arch>%s</arch>\n",
virArchToString(qemuCaps->arch));
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
qemuCaps->hostCPUSignature = g_strdup(hostCPUSignature);
qemuCaps->microcodeVersion = microcodeVersion;
+ qemuCaps->cpuData = NULL;
qemuCaps->kernelVersion = g_strdup(kernelVersion);