aboutsummaryrefslogtreecommitdiff
path: root/io/channel.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2019-02-20 18:00:07 +0100
committerKevin Wolf <kwolf@redhat.com>2019-02-25 15:03:19 +0100
commit2a239e6e03ee188f69f159bb5d8baf648a54c9c1 (patch)
tree6e7e5a4eb4e691baf42b9767c0835989f95fd49b /io/channel.c
parent6886ceaf61c2399419258246a064485e9b1e51ac (diff)
downloadqemu-2a239e6e03ee188f69f159bb5d8baf648a54c9c1.zip
qemu-2a239e6e03ee188f69f159bb5d8baf648a54c9c1.tar.gz
qemu-2a239e6e03ee188f69f159bb5d8baf648a54c9c1.tar.bz2
io: Remove redundant read/write_coroutine assignments
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, assert the right AioContext. Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'io/channel.c')
-rw-r--r--io/channel.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/io/channel.c b/io/channel.c
index 303376e..2a26c2a 100644
--- a/io/channel.c
+++ b/io/channel.c
@@ -400,15 +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);
+ /* Assert that aio_co_wake() reenters the coroutine directly */
+ assert(qemu_get_current_aio_context() ==
+ qemu_coroutine_get_aio_context(co));
aio_co_wake(co);
}
@@ -417,8 +416,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);
+ /* Assert that aio_co_wake() reenters the coroutine directly */
+ assert(qemu_get_current_aio_context() ==
+ qemu_coroutine_get_aio_context(co));
aio_co_wake(co);
}