[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 07/18] qmp: Hack to keep commands configuration-speci
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 07/18] qmp: Hack to keep commands configuration-specific |
Date: |
Mon, 19 Sep 2016 18:41:23 +0200 |
From: Marc-André Lureau <address@hidden>
We currently define QMP commands in two places: the QAPI schema and
qmp-commands.hx. The latter is preprocessed, the former is not. We
use the preprocessor to suppress configuration-specific commands. For
instance, query-spice is only available #ifdef CONFIG_SPICE.
QMP command dispatch and query-commands use the qmp-commands.hx
definition, and thus obey the #ifdeffery there. Good, because it lets
QMP clients probe for available features more easily.
query-qmp-schema uses the QAPI schema, and thus lists the
configuration-specific commands even when they're unavailable. Not so
good.
We're about to flip command dispatch and query-commands to the
non-middle-mode command registry, which uses the QAPI schema, so we
can ditch qmp-commands.hx. To avoid regressing query-commands,
arrange for commands that are suppressed with the preprocessor now to
be unregistered with that registry. This will keep them unavailable
and out of query-commands when we flip command dispatch and
query-commands to that registry, exactly as before.
This is a hack. The proper solution is to support
configuration-specific commands in the QAPI schema. Mark it FIXME.
Signed-off-by: Marc-André Lureau <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
Message-Id: <address@hidden>
---
monitor.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/monitor.c b/monitor.c
index b7ae552..18d37f7 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1008,6 +1008,38 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject
**ret_data,
*ret_data = qobject_from_json(qmp_schema_json);
}
+/*
+ * Note: right now, this function is never called. It will be called
+ * shortly when we stop using QAPI 'middle mode'. The rest of this
+ * comment is written as if that was the case already.
+ *
+ * We used to define commands in qmp-commands.hx in addition to the
+ * QAPI schema. This permitted defining some of them only in certain
+ * configurations. query-commands has always reflected that (good,
+ * because it lets QMP clients figure out what's actually available),
+ * while query-qmp-schema never did (not so good). This function is a
+ * hack to keep the configuration-specific commands defined exactly as
+ * before, even though qmp-commands.hx is gone.
+ *
+ * FIXME Educate the QAPI schema on configuration-specific commands,
+ * and drop this hack.
+ */
+static void qmp_unregister_commands_hack(void)
+{
+#ifndef CONFIG_SPICE
+ qmp_unregister_command("query-spice");
+#endif
+#ifndef TARGET_I386
+ qmp_unregister_command("rtc-reset-reinjection");
+#endif
+#ifndef TARGET_S390X
+ qmp_unregister_command("dump-skeys");
+#endif
+#ifndef TARGET_ARM
+ qmp_unregister_command("query-gic-capabilities");
+#endif
+}
+
static void qmp_init_marshal(void)
{
qmp_register_command("query-qmp-schema", qmp_query_qmp_schema,
@@ -1016,6 +1048,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_unregister_commands_hack, MODULE_INIT_QAPI);
}
qapi_init(qmp_init_marshal);
--
2.5.5
- [Qemu-devel] [PULL 13/18] qapi: check invalid arguments on no-args commands, (continued)
- [Qemu-devel] [PULL 13/18] qapi: check invalid arguments on no-args commands, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 14/18] tests: add a test to check invalid args, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 04/18] monitor: simplify invalid_qmp_mode(), Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 01/18] build-sys: define QEMU_VERSION_{MAJOR, MINOR, MICRO}, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 06/18] qapi: Support unregistering QMP commands, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 02/18] qapi-schema: use generated marshaller for 'qmp_capabilities', Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 17/18] qmp-commands.hx: fix some styling, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 16/18] build-sys: remove qmp-commands-old.h, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 12/18] qapi: remove the "middle" mode, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 18/18] Replace qmp-commands.hx by docs/qmp-commands.txt, Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 07/18] qmp: Hack to keep commands configuration-specific,
Markus Armbruster <=
- [Qemu-devel] [PULL 09/18] monitor: use qmp_find_command() (using generated qapi code), Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 15/18] monitor: use qmp_dispatch(), Markus Armbruster, 2016/09/19
- [Qemu-devel] [PULL 11/18] monitor: remove mhandler.cmd_new, Markus Armbruster, 2016/09/19
- Re: [Qemu-devel] [PULL 00/18] QAPI patches for 2016-09-19, Peter Maydell, 2016/09/19