Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
tools/virsh.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh.pod | 8 ++++++
2 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 01d2038..2f30a4e 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -6958,6 +6958,77 @@ cmdCPUCompare(vshControl *ctl, const vshCmd *cmd)
return ret;
}
+/*
+ * "cpu-baseline" command
+ */
+static const vshCmdInfo info_cpu_baseline[] = {
+ {"help", gettext_noop("compute baseline CPU")},
+ {"desc", gettext_noop("Compute baseline CPU for a set of given
CPUs.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_cpu_baseline[] = {
+ {"file", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("file containing XML
CPU descriptions")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdCPUBaseline(vshControl *ctl, const vshCmd *cmd)
+{
+ char *from;
+ int found;
+ int ret = TRUE;
+ char *buffer;
+ char *p;
+ char *result = NULL;
+ const char **list = NULL;
+ unsigned int count = 0;
+
+ if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+ return FALSE;
+
+ from = vshCommandOptString(cmd, "file", &found);
+ if (!found)
+ return FALSE;
+
+ if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
+ return FALSE;
+
+ p = buffer;
+ while ((p = strstr(p, "<cpu>"))) {
+ list = vshRealloc(ctl, list, sizeof(char *) * (count + 1));
+ list[count++] = p;
+
+ if ((p = strstr(p, "</cpu>"))) {
+ p += strlen("</cpu>");
+ if (*p != '\0') {
+ *p = '\0';
+ p++;
+ }
+ }
+ }
+
+ if (count == 0) {
+ vshError(ctl, _("No host CPU specified in '%s'"), from);
+ ret = FALSE;
+ goto cleanup;
+ }
+
+ result = virConnectBaselineCPU(ctl->conn, count, list, 0);
+
+ if (result)
+ vshPrint(ctl, "%s", result);
+ else
+ ret = FALSE;
+
+cleanup:
+ VIR_FREE(result);
+ VIR_FREE(list);
+ VIR_FREE(buffer);
+
+ return ret;
+}
+
/* Common code for the edit / net-edit / pool-edit functions which follow. */
static char *
editWriteToTempFile (vshControl *ctl, const char *doc)
@@ -7329,6 +7400,7 @@ static const vshCmdDef commands[] = {
#ifndef WIN32
{"console", cmdConsole, opts_console, info_console},
#endif
+ {"cpu-baseline", cmdCPUBaseline, opts_cpu_baseline, info_cpu_baseline},
{"cpu-compare", cmdCPUCompare, opts_cpu_compare, info_cpu_compare},
{"create", cmdCreate, opts_create, info_create},
{"start", cmdStart, opts_start, info_start},
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 10f622f..8f6df19 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -213,6 +213,14 @@ crashed.
Prints the available amount of memory on the machine or within a
NUMA cell if I<cellno> is provided.
+=item B<cpu-baseline> I<FILE>
+
+Compute baseline CPU which will be supported by all host CPUs given in <file>.
+The list of host CPUs is built by extracting all <cpu> elements from the
+<file>. Thus, the <file> can contain either a set of <cpu> elements
separated
+by new lines or even a set of complete <capabilities> elements printed by
+B<capabilities> command.
+
=item B<cpu-compare> I<FILE>
Compare CPU definition from XML <file> with host CPU. The XML <file> may
--
1.6.6.1