c1cd6a6221
Most importantly the first one "Revert "monitor: use aio_co_reschedule_self()"", fixing a crash when doing hotplug+resize with a disk using io_uring. Other fixes (likely not too important) for TCG emulation of x86(_64) and ARM. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
54 lines
2.3 KiB
Diff
54 lines
2.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Stefan Hajnoczi <stefanha@redhat.com>
|
|
Date: Mon, 6 May 2024 15:06:21 -0400
|
|
Subject: [PATCH] Revert "monitor: use aio_co_reschedule_self()"
|
|
|
|
Commit 1f25c172f837 ("monitor: use aio_co_reschedule_self()") was a code
|
|
cleanup that uses aio_co_reschedule_self() instead of open coding
|
|
coroutine rescheduling.
|
|
|
|
Bug RHEL-34618 was reported and Kevin Wolf <kwolf@redhat.com> identified
|
|
the root cause. I missed that aio_co_reschedule_self() ->
|
|
qemu_get_current_aio_context() only knows about
|
|
qemu_aio_context/IOThread AioContexts and not about iohandler_ctx. It
|
|
does not function correctly when going back from the iohandler_ctx to
|
|
qemu_aio_context.
|
|
|
|
Go back to open coding the AioContext transitions to avoid this bug.
|
|
|
|
This reverts commit 1f25c172f83704e350c0829438d832384084a74d.
|
|
|
|
Buglink: https://issues.redhat.com/browse/RHEL-34618
|
|
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
(picked from: https://lists.nongnu.org/archive/html/qemu-devel/2024-05/msg01090.html)
|
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
|
---
|
|
qapi/qmp-dispatch.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
|
|
index 2624eb3470..790bb7d1da 100644
|
|
--- a/qapi/qmp-dispatch.c
|
|
+++ b/qapi/qmp-dispatch.c
|
|
@@ -224,7 +224,8 @@ QDict *coroutine_mixed_fn qmp_dispatch(const QmpCommandList *cmds, QObject *requ
|
|
* executing the command handler so that it can make progress if it
|
|
* involves an AIO_WAIT_WHILE().
|
|
*/
|
|
- aio_co_reschedule_self(qemu_get_aio_context());
|
|
+ aio_co_schedule(qemu_get_aio_context(), qemu_coroutine_self());
|
|
+ qemu_coroutine_yield();
|
|
}
|
|
|
|
monitor_set_cur(qemu_coroutine_self(), cur_mon);
|
|
@@ -238,7 +239,9 @@ QDict *coroutine_mixed_fn qmp_dispatch(const QmpCommandList *cmds, QObject *requ
|
|
* Move back to iohandler_ctx so that nested event loops for
|
|
* qemu_aio_context don't start new monitor commands.
|
|
*/
|
|
- aio_co_reschedule_self(iohandler_get_aio_context());
|
|
+ aio_co_schedule(iohandler_get_aio_context(),
|
|
+ qemu_coroutine_self());
|
|
+ qemu_coroutine_yield();
|
|
}
|
|
} else {
|
|
/*
|