<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 04/16/2018 03:02 AM, Ján Tomko
wrote:<br>
</div>
<blockquote type="cite" cite="mid:20180416080217.GG21958@dnr">On
Mon, Apr 16, 2018 at 01:06:58AM -0500, Chris Venteicher wrote:
<br>
<blockquote type="cite">Function qemuMonitorGetCPUModelBaseline
exposed to carry out a QMP
<br>
query-cpu-model-baseline transaction with QEMU.
<br>
<br>
QEMU determines a baseline CPU Model from two input CPU Models
to
<br>
complete the query-cpu-model-baseline transaction.
<br>
---
<br>
src/qemu/qemu_monitor.c | 16 +++++++++++++
<br>
src/qemu/qemu_monitor.h | 5 ++++
<br>
src/qemu/qemu_monitor_json.c | 56
++++++++++++++++++++++++++++++++++++++++++++
<br>
src/qemu/qemu_monitor_json.h | 7 ++++++
<br>
4 files changed, 84 insertions(+)
<br>
<br>
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
<br>
index 7b647525b..9db9d4b81 100644
<br>
--- a/src/qemu/qemu_monitor.c
<br>
+++ b/src/qemu/qemu_monitor.c
<br>
@@ -3874,6 +3874,22 @@ qemuMonitorCPUModelInfoCopy(const
qemuMonitorCPUModelInfo *orig)
<br>
return NULL;
<br>
}
<br>
<br>
+int
<br>
+qemuMonitorGetCPUModelBaseline(qemuMonitorPtr mon,
<br>
+ qemuMonitorCPUModelInfoPtr
model_a,
<br>
+ qemuMonitorCPUModelInfoPtr
model_b,
<br>
+ qemuMonitorCPUModelInfoPtr
*model_baseline)
<br>
+{
<br>
+ if (model_a)
<br>
+ VIR_DEBUG("model_a->name=%s", model_a->name);
<br>
+
<br>
+ if (model_b)
<br>
+ VIR_DEBUG("model_b->name=%s", model_b->name);
<br>
+
<br>
+ QEMU_CHECK_MONITOR_JSON(mon);
<br>
+
<br>
+ return qemuMonitorJSONGetCPUModelBaseline(mon, model_a,
model_b, model_baseline);
<br>
+}
<br>
<br>
int
<br>
qemuMonitorGetCommands(qemuMonitorPtr mon,
<br>
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
<br>
index d04148e56..c7a80ca63 100644
<br>
--- a/src/qemu/qemu_monitor.h
<br>
+++ b/src/qemu/qemu_monitor.h
<br>
@@ -1079,6 +1079,11 @@ void
qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr
model_info);
<br>
qemuMonitorCPUModelInfoPtr
<br>
qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo
*orig);
<br>
<br>
+int qemuMonitorGetCPUModelBaseline(qemuMonitorPtr mon,
<br>
+ qemuMonitorCPUModelInfoPtr
model_a,
<br>
+ qemuMonitorCPUModelInfoPtr
model_b,
<br>
+ qemuMonitorCPUModelInfoPtr
*model_baseline);
<br>
+
<br>
int qemuMonitorGetCommands(qemuMonitorPtr mon,
<br>
char ***commands);
<br>
int qemuMonitorGetEvents(qemuMonitorPtr mon,
<br>
diff --git a/src/qemu/qemu_monitor_json.c
b/src/qemu/qemu_monitor_json.c
<br>
index 320d4601e..e03f6091c 100644
<br>
--- a/src/qemu/qemu_monitor_json.c
<br>
+++ b/src/qemu/qemu_monitor_json.c
<br>
@@ -5544,6 +5544,62 @@
qemuMonitorJSONGetCPUModelExpansion(qemuMonitorPtr mon,
<br>
return ret;
<br>
}
<br>
<br>
+int
<br>
+qemuMonitorJSONGetCPUModelBaseline(qemuMonitorPtr mon,
<br>
+ qemuMonitorCPUModelInfoPtr
model_a,
<br>
+ qemuMonitorCPUModelInfoPtr
model_b,
<br>
+ qemuMonitorCPUModelInfoPtr
*model_baseline)
<br>
+{
<br>
+ int ret = -1;
<br>
+ virJSONValuePtr cmd = NULL;
<br>
+ virJSONValuePtr reply = NULL;
<br>
+ virJSONValuePtr data = NULL;
<br>
+ virJSONValuePtr modela = NULL;
<br>
+ virJSONValuePtr modelb = NULL;
<br>
</blockquote>
<br>
Please do not try to align the =.
<br>
<br>
<blockquote type="cite">+
<br>
+ *model_baseline = NULL;
<br>
+
<br>
+ if (qemuMonitorJSONBuildCPUModelInfoJSON(model_a,
&modela) < 0)
<br>
+ goto cleanup;
<br>
+
<br>
+ if (qemuMonitorJSONBuildCPUModelInfoJSON(model_b,
&modelb) < 0)
<br>
+ goto cleanup;
<br>
+
<br>
+ if (!(cmd =
qemuMonitorJSONMakeCommand("query-cpu-model-baseline",
<br>
+ "a:modela",
&modela,
<br>
+ "a:modelb",
&modelb,
<br>
+ NULL)))
<br>
+ goto cleanup;
<br>
+
<br>
+
<br>
+ if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
<br>
+ goto cleanup;
<br>
+
<br>
+ /* Urgh, some QEMU architectures have
query-cpu-model-baseline
<br>
+ * command but return 'GenericError' with string "Not
supported",
<br>
+ * instead of simply omitting the command entirely
<br>
+ */
<br>
+ if (qemuMonitorJSONHasError(reply, "GenericError"))
<br>
+ goto cleanup;
<br>
</blockquote>
<br>
Missing virReportError.
<br>
<br>
Ideally, on error all libvirt functions would either call
virReportError
<br>
or be quiet in all possible exit paths.
<br>
</blockquote>
Please see next version of patch set...<br>
Returning 0 instead of -1 in response to reply "GenericError" to be
consistent with other commands.<br>
<br>
Otherwise, I think I am mirroring other functions in the file in
terms of when virReportError is called.<br>
Possible exception is error while parsing "return" json within
qemuMonitorJSONBuildCPUModelInfoFromJSON... But virReportErrors are
generated within that function if there found.<br>
<br>
Please advise with specifics places I where I should be adding
virReportErrors if you still see the problem in version 2 of the
patch set.<br>
<br>
Chris<br>
<br>
<blockquote type="cite" cite="mid:20180416080217.GG21958@dnr">
<br>
Jano
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">--
libvir-list mailing list
<a class="moz-txt-link-abbreviated" href="mailto:libvir-list@redhat.com">libvir-list@redhat.com</a>
<a class="moz-txt-link-freetext" href="https://www.redhat.com/mailman/listinfo/libvir-list">https://www.redhat.com/mailman/listinfo/libvir-list</a></pre>
</blockquote>
<br>
</body>
</html>