diff options
author | Kevin Wolf | 2020-10-05 17:58:50 +0200 |
---|---|---|
committer | Markus Armbruster | 2020-10-09 07:08:20 +0200 |
commit | 9ce44e2ce267caf5559904a201aa1986b0a8326b (patch) | |
tree | 7435b0a31a7b52eedfaa544c39d13e186b4175b9 /include/qapi/qmp | |
parent | qapi: Add a 'coroutine' flag for commands (diff) | |
download | qemu-9ce44e2ce267caf5559904a201aa1986b0a8326b.tar.gz qemu-9ce44e2ce267caf5559904a201aa1986b0a8326b.tar.xz qemu-9ce44e2ce267caf5559904a201aa1986b0a8326b.zip |
qmp: Move dispatcher to a coroutine
This moves the QMP dispatcher to a coroutine and runs all QMP command
handlers that declare 'coroutine': true in coroutine context so they
can avoid blocking the main loop while doing I/O or waiting for other
events.
For commands that are not declared safe to run in a coroutine, the
dispatcher drops out of coroutine context by calling the QMP command
handler from a bottom half.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20201005155855.256490-10-kwolf@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'include/qapi/qmp')
-rw-r--r-- | include/qapi/qmp/dispatch.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/qapi/qmp/dispatch.h b/include/qapi/qmp/dispatch.h index 9fd2b720a7..af8d96c570 100644 --- a/include/qapi/qmp/dispatch.h +++ b/include/qapi/qmp/dispatch.h @@ -31,6 +31,7 @@ typedef enum QmpCommandOptions typedef struct QmpCommand { const char *name; + /* Runs in coroutine context if QCO_COROUTINE is set */ QmpCommandFunc *fn; QmpCommandOptions options; QTAILQ_ENTRY(QmpCommand) node; |