*/
static char **
vshExtractCPUDefXMLs(vshControl *ctl,
- const char *xmlFile)
+ const char *xmlFile,
+ bool hostCPUWarning)
{
g_auto(GStrv) cpus = NULL;
g_autofree char *buffer = NULL;
cpus = g_new0(char *, n + 1);
for (i = 0; i < n; i++) {
+ ctxt->node = nodes[i];
+
/* If the user provided domain capabilities XML, we need to replace
* <mode ...> element with <cpu>. */
if (xmlStrEqual(nodes[i]->name, BAD_CAST "mode")) {
}
}
+ if (hostCPUWarning &&
+ virXPathBoolean("boolean(./feature[not(@policy)])", ctxt) == 1) {
+ vshWarn(ctl, "%s", _("using host CPU definition as input may provide incorrect results"));
+ }
+
if (!(cpus[i] = virXMLNodeToString(xml, nodes[i]))) {
vshSaveLibvirtError();
return NULL;
if (vshCommandOptString(ctl, cmd, "file", &from) < 0)
return false;
- if (!(cpus = vshExtractCPUDefXMLs(ctl, from)))
+ if (!(cpus = vshExtractCPUDefXMLs(ctl, from, false)))
return false;
result = virConnectCompareCPU(priv->conn, cpus[0], flags);
if (vshCommandOptString(ctl, cmd, "file", &from) < 0)
return false;
- if (!(list = vshExtractCPUDefXMLs(ctl, from)))
+ if (!(list = vshExtractCPUDefXMLs(ctl, from, false)))
return false;
if (!(result = virConnectBaselineCPU(priv->conn, (const char **)list,
vshCommandOptString(ctl, cmd, "machine", &machine) < 0)
return false;
- if (!(cpus = vshExtractCPUDefXMLs(ctl, from)))
+ if (!(cpus = vshExtractCPUDefXMLs(ctl, from, true)))
return false;
result = virConnectCompareHypervisorCPU(priv->conn, emulator, arch,
VSH_ALTERNATIVE_OPTIONS_EXPR("file", from, "model", model);
if (from) {
- if (!(list = vshExtractCPUDefXMLs(ctl, from)))
+ if (!(list = vshExtractCPUDefXMLs(ctl, from, true)))
return false;
} else {
list = g_new0(char *, 2);