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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list