}
}
+ for (i = 0; i < defs->ncpus; i++) {
+ qemuMonitorCPUDefInfo *cpu = &defs->cpus[i];
+ char **blocker;
+
+ if (!cpu->blockers)
+ continue;
+
+ for (blocker = cpu->blockers; *blocker; blocker++)
+ virQEMUCapsCPUFeatureFromQEMUInPlace(arch, blocker);
+ }
+
*cpuDefs = g_steal_pointer(&defs);
return 0;
}
}
+void
+virQEMUCapsCPUFeatureFromQEMUInPlace(virArch arch,
+ char **feature)
+{
+ const char *tmp = virQEMUCapsCPUFeatureFromQEMU(arch, *feature);
+
+ if (tmp != *feature) {
+ VIR_FREE(*feature);
+ *feature = g_strdup(tmp);
+ }
+}
+
+
/**
* Returns 0 when host CPU model provided by QEMU was filled in qemuCaps,
* 1 when the caller should fall back to using virCaps *->host.cpu,
static int
-virQEMUCapsLoadCPUModels(virQEMUCapsAccel *caps,
+virQEMUCapsLoadCPUModels(virArch arch,
+ virQEMUCapsAccel *caps,
xmlXPathContextPtr ctxt,
const char *typeStr)
{
"capabilities cache"));
return -1;
}
+
+ virQEMUCapsCPUFeatureFromQEMUInPlace(arch, &cpu->blockers[j]);
}
}
if (virQEMUCapsLoadHostCPUModelInfo(caps, ctxt, typeStr) < 0)
return -1;
- if (virQEMUCapsLoadCPUModels(caps, ctxt, typeStr) < 0)
+ if (virQEMUCapsLoadCPUModels(qemuCaps->arch, caps, ctxt, typeStr) < 0)
return -1;
if (virQEMUCapsLoadMachines(caps, ctxt, typeStr) < 0)
static void
-virQEMUCapsFormatCPUModels(virQEMUCapsAccel *caps,
+virQEMUCapsFormatCPUModels(virArch arch,
+ virQEMUCapsAccel *caps,
virBuffer *buf,
const char *typeStr)
{
virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
- for (j = 0; cpu->blockers[j]; j++)
- virBufferAsprintf(buf, "<blocker name='%s'/>\n", cpu->blockers[j]);
+ for (j = 0; cpu->blockers[j]; j++) {
+ virBufferAsprintf(buf, "<blocker name='%s'/>\n",
+ virQEMUCapsCPUFeatureToQEMU(arch, cpu->blockers[j]));
+ }
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</cpu>\n");
const char *typeStr = virQEMUCapsAccelStr(type);
virQEMUCapsFormatHostCPUModelInfo(caps, buf, typeStr);
- virQEMUCapsFormatCPUModels(caps, buf, typeStr);
+ virQEMUCapsFormatCPUModels(qemuCaps->arch, caps, buf, typeStr);
virQEMUCapsFormatMachines(caps, buf, typeStr);
}