From: "Marc-André Lureau" <mlureau@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: marcandre lureau <marcandre.lureau@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v4 06/17] monitor: unregister conditional commands
Date: Tue, 16 Aug 2016 10:34:56 -0400 (EDT) [thread overview]
Message-ID: <1604394942.66237.1471358096460.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <8737m44wod.fsf@dusky.pond.sub.org>
Hi
----- Original Message -----
> marcandre.lureau@redhat.com writes:
>
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > The current monitor dispatch codes doesn't know commands that have been
> > filtered out during qmp-commands.hx preprocessing. query-commands
> > doesn't list them either. However, qapi generator doesn't filter them
> > out, and they are listed in the command list.
> >
> > For now, disable the commands that aren't avaible to avoid introducing a
> > regression there when switching to qmp_dispatch() or listing commands
> > from the generated qapi code.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > monitor.c | 23 +++++++++++++++++++++++
> > 1 file changed, 23 insertions(+)
> >
> > diff --git a/monitor.c b/monitor.c
> > index b7ae552..ef946ad 100644
> > --- a/monitor.c
> > +++ b/monitor.c
> > @@ -1008,6 +1008,26 @@ static void qmp_query_qmp_schema(QDict *qdict,
> > QObject **ret_data,
> > *ret_data = qobject_from_json(qmp_schema_json);
> > }
> >
> > +/*
> > + * Those commands are registered unconditionnally by generated
> > + * qmp files. FIXME: Educate the QAPI schema on #ifdef commands.
> > + */
> > +static void qmp_disable_marshal(void)
> > +{
> > +#ifndef CONFIG_SPICE
> > + qmp_disable_command("query-spice");
> > +#endif
> > +#ifndef TARGET_I386
> > + qmp_disable_command("rtc-reset-reinjection");
> > +#endif
> > +#ifndef TARGET_S390X
> > + qmp_disable_command("dump-skeys");
> > +#endif
> > +#ifndef TARGET_ARM
> > + qmp_disable_command("query-gic-capabilities");
> > +#endif
> > +}
> > +
> > static void qmp_init_marshal(void)
> > {
> > qmp_register_command("query-qmp-schema", qmp_query_qmp_schema,
> > @@ -1016,6 +1036,9 @@ static void qmp_init_marshal(void)
> > QCO_NO_OPTIONS);
> > qmp_register_command("netdev_add", qmp_netdev_add,
> > QCO_NO_OPTIONS);
> > +
> > + /* call it after the rest of qapi_init() */
> > + register_module_init(qmp_disable_marshal, MODULE_INIT_QAPI);
> > }
> >
> > qapi_init(qmp_init_marshal);
>
> Let's see whether I understand this patch...
>
> qmp_disable_command() sets a flag that can be tested directly or with
> qmp_command_is_enabled(). do_qmp_dispatch() tests it, and fails the
> command with an "The command FOO has been disabled for this instance"
> error. It's called from qmp_dispatch(), which we're not yet using for
> QMP at this point of the series.
>
> QGA uses this to implement its "freeze whitelist", i.e. to disable all
> commands that aren't known to be safe while filesystems are frozen.
>
> qmp_disable_command() does nothing when the command doesn't exist, which
> I think is the case at this point of the series.
>
> So this patch does exactly nothing by itself. When you later flip
> dispatch to use qmp_dispatch(), it becomes active, and the error for
> these commands changes from
>
> {"error": {"class": "CommandNotFound", "desc": "The command FOO has not
> been found"}}
>
> to
>
> {"error": {"class": "GenericError", "desc": "The command FOO has been
> disabled for this instance"}}
>
> which is fine with me.
>
> Is this basically correct?
I think it's correct, I haven't played much with this as I focused on the conditional build instead, which is actually not so difficult, see:
https://github.com/elmarco/qemu/commit/d0496fdabe49149e76d765d96feada0d5269c211 (qapi.py change)
https://github.com/elmarco/qemu/commit/ee3c17b7bd5ffaa0b5be258a2cfb46c6c577f653 (per target build)
https://github.com/elmarco/qemu/commit/91a692b3428878f8c26933c8a113853fb2a19970 (per target conditonal in schema)
Do you think I should introduce that conditional build earlier in this series instead of that disable workaround?
next prev parent reply other threads:[~2016-08-16 14:35 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-10 18:02 [Qemu-devel] [PATCH v4 00/17] qapi: remove the 'middle' mode marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 01/17] build-sys: define QEMU_VERSION_{MAJOR, MINOR, MICRO} marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 02/17] qapi-schema: use generated marshaller for 'qmp_capabilities' marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 03/17] qapi-schema: add 'device_add' marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 04/17] monitor: simplify invalid_qmp_mode() marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 05/17] monitor: register gen:false commands manually marcandre.lureau
2016-08-16 12:27 ` Markus Armbruster
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 06/17] monitor: unregister conditional commands marcandre.lureau
2016-08-16 14:26 ` Markus Armbruster
2016-08-16 14:34 ` Marc-André Lureau [this message]
2016-08-16 15:32 ` Markus Armbruster
2016-09-09 13:59 ` Markus Armbruster
2016-08-17 13:36 ` Markus Armbruster
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 07/17] qapi: export the marshallers marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 08/17] monitor: use qmp_find_command() (using generated qapi code) marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 09/17] monitor: implement 'qmp_query_commands' without qmp_cmds marcandre.lureau
2016-08-16 16:22 ` Markus Armbruster
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 10/17] monitor: remove mhandler.cmd_new marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 11/17] qapi: remove the "middle" mode marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 12/17] qapi: check invalid arguments on no-args commands marcandre.lureau
2016-08-17 14:47 ` Markus Armbruster
2016-08-17 15:49 ` Marc-André Lureau
2016-08-18 6:50 ` Markus Armbruster
2016-08-18 8:38 ` Marc-André Lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 13/17] qmp: update qmp_query_spice fallback marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 14/17] monitor: use qmp_dispatch() marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 15/17] build-sys: remove qmp-commands-old.h marcandre.lureau
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 16/17] Replace qmp-commands.hx by doc/qmp-commands.txt marcandre.lureau
2016-08-17 15:01 ` Markus Armbruster
2016-08-10 18:02 ` [Qemu-devel] [PATCH v4 17/17] qmp-commands.txt: fix some styling marcandre.lureau
2016-08-11 4:45 ` [Qemu-devel] [PATCH v4 00/17] qapi: remove the 'middle' mode no-reply
2016-08-17 15:03 ` Markus Armbruster
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=1604394942.66237.1471358096460.JavaMail.zimbra@redhat.com \
--to=mlureau@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.