qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: marcandre.lureau@redhat.com, qemu-devel@nongnu.org
Cc: armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH 05/12] monitor: register the qapi generated commands
Date: Thu, 23 Jun 2016 22:31:40 -0600	[thread overview]
Message-ID: <576CB7AC.90602@redhat.com> (raw)
In-Reply-To: <20160623000809.4522-6-marcandre.lureau@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3467 bytes --]

On 06/22/2016 06:08 PM, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Stop using the so-called 'middle' mode. Instead, use qmp_find_command()
> from generated qapi commands registry.
> 
> Note: this commit requires a 'make clean' prior to make, since the
> generated files do not depend on Makefile (due to a cyclic rule
> introduced in 4115852bb0).

I'm not as well-versed as Paolo on Makefile issues, so I won't comment
on that part of the patch.

> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  Makefile        |   2 +-
>  monitor.c       |  12 +++--
>  qmp-commands.hx | 143 --------------------------------------------------------
>  vl.c            |   1 +
>  4 files changed, 11 insertions(+), 147 deletions(-)
> 

> +++ b/monitor.c
> @@ -3884,6 +3884,7 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
>      QObject *obj, *data;
>      QDict *input, *args;
>      const mon_cmd_t *cmd;
> +    QmpCommand *qcmd;
>      const char *cmd_name;
>      Monitor *mon = cur_mon;
>  
> @@ -3909,7 +3910,8 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
>      cmd_name = qdict_get_str(input, "execute");
>      trace_handle_qmp_command(mon, cmd_name);
>      cmd = qmp_find_cmd(cmd_name);
> -    if (!cmd) {
> +    qcmd = qmp_find_command(cmd_name);

Is it worth creating a single type that contains both mon_cmd_t and
QmpCommand information, so that we don't need two similarly-named
functions to look up two related pieces of information?  Not necessarily
in this patch.

> +    if (!qcmd || !cmd) {
>          error_set(&local_err, ERROR_CLASS_COMMAND_NOT_FOUND,
>                    "The command %s has not been found", cmd_name);
>          goto err_out;
> @@ -3931,7 +3933,7 @@ static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
>          goto err_out;
>      }
>  
> -    cmd->mhandler.cmd_new(args, &data, &local_err);
> +    qcmd->fn(args, &data, &local_err);
>  
>  err_out:
>      monitor_protocol_emitter(mon, data, local_err);
> @@ -4000,9 +4002,13 @@ void monitor_resume(Monitor *mon)
>  
>  static QObject *get_qmp_greeting(void)
>  {
> +    QmpCommand *cmd;
>      QObject *ver = NULL;
>  
> -    qmp_marshal_query_version(NULL, &ver, NULL);
> +    cmd = qmp_find_command("query-version");
> +    assert(cmd && cmd->fn);
> +    cmd->fn(NULL, &ver, NULL);
> +
>      return qobject_from_jsonf("{'QMP':{'version': %p,'capabilities': []}}",ver);

Worth fixing the missing space after ',' while touching near here?

>  }
>  
> diff --git a/qmp-commands.hx b/qmp-commands.hx
> index ee88e48..95c1e7d 100644
> --- a/qmp-commands.hx
> +++ b/qmp-commands.hx
> @@ -63,7 +63,6 @@ EQMP
>      {
>          .name       = "quit",
>          .args_type  = "",
> -        .mhandler.cmd_new = qmp_marshal_quit,

At one point, I posted an RFC patch for removing .args_type on most QMP
command listings in this file. Maybe you still do that later in your
series, but as my work definitely conflicts with yours, and your series
is older, I don't mind getting through your series first.

Overall, I like the general idea of automating things rather than having
to duplicate information in qmp-commands.hx.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

  parent reply	other threads:[~2016-06-24  4:31 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-23  0:07 [Qemu-devel] [PATCH 00/12] qapi: remove the 'middle' mode marcandre.lureau
2016-06-23  0:07 ` [Qemu-devel] [PATCH 01/12] qapi-schema: use generated marshaller for 'qmp_capabilities' marcandre.lureau
2016-06-23 22:41   ` Eric Blake
2016-06-23  0:07 ` [Qemu-devel] [PATCH 02/12] qapi-schema: add 'device_add' marcandre.lureau
2016-06-24  3:52   ` Eric Blake
2016-06-23  0:08 ` [Qemu-devel] [PATCH 03/12] monitor: register gen:false commands manually marcandre.lureau
2016-06-24  4:02   ` Eric Blake
2016-06-23  0:08 ` [Qemu-devel] [PATCH 04/12] monitor: remove usage of generated marshal functions marcandre.lureau
2016-06-24  4:23   ` Eric Blake
2016-06-24 14:14     ` Marc-André Lureau
2016-06-24 14:59       ` Eric Blake
2016-06-23  0:08 ` [Qemu-devel] [PATCH 05/12] monitor: register the qapi generated commands marcandre.lureau
2016-06-23  4:38   ` Paolo Bonzini
2016-06-23  9:02     ` Marc-André Lureau
2016-06-24  4:31   ` Eric Blake [this message]
2016-06-24 14:17     ` Marc-André Lureau
2016-06-23  0:08 ` [Qemu-devel] [PATCH 06/12] monitor: remove mhandler.cmd_new marcandre.lureau
2016-06-24  4:39   ` Eric Blake
2016-06-24 14:20     ` Marc-André Lureau
2016-06-24 15:04       ` Eric Blake
2016-06-23  0:08 ` [Qemu-devel] [PATCH 07/12] monitor: implement 'qmp_query_commands' without qmp_cmds marcandre.lureau
2016-06-23  0:08 ` [Qemu-devel] [PATCH 08/12] build-sys: remove qmp-commands-old.h marcandre.lureau
2016-06-23  0:08 ` [Qemu-devel] [PATCH 09/12] qapi: remove the "middle" mode marcandre.lureau
2016-06-23  0:08 ` [Qemu-devel] [PATCH 10/12] monitor: use qmp_dispatch() marcandre.lureau
2016-06-23  0:08 ` [Qemu-devel] [PATCH 11/12] qmp: update qmp_query_spice fallback marcandre.lureau
2016-06-23  0:08 ` [Qemu-devel] [PATCH 12/12] Drop qmp-commands.hx marcandre.lureau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=576CB7AC.90602@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).