qemu/include
Stefan Hajnoczi c40a254570 coroutine: avoid co_queue_wakeup recursion
qemu_aio_coroutine_enter() is (indirectly) called recursively when
processing co_queue_wakeup.  This can lead to stack exhaustion.

This patch rewrites co_queue_wakeup in an iterative fashion (instead of
recursive) with bounded memory usage to prevent stack exhaustion.

qemu_co_queue_run_restart() is inlined into qemu_aio_coroutine_enter()
and the qemu_coroutine_enter() call is turned into a loop to avoid
recursion.

There is one change that is worth mentioning:  Previously, when
coroutine A queued coroutine B, qemu_co_queue_run_restart() entered
coroutine B from coroutine A.  If A was terminating then it would still
stay alive until B yielded.  After this patch B is entered by A's parent
so that a A can be deleted immediately if it is terminating.

It is safe to make this change since B could never interact with A if it
was terminating anyway.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20180322152834.12656-3-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2018-03-27 13:05:28 +01:00
..
block include/block/block_int: Document protocol related functions 2018-03-26 12:16:00 +02:00
chardev chardev: introduce chr_machine_done hook 2018-03-12 16:12:46 +01:00
crypto Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
disas RISC-V Disassembler 2018-03-07 08:30:28 +13:00
exec virtio,vhost,pci,pc: features, cleanups 2018-03-20 15:48:34 +00:00
fpu softfloat: use floatx80_infinity in softfloat 2018-03-04 17:27:35 +01:00
hw mach-virt: Set VM's SMBIOS system version to mc->name 2018-03-23 18:26:46 +00:00
io qio: non-default context for TLS handshake 2018-03-06 10:19:07 +00:00
libdecnumber
migration migration: add postcopy migration of dirty bitmaps 2018-03-13 17:06:09 -04:00
monitor monitor: unify global init 2018-03-19 14:58:36 -05:00
net virtio_net: flush uncompleted TX on reset 2018-03-26 14:49:17 +08:00
qapi qmp: support out-of-band (oob) execution 2018-03-19 14:58:37 -05:00
qemu coroutine: avoid co_queue_wakeup recursion 2018-03-27 13:05:28 +01:00
qom Use cpu_create(type) instead of cpu_init(cpu_model) 2018-03-19 14:10:36 -03:00
scsi Include qapi/qmp/qdict.h exactly where needed 2018-02-09 13:52:15 +01:00
standard-headers virtio,vhost,pci,pc: features, cleanups 2018-03-20 15:48:34 +00:00
sysemu * Record-replay lockstep execution, log dumper and fixes (Alex, Pavel) 2018-03-16 11:05:03 +00:00
ui console: minimal hotplug suport 2018-03-13 11:17:29 -06:00
elf.h RISC-V ELF Machine Definition 2018-03-07 08:30:28 +13:00
glib-compat.h glib-compat: move G_SOURCE_CONTINUE/REMOVE there 2017-10-10 16:33:55 +02:00
qemu-common.h Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
qemu-io.h
trace-tcg.h