[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v2 05/13] io: Remove redundant read/write_coroutine
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH v2 05/13] io: Remove redundant read/write_coroutine assignments |
Date: |
Wed, 20 Feb 2019 18:48:35 +0100 |
qio_channel_yield() now updates ioc->read_write/coroutine and calls
qio_channel_set_aio_fd_handlers(), so the code in the handlers has
become redundant and can be removed.
This does not make a difference in intermediate states because
aio_co_wake() really enters the coroutine immediately here: These
handlers are never run in coroutine context, and we're in the right
AioContext because qio_channel_attach_aio_context() asserts that the
handlers are inactive.
To make these conditions more obvious, replace the aio_co_wake() with a
direct qemu_coroutine_enter() and assert the right AioContext.
Suggested-by: Paolo Bonzini <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
io/channel.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/io/channel.c b/io/channel.c
index 303376e08d..aa3edf6019 100644
--- a/io/channel.c
+++ b/io/channel.c
@@ -400,16 +400,14 @@ off_t qio_channel_io_seek(QIOChannel *ioc,
}
-static void qio_channel_set_aio_fd_handlers(QIOChannel *ioc);
-
static void qio_channel_restart_read(void *opaque)
{
QIOChannel *ioc = opaque;
Coroutine *co = ioc->read_coroutine;
- ioc->read_coroutine = NULL;
- qio_channel_set_aio_fd_handlers(ioc);
- aio_co_wake(co);
+ assert(qemu_get_current_aio_context() ==
+ qemu_coroutine_get_aio_context(co));
+ qemu_coroutine_enter(co);
}
static void qio_channel_restart_write(void *opaque)
@@ -417,9 +415,9 @@ static void qio_channel_restart_write(void *opaque)
QIOChannel *ioc = opaque;
Coroutine *co = ioc->write_coroutine;
- ioc->write_coroutine = NULL;
- qio_channel_set_aio_fd_handlers(ioc);
- aio_co_wake(co);
+ assert(qemu_get_current_aio_context() ==
+ qemu_coroutine_get_aio_context(co));
+ qemu_coroutine_enter(co);
}
static void qio_channel_set_aio_fd_handlers(QIOChannel *ioc)
--
2.20.1
[Qemu-block] [PATCH v2 06/13] nbd: Move nbd_read_eof() to nbd/client.c, Kevin Wolf, 2019/02/20
[Qemu-block] [PATCH v2 07/13] nbd: Use low-level QIOChannel API in nbd_read_eof(), Kevin Wolf, 2019/02/20
[Qemu-block] [PATCH v2 10/13] block: Fix AioContext switch for drained node, Kevin Wolf, 2019/02/20
[Qemu-block] [PATCH v2 08/13] nbd: Increase bs->in_flight during AioContext switch, Kevin Wolf, 2019/02/20
[Qemu-block] [PATCH v2 11/13] test-bdrv-drain: AioContext switch in drained section, Kevin Wolf, 2019/02/20
[Qemu-block] [PATCH v2 09/13] block: Don't poll in bdrv_set_aio_context(), Kevin Wolf, 2019/02/20