[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 17/26] qapi: add conditions to SPICE type/comman
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 17/26] qapi: add conditions to SPICE type/commands/events on the schema |
Date: |
Thu, 17 Aug 2017 10:10:52 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) |
Copying our resident SPICE maintainer Gerd.
Marc-André Lureau <address@hidden> writes:
> Add #if defined(CONFIG_SPICE) in generated code, and adjust the
> qmp/hmp code accordingly.
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
> qapi-schema.json | 28 ++++++++++++++++++----------
> qapi/event.json | 12 ++++++++----
> monitor.c | 3 ---
> qmp.c | 16 ----------------
> 4 files changed, 26 insertions(+), 33 deletions(-)
>
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 829c66f9eb..bcee3157b0 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -1878,7 +1878,8 @@
> { 'struct': 'SpiceBasicInfo',
> 'data': { 'host': 'str',
> 'port': 'str',
> - 'family': 'NetworkAddressFamily' } }
> + 'family': 'NetworkAddressFamily' },
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SpiceServerInfo:
> @@ -1891,7 +1892,8 @@
> ##
> { 'struct': 'SpiceServerInfo',
> 'base': 'SpiceBasicInfo',
> - 'data': { '*auth': 'str' } }
> + 'data': { '*auth': 'str' },
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SpiceChannel:
> @@ -1916,7 +1918,8 @@
> { 'struct': 'SpiceChannel',
> 'base': 'SpiceBasicInfo',
> 'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id':
> 'int',
> - 'tls': 'bool'} }
> + 'tls': 'bool'},
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SpiceQueryMouseMode:
> @@ -1935,7 +1938,8 @@
> # Since: 1.1
> ##
> { 'enum': 'SpiceQueryMouseMode',
> - 'data': [ 'client', 'server', 'unknown' ] }
> + 'data': [ 'client', 'server', 'unknown' ],
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SpiceInfo:
> @@ -1972,7 +1976,8 @@
> { 'struct': 'SpiceInfo',
> 'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port':
> 'int',
> '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
> - 'mouse-mode': 'SpiceQueryMouseMode', '*channels':
> ['SpiceChannel']} }
> + 'mouse-mode': 'SpiceQueryMouseMode', '*channels':
> ['SpiceChannel']},
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @query-spice:
> @@ -2017,7 +2022,8 @@
> # }
> #
> ##
> -{ 'command': 'query-spice', 'returns': 'SpiceInfo' }
> +{ 'command': 'query-spice', 'returns': 'SpiceInfo',
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @BalloonInfo:
> @@ -5067,7 +5073,8 @@
> # Since: 1.5
> ##
> { 'struct': 'ChardevSpiceChannel', 'data': { 'type' : 'str' },
> - 'base': 'ChardevCommon' }
> + 'base': 'ChardevCommon',
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @ChardevSpicePort:
> @@ -5079,7 +5086,8 @@
> # Since: 1.5
> ##
> { 'struct': 'ChardevSpicePort', 'data': { 'fqdn' : 'str' },
> - 'base': 'ChardevCommon' }
> + 'base': 'ChardevCommon',
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @ChardevVC:
> @@ -5133,8 +5141,8 @@
> 'testdev': 'ChardevCommon',
> 'stdio' : 'ChardevStdio',
> 'console': 'ChardevCommon',
> - 'spicevmc' : 'ChardevSpiceChannel',
> - 'spiceport' : 'ChardevSpicePort',
> + 'spicevmc' : { 'type':
> 'ChardevSpiceChannel', 'if': 'defined(CONFIG_SPICE)' },
> + 'spiceport' : { 'type':
> 'ChardevSpicePort', 'if': 'defined(CONFIG_SPICE)' },
> 'vc' : 'ChardevVC',
> 'ringbuf': 'ChardevRingbuf',
> # next one is just for compatibility
> diff --git a/qapi/event.json b/qapi/event.json
> index c8b8e9f384..ff59551914 100644
> --- a/qapi/event.json
> +++ b/qapi/event.json
> @@ -344,7 +344,8 @@
> ##
> { 'event': 'SPICE_CONNECTED',
> 'data': { 'server': 'SpiceBasicInfo',
> - 'client': 'SpiceBasicInfo' } }
> + 'client': 'SpiceBasicInfo' },
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SPICE_INITIALIZED:
> @@ -372,7 +373,8 @@
> ##
> { 'event': 'SPICE_INITIALIZED',
> 'data': { 'server': 'SpiceServerInfo',
> - 'client': 'SpiceChannel' } }
> + 'client': 'SpiceChannel' },
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SPICE_DISCONNECTED:
> @@ -397,7 +399,8 @@
> ##
> { 'event': 'SPICE_DISCONNECTED',
> 'data': { 'server': 'SpiceBasicInfo',
> - 'client': 'SpiceBasicInfo' } }
> + 'client': 'SpiceBasicInfo' },
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @SPICE_MIGRATE_COMPLETED:
> @@ -412,7 +415,8 @@
> # "event": "SPICE_MIGRATE_COMPLETED" }
> #
> ##
> -{ 'event': 'SPICE_MIGRATE_COMPLETED' }
> +{ 'event': 'SPICE_MIGRATE_COMPLETED',
> + 'if': 'defined(CONFIG_SPICE)' }
>
> ##
> # @MIGRATION:
> diff --git a/monitor.c b/monitor.c
> index a1773d5bc7..4bf6a3ea2e 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -970,9 +970,6 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject
> **ret_data,
> */
> static void qmp_unregister_commands_hack(void)
> {
> -#ifndef CONFIG_SPICE
> - qmp_unregister_command(&qmp_commands, "query-spice");
> -#endif
> #ifndef CONFIG_REPLICATION
> qmp_unregister_command(&qmp_commands, "xen-set-replication");
> qmp_unregister_command(&qmp_commands, "query-xen-replication-status");
> diff --git a/qmp.c b/qmp.c
> index 2c90dacb56..90816ba283 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -130,22 +130,6 @@ void qmp_cpu_add(int64_t id, Error **errp)
> }
> }
>
> -#ifndef CONFIG_SPICE
> -/*
> - * qmp-commands.hx ensures that QMP command query-spice exists only
> - * #ifdef CONFIG_SPICE. Necessary for an accurate query-commands
> - * result. However, the QAPI schema is blissfully unaware of that,
> - * and the QAPI code generator happily generates a dead
> - * qmp_marshal_query_spice() that calls qmp_query_spice(). Provide it
> - * one, or else linking fails. FIXME Educate the QAPI schema on
> - * CONFIG_SPICE.
> - */
> -SpiceInfo *qmp_query_spice(Error **errp)
> -{
> - abort();
> -};
> -#endif
> -
> void qmp_cont(Error **errp)
> {
> BlockBackend *blk;
Same drill as for PATCH 16.
Commands you make conditional:
* query-spice
Before the patch, we first register the unconditionally command in
generated code (requires a stub), then conditionally unregister in
qmp_unregister_commands_hack().
Afterwards, we register only when CONFIG_SPICE. The command fails
exactly the same, with CommandNotFound.
Improvement, because now query-qmp-schema is accurate, and we're one
step close to killing qmp_unregister_commands_hack().
Command arguments you make conditional:
* chardev-add, chardev-change variants spicevmc, spiceport
Before the patch, "spicevmc" and "spiceport" are valid values of
"type", but char_get_class() can't map them to a QOM type name, and
fails with "'FOO' is not a valid char driver name".
Afterwards, they aren't valid values, and input_type_enum() rejects
them with "Invalid parameter 'FOO'". That error message could use
improvement, but that's not this patch's problem.
Events you make conditional:
* SPICE_CONNECTED, SPICE_INITIALIZED, SPICE_DISCONNECTED,
SPICE_MIGRATE_COMPLETED
Check for completeness by reviewing the case insensitive occurrences of
SPICE in the schema not covered by your patch:
* add_client
Same rationale as for VNC (see my review of PATCH 16). Good.
* query-chardev-backends
No conditional, because ChardevBackendInfo member @name is 'str'. I
think it should be an enum instead, and then we'd need to make some
values conditional. Not this patch's problem.
* client_migrate_info
Similar to set_password and expire_password, this is generic in
theory, documented for just "remote display", and implemented just for
SPICE, with a stub for !CONFIG_SPICE. Okay for the same reasons
set_password and expire_password are okay.
* set_password, expire_password
Same rationale as for VNC (see my review of PATCH 16). Okay.
Some of this analysis should perhaps be worked into the commit message.
- Re: [Qemu-devel] [PATCH 17/26] qapi: add conditions to SPICE type/commands/events on the schema,
Markus Armbruster <=