On 22/03/2018 16:28, Stefan Hajnoczi wrote: > co_queue_wakeup is currently implemented in a recursive fashion. Pathological > patterns of aio_co_enter() between coroutines can cause stack exhaustion. > > This patch series implements co_queue_wakeup iteratively and avoids stack > exhaustion. > > This issue was originally reported with qemu-img convert but I don't have a > good reproducer. See Patch 3 for a test-aio test case instead. > > Stefan Hajnoczi (3): > queue: add QSIMPLEQ_PREPEND() > coroutine: avoid co_queue_wakeup recursion > coroutine: add test-aio coroutine queue chaining test case > > include/qemu/coroutine_int.h | 1 - > include/qemu/queue.h | 8 ++++ > block/io.c | 3 +- > tests/test-aio.c | 65 ++++++++++++++++++++----- > util/qemu-coroutine-lock.c | 34 ------------- > util/qemu-coroutine.c | 110 > +++++++++++++++++++++++-------------------- > 6 files changed, 120 insertions(+), 101 deletions(-) >
Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> I was a little surprised by the disappearing of the "do not use co anymore" comments, but they seem unnecessary indeed with the new code. Paolo