From: Markus Armbruster <armbru@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: marcandre.lureau@gmail.com, qemu-devel@nongnu.org,
qemu-block@nongnu.org, armbru@redhat.com
Subject: Re: [PATCH v5 1/4] qapi: Add a 'coroutine' flag for commands
Date: Tue, 03 Mar 2020 09:10:58 +0100 [thread overview]
Message-ID: <87tv35dfjh.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20200218154036.28562-2-kwolf@redhat.com> (Kevin Wolf's message of "Tue, 18 Feb 2020 16:40:33 +0100")
Kevin Wolf <kwolf@redhat.com> writes:
> This patch adds a new 'coroutine' flag to QMP command definitions that
> tells the QMP dispatcher that the command handler is safe to be run in a
> coroutine.
>
> The documentation of the new flag pretends that this flag is already
> used as intended, which it isn't yet after this patch. We'll implement
> this in another patch in this series.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> ---
> docs/devel/qapi-code-gen.txt | 11 +++++++++++
> include/qapi/qmp/dispatch.h | 1 +
> tests/test-qmp-cmds.c | 4 ++++
> scripts/qapi/commands.py | 10 +++++++---
> scripts/qapi/doc.py | 2 +-
> scripts/qapi/expr.py | 10 ++++++++--
> scripts/qapi/introspect.py | 2 +-
> scripts/qapi/schema.py | 9 ++++++---
> tests/qapi-schema/test-qapi.py | 7 ++++---
> tests/Makefile.include | 1 +
> tests/qapi-schema/oob-coroutine.err | 2 ++
> tests/qapi-schema/oob-coroutine.json | 2 ++
> tests/qapi-schema/oob-coroutine.out | 0
> tests/qapi-schema/qapi-schema-test.json | 1 +
> tests/qapi-schema/qapi-schema-test.out | 2 ++
> 15 files changed, 51 insertions(+), 13 deletions(-)
> create mode 100644 tests/qapi-schema/oob-coroutine.err
> create mode 100644 tests/qapi-schema/oob-coroutine.json
> create mode 100644 tests/qapi-schema/oob-coroutine.out
>
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index 59d6973e1e..df01bd852b 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -457,6 +457,7 @@ Syntax:
> '*gen': false,
> '*allow-oob': true,
> '*allow-preconfig': true,
> + '*coroutine': true,
> '*if': COND,
> '*features': FEATURES }
>
> @@ -581,6 +582,16 @@ before the machine is built. It defaults to false. For example:
> QMP is available before the machine is built only when QEMU was
> started with --preconfig.
>
> +Member 'coroutine' tells the QMP dispatcher whether the command handler
> +is safe to be run in a coroutine. It defaults to false. If it is true,
> +the command handler is called from coroutine context and may yield while
> +waiting for an external event (such as I/O completion) in order to avoid
> +blocking the guest and other background operations.
> +
> +It is an error to specify both 'coroutine': true and 'allow-oob': true
> +for a command. (We don't currently have a use case for both together and
> +without a use case, it's not entirely clear what the semantics should be.)
The parenthesis is new since v4. I like its contents. I'm not fond of
putting complete sentences in parenthesis. I'll drop them, if you don't
mind.
> +
> The optional 'if' member specifies a conditional. See "Configuring
> the schema" below for more on this.
>
[...]
> diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
> index d7a289eded..95cc006cae 100644
> --- a/scripts/qapi/expr.py
> +++ b/scripts/qapi/expr.py
> @@ -89,10 +89,16 @@ def check_flags(expr, info):
> if key in expr and expr[key] is not False:
> raise QAPISemError(
> info, "flag '%s' may only use false value" % key)
> - for key in ['boxed', 'allow-oob', 'allow-preconfig']:
> + for key in ['boxed', 'allow-oob', 'allow-preconfig', 'coroutine']:
> if key in expr and expr[key] is not True:
> raise QAPISemError(
> info, "flag '%s' may only use true value" % key)
> + if 'allow-oob' in expr and 'coroutine' in expr:
> + # This is not necessarily a fundamental incompatibility, but we don't
> + # have a use case and the desired semantics isn't obvious. The simplest
> + # solution is to forbid it until we get a use case for it.
Appreciated. I'll word-wrap, if you don't mind.
> + raise QAPISemError(info, "flags 'allow-oob' and 'coroutine' "
> + "are incompatible")
>
>
> def check_if(expr, info, source):
> @@ -344,7 +350,7 @@ def check_exprs(exprs):
> ['command'],
> ['data', 'returns', 'boxed', 'if', 'features',
> 'gen', 'success-response', 'allow-oob',
> - 'allow-preconfig'])
> + 'allow-preconfig', 'coroutine'])
> normalize_members(expr.get('data'))
> check_command(expr, info)
> elif meta == 'event':
[...]
R-by stands.
next prev parent reply other threads:[~2020-03-03 8:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-18 15:40 [PATCH v5 0/4] qmp: Optionally run handlers in coroutines Kevin Wolf
2020-02-18 15:40 ` [PATCH v5 1/4] qapi: Add a 'coroutine' flag for commands Kevin Wolf
2020-03-03 8:10 ` Markus Armbruster [this message]
2020-03-03 11:40 ` Kevin Wolf
2020-02-18 15:40 ` [PATCH v5 2/4] vl: Initialise main loop earlier Kevin Wolf
2020-02-19 14:07 ` Wolfgang Bumiller
2020-02-19 14:57 ` Kevin Wolf
2020-02-18 15:40 ` [PATCH v5 3/4] qmp: Move dispatcher to a coroutine Kevin Wolf
2020-03-03 8:49 ` Markus Armbruster
2020-03-03 11:35 ` Kevin Wolf
2020-03-18 15:36 ` Markus Armbruster
2020-03-23 17:41 ` Kevin Wolf
2020-03-23 18:03 ` Marc-André Lureau
2020-03-30 12:33 ` Markus Armbruster
2020-03-30 12:30 ` Markus Armbruster
2020-02-18 15:40 ` [PATCH v5 4/4] block: Mark 'block_resize' as coroutine Kevin Wolf
2020-03-03 15:33 ` [PATCH v5 0/4] qmp: Optionally run handlers in coroutines 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=87tv35dfjh.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=qemu-block@nongnu.org \
--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.