On Tue, Jan 14, 2020 at 07:27:31PM +0100, Kevin Wolf wrote: > Some QMP command handlers can block the main loop for a relatively long > time, for example because they perform some I/O. This is quite nasty. > Allowing such handlers to run in a coroutine where they can yield (and > therefore release the BQL) while waiting for an event such as I/O > completion solves the problem. > > This series adds the infrastructure to allow this and switches > block_resize to run in a coroutine as a first example. > > This is an alternative solution to Marc-André's "monitor: add > asynchronous command type" series. > > v2: > - Fix typo in a commit message [Eric] > - Use hyphen instead of underscore for the test command [Eric] > - Mark qmp_block_resize() as coroutine_fn [Stefan] > > > Kevin Wolf (4): > qapi: Add a 'coroutine' flag for commands > vl: Initialise main loop earlier > qmp: Move dispatcher to a coroutine > block: Mark 'block_resize' as coroutine > > qapi/block-core.json | 3 +- > tests/qapi-schema/qapi-schema-test.json | 1 + > docs/devel/qapi-code-gen.txt | 4 ++ > include/qapi/qmp/dispatch.h | 3 + > monitor/monitor-internal.h | 5 +- > blockdev.c | 6 +- > monitor/monitor.c | 24 ++++--- > monitor/qmp.c | 83 ++++++++++++++++--------- > qapi/qmp-dispatch.c | 38 ++++++++++- > tests/test-qmp-cmds.c | 4 ++ > vl.c | 10 +-- > scripts/qapi/commands.py | 17 +++-- > scripts/qapi/doc.py | 2 +- > scripts/qapi/expr.py | 4 +- > scripts/qapi/introspect.py | 2 +- > scripts/qapi/schema.py | 9 ++- > tests/qapi-schema/qapi-schema-test.out | 2 + > tests/qapi-schema/test-qapi.py | 7 ++- > 18 files changed, 158 insertions(+), 66 deletions(-) > > -- > 2.20.1 > Reviewed-by: Stefan Hajnoczi