<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>