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