qemu/qapi
Stefan Hajnoczi 8ec90598e9 monitor: only run coroutine commands in qemu_aio_context
monitor_qmp_dispatcher_co() runs in the iohandler AioContext that is not
polled during nested event loops. The coroutine currently reschedules
itself in the main loop's qemu_aio_context AioContext, which is polled
during nested event loops. One known problem is that QMP device-add
calls drain_call_rcu(), which temporarily drops the BQL, leading to all
sorts of havoc like other vCPU threads re-entering device emulation code
while another vCPU thread is waiting in device emulation code with
aio_poll().

Paolo Bonzini suggested running non-coroutine QMP handlers in the
iohandler AioContext. This avoids trouble with nested event loops. His
original idea was to move coroutine rescheduling to
monitor_qmp_dispatch(), but I resorted to moving it to qmp_dispatch()
because we don't know if the QMP handler needs to run in coroutine
context in monitor_qmp_dispatch(). monitor_qmp_dispatch() would have
been nicer since it's associated with the monitor implementation and not
as general as qmp_dispatch(), which is also used by qemu-ga.

A number of qemu-iotests need updated .out files because the order of
QMP events vs QMP responses has changed.

Solves Issue #1933.

Cc: qemu-stable@nongnu.org
Fixes: 7bed89958b ("device_core: use drain_call_rcu in in qmp_device_add")
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2215192
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2214985
Buglink: https://issues.redhat.com/browse/RHEL-17369
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20240118144823.1497953-4-stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Tested-by: Fiona Ebner <f.ebner@proxmox.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit effd60c878)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
(Mjt: omit changes to tests missing in 7.2)
2024-01-26 19:40:19 +03:00
..
acpi.json
audio.json audio: Add sndio backend 2022-09-27 07:32:31 +02:00
authz.json
block-core.json qapi/block-core: Fix BlockdevOptionsNvmeIoUring @path description 2022-11-10 14:46:27 +01:00
block-export.json
block.json
char.json
common.json
compat.json
control.json
crypto.json
dump.json
error.json
introspect.json
job.json
machine-target.json
machine.json qmp/hmp, device_tree.c: introduce dumpdtb 2022-10-17 16:15:10 -03:00
meson.build qga: Allow building of the guest agent without system emulators or tools 2022-11-11 09:17:45 +01:00
migration.json qapi: fix examples of events missing timestamp 2022-09-07 15:10:13 +02:00
misc-target.json
misc.json
net.json net: stream: add QAPI events to report connection state 2022-10-28 13:28:52 +08:00
opts-visitor.c
pci.json
pragma.json
qapi-clone-visitor.c
qapi-dealloc-visitor.c
qapi-forward-visitor.c
qapi-schema.json qmp: add QMP command x-query-virtio 2022-10-09 16:38:45 -04:00
qapi-type-helpers.c
qapi-util.c
qapi-visit-core.c
qdev.json qapi: fix example of DEVICE_UNPLUG_GUEST_ERROR event 2022-09-07 15:10:13 +02:00
qmp-dispatch.c monitor: only run coroutine commands in qemu_aio_context 2024-01-26 19:40:19 +03:00
qmp-event.c
qmp-registry.c
qobject-input-visitor.c
qobject-output-visitor.c
qom.json pci,pc,virtio: features, tests, fixes, cleanups 2022-11-07 18:43:56 -05:00
rdma.json
replay.json
rocker.json
run-state.json reset: allow registering handlers that aren't called by snapshot loading 2022-10-27 11:34:31 +01:00
sockets.json
stats.json
string-input-visitor.c
string-output-visitor.c
tpm.json
trace-events
trace.h
trace.json
transaction.json
ui.json gtk: Add show_menubar=on|off command line option. 2022-10-12 14:33:54 +02:00
virtio.json Fix several typos in documentation (found by codespell) 2022-11-11 09:39:25 +01:00
yank.json