summary refs log tree commit diff stats
path: root/cpu-target.c
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2024-05-17 21:50:14 -0500
committerEric Blake <eblake@redhat.com>2024-05-29 18:30:31 -0500
commit199e84de1c903ba5aa1f7256310bbc4a20dd930b (patch)
treeb7561cbb1e233f5ad73d78a54072f693b30852ea /cpu-target.c
parent3b2fe44bb7f605f179e5e7feb2c13c2eb3abbb80 (diff)
downloadfocaccia-qemu-199e84de1c903ba5aa1f7256310bbc4a20dd930b.tar.gz
focaccia-qemu-199e84de1c903ba5aa1f7256310bbc4a20dd930b.zip
qio: Inherit follow_coroutine_ctx across TLS
Since qemu 8.2, the combination of NBD + TLS + iothread crashes on an
assertion failure:

qemu-kvm: ../io/channel.c:534: void qio_channel_restart_read(void *): Assertion `qemu_get_current_aio_context() == qemu_coroutine_get_aio_context(co)' failed.

It turns out that when we removed AioContext locking, we did so by
having NBD tell its qio channels that it wanted to opt in to
qio_channel_set_follow_coroutine_ctx(); but while we opted in on the
main channel, we did not opt in on the TLS wrapper channel.
qemu-iotests has coverage of NBD+iothread and NBD+TLS, but apparently
no coverage of NBD+TLS+iothread, or we would have noticed this
regression sooner.  (I'll add that in the next patch)

But while we could manually opt in to the TLS channel in nbd/server.c
(a one-line change), it is more generic if all qio channels that wrap
other channels inherit the follow status, in the same way that they
inherit feature bits.

CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Daniel P. Berrangé <berrange@redhat.com>
CC: qemu-stable@nongnu.org
Fixes: https://issues.redhat.com/browse/RHEL-34786
Fixes: 06e0f098 ("io: follow coroutine AioContext in qio_channel_yield()", v8.2.0)
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20240518025246.791593-5-eblake@redhat.com>
Diffstat (limited to 'cpu-target.c')
0 files changed, 0 insertions, 0 deletions