From: Markus Armbruster <armbru@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Michael Roth <michael.roth@amd.com>,
qemu-devel@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [PATCH 1/3] qapi, audio: add query-audiodev command
Date: Fri, 05 Mar 2021 14:01:14 +0100 [thread overview]
Message-ID: <87a6rh3gbp.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20210302175524.1290840-2-berrange@redhat.com> ("Daniel P. Berrangé"'s message of "Tue, 2 Mar 2021 17:55:22 +0000")
Daniel P. Berrangé <berrange@redhat.com> writes:
> Way back in QEMU 4.0, the -audiodev command line option was introduced
> for configuring audio backends. This CLI option does not use QemuOpts
> so it is not visible for introspection in 'query-command-line-options',
> instead using the QAPI Audiodev type. Unfortunately there is also no
> QMP command that uses the Audiodev type, so it is not introspectable
> with 'query-qmp-schema' either.
This is a gap that will only widen.
By design, query-qmp-schema covers just QMP. It doesn't cover the
QAPIfied parts of the CLI. They have been growing slowly, and this
trend will continue. We need schema introspection to cover the CLI,
too. Observation, not demand.
Work-arounds:
1. When a QMP command equivalent to a QAPIfied CLI option exists,
introspect that. Involves hardcoding the connection between the two.
Example: -blockdev and blockdev-add.
2. When a QMP query exists that returns the CLI option argument,
introspect that. Involves hardcoding the connection between the two.
Example: -display and query-display-options.
3. When neither exists, create a suitable query just to enable
introspection. Example: query-display-options. Commit e1ca8f7e19
"qapi: add query-display-options command" explains this clearly:
Add query-display-options command, which allows querying the qemu
display configuration. This isn't particularly useful, except it
exposes QAPI type DisplayOptions in query-qmp-schema, so that libvirt
can discover recently added -display parameter rendernode (commit
d4dc4ab133b). Works around lack of sufficiently powerful command line
introspection.
> This introduces a 'query-audiodev' command that simply reflects back
> the list of configured -audiodev command line options. This in turn
> makes Audiodev introspectable via 'query-qmp-schema'.
Is the query just for enabling introspection, or does it have other
uses?
If the former, please steal from Gerd's explanation for your commit
message.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> audio/audio.c | 19 +++++++++++++++++++
> qapi/audio.json | 13 +++++++++++++
> 2 files changed, 32 insertions(+)
>
> diff --git a/audio/audio.c b/audio/audio.c
> index 6734c8af70..40a4bbd7ce 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -28,8 +28,10 @@
> #include "monitor/monitor.h"
> #include "qemu/timer.h"
> #include "qapi/error.h"
> +#include "qapi/clone-visitor.h"
> #include "qapi/qobject-input-visitor.h"
> #include "qapi/qapi-visit-audio.h"
> +#include "qapi/qapi-commands-audio.h"
> #include "qemu/cutils.h"
> #include "qemu/module.h"
> #include "sysemu/replay.h"
> @@ -2201,3 +2203,20 @@ size_t audio_rate_get_bytes(struct audio_pcm_info *info, RateCtl *rate,
> rate->bytes_sent += ret;
> return ret;
> }
> +
> +AudiodevList *qmp_query_audiodevs(Error **errp)
> +{
> + AudiodevList *ret = NULL, *prev = NULL, *curr;
> + AudiodevListEntry *e;
> + QSIMPLEQ_FOREACH(e, &audiodevs, next) {
> + curr = g_new0(AudiodevList, 1);
> + curr->value = QAPI_CLONE(Audiodev, e->dev);
> + if (prev) {
> + prev->next = curr;
> + prev = curr;
> + } else {
> + ret = prev = curr;
> + }
Please use QAPI_LIST_APPEND().
> + }
> + return ret;
> +}
> diff --git a/qapi/audio.json b/qapi/audio.json
> index 9cba0df8a4..d7b91230d7 100644
> --- a/qapi/audio.json
> +++ b/qapi/audio.json
> @@ -419,3 +419,16 @@
> 'sdl': 'AudiodevSdlOptions',
> 'spice': 'AudiodevGenericOptions',
> 'wav': 'AudiodevWavOptions' } }
> +
> +##
> +# @query-audiodevs:
> +#
> +# Returns information about audiodev configuration
> +#
> +# Returns: array of @Audiodev
> +#
> +# Since: 6.0
> +#
> +##
> +{ 'command': 'query-audiodevs',
> + 'returns': ['Audiodev'] }
next prev parent reply other threads:[~2021-03-05 13:02 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-02 17:55 [PATCH 0/3] audio: make audiodev introspectable by mgmt apps Daniel P. Berrangé
2021-03-02 17:55 ` [PATCH 1/3] qapi, audio: add query-audiodev command Daniel P. Berrangé
2021-03-02 19:03 ` Eric Blake
2021-03-02 21:10 ` Philippe Mathieu-Daudé
2021-03-02 21:12 ` Philippe Mathieu-Daudé
2021-03-03 10:07 ` Daniel P. Berrangé
2021-03-03 10:08 ` Daniel P. Berrangé
2021-03-05 13:01 ` Markus Armbruster [this message]
2021-03-11 11:00 ` Daniel P. Berrangé
2021-03-02 17:55 ` [PATCH 2/3] qapi, audio: respect build time conditions in audio schema Daniel P. Berrangé
2021-03-02 19:05 ` Eric Blake
2021-03-03 10:09 ` Daniel P. Berrangé
2021-03-03 7:00 ` Gerd Hoffmann
2021-03-03 10:11 ` Daniel P. Berrangé
2021-03-05 10:56 ` Markus Armbruster
2021-03-11 11:04 ` Daniel P. Berrangé
2021-03-05 12:12 ` Markus Armbruster
2022-12-12 16:53 ` Thomas Huth
2022-12-14 11:28 ` Daniel P. Berrangé
2021-03-02 17:55 ` [PATCH 3/3] qapi: provide a friendly string representation of QAPI classes Daniel P. Berrangé
2021-03-02 19:06 ` Eric Blake
2021-03-02 21:02 ` Philippe Mathieu-Daudé
2021-03-05 13:18 ` 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=87a6rh3gbp.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=kraxel@redhat.com \
--cc=michael.roth@amd.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.