qemu-e2k/include/qemu
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
..
acl.h
atomic.h memory: avoid "resurrection" of dead FlatViews 2017-09-21 23:19:37 +02:00
base64.h
bcd.h
bitmap.h bitmap: provide to_le/from_le helpers 2017-09-22 14:11:25 +02:00
bitops.h vnc: replace hweight_long() with ctpopl() 2017-05-12 12:36:02 +02:00
bswap.h fpu/softfloat-types: new header to prevent excessive re-builds 2018-02-21 10:20:19 +00:00
buffer.h
compiler.h compiler: Add QEMU_BUILD_BUG_MSG() macro 2018-03-19 10:00:14 -05:00
config-file.h Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
coroutine_int.h coroutine: avoid co_queue_wakeup recursion 2018-03-27 13:05:28 +01:00
coroutine.h coroutine-lock: make qemu_co_enter_next thread-safe 2018-02-08 09:22:03 +08:00
cpuid.h util: Introduce include/qemu/cpuid.h 2017-07-24 12:42:55 +01:00
crc32c.h
cutils.h cutils: add qemu_strtoi & qemu_strtoui parsers for int/unsigned int types 2018-03-13 18:06:05 +00:00
envlist.h
error-report.h error: Functions to report warnings and informational messages 2017-07-13 13:49:54 +02:00
event_notifier.h Revert "qemu: add a cleanup callback function to EventNotifier" 2018-01-24 19:20:19 +02:00
fifo8.h
fifo32.h
fprintf-fn.h
futex.h futex: add missing header guards 2017-10-16 20:57:13 +03:00
hbitmap.h hbitmap: add next_zero function 2017-12-18 10:54:13 -05:00
help_option.h
host-utils.h pci/shpc: Move function to generic header file 2018-01-18 21:52:38 +02:00
id.h
int128.h tcg: Add atomic128 helpers 2016-10-26 08:29:01 -07:00
iov.h tests: Use real size for iov tests 2017-09-05 22:34:40 +02:00
jhash.h
lockable.h lockable: workaround GCC link issue with ASAN 2018-03-06 14:01:27 +01:00
log-for-trace.h log-for-trace.h: Split out parts of log.h used by trace.h 2018-03-12 11:10:20 +00:00
log.h log-for-trace.h: Split out parts of log.h used by trace.h 2018-03-12 11:10:20 +00:00
main-loop.h main_loop: Make main_loop_wait() return void 2017-07-04 14:39:28 +02:00
memfd.h memfd: add hugetlbsize argument 2018-02-07 14:09:25 +01:00
mmap-alloc.h exec, kvm, target-ppc: Move getrampagesize() to common code 2017-03-03 11:30:59 +11:00
module.h audio: add module loading support 2018-03-12 11:18:26 +01:00
notify.h
option_int.h
option.h util: Add qemu_opts_to_qdict_filtered() 2018-03-09 15:17:47 +01:00
osdep.h mem: add share parameter to memory-backend-ram 2018-02-19 13:03:24 +02:00
path.h
processor.h Drop remaining bits of ia64 host support 2018-02-05 18:09:45 +01:00
qdist.h
qht.h qht: fix kernel-doc markup in qht.h 2017-12-18 17:07:02 +03:00
queue.h queue: add QSIMPLEQ_PREPEND() 2018-03-27 13:05:28 +01:00
range.h
ratelimit.h ratelimit: don't align wait time with slices 2018-02-15 09:39:49 +00:00
rcu_queue.h
rcu.h membarrier: introduce qemu/sys_membarrier.h 2018-03-12 16:12:47 +01:00
readline.h readline: add a free function 2018-01-16 14:54:50 +01:00
seqlock.h
sockets.h sockets: move fd_is_socket() into common sockets code 2018-03-13 18:06:06 +00:00
stats64.h util: add stats64 module 2017-06-16 07:55:00 +08:00
sys_membarrier.h membarrier: add --enable-membarrier 2018-03-12 16:12:47 +01:00
systemd.h qemu-ga: obey LISTEN_PID when using systemd socket activation 2017-03-19 11:12:12 +01:00
thread-posix.h thread-posix: fix qemu_rec_mutex_trylock macro 2017-11-14 14:31:33 +01:00
thread-win32.h qemu-thread: Assert locks are initialized before using 2017-07-04 14:39:28 +02:00
thread.h lockable: add QemuLockable 2018-02-08 09:22:03 +08:00
throttle-options.h block: add throttle block filter driver 2017-09-06 10:12:02 +02:00
throttle.h Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
timed-average.h
timer.h replay: save prior value of the host clock 2018-03-12 16:12:50 +01:00
typedefs.h Typedef the subtypes of QObject in qemu/typedefs.h, too 2018-02-09 13:52:15 +01:00
unicode.h
uri.h
uuid.h util: add is_equal to UUID API 2017-12-20 22:01:24 +08:00
vfio-helpers.h util: Introduce vfio helpers 2018-02-08 09:22:03 +08:00
xattr.h include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00