mirror of https://github.com/xemu-project/xemu.git
main-loop: use GSource to poll AIO file descriptors
This lets us remove the hooks for the main loop in async.c. Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
7ed2b24ce1
commit
82cbbdc6a0
23
main-loop.c
23
main-loop.c
|
@ -205,6 +205,7 @@ static AioContext *qemu_aio_context;
|
|||
int qemu_init_main_loop(void)
|
||||
{
|
||||
int ret;
|
||||
GSource *src;
|
||||
|
||||
init_clocks();
|
||||
init_timer_alarm();
|
||||
|
@ -222,6 +223,9 @@ int qemu_init_main_loop(void)
|
|||
}
|
||||
|
||||
qemu_aio_context = aio_context_new();
|
||||
src = aio_get_g_source(qemu_aio_context);
|
||||
g_source_attach(src, NULL);
|
||||
g_source_unref(src);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -484,8 +488,6 @@ int main_loop_wait(int nonblocking)
|
|||
|
||||
if (nonblocking) {
|
||||
timeout = 0;
|
||||
} else {
|
||||
aio_bh_update_timeout(qemu_aio_context, &timeout);
|
||||
}
|
||||
|
||||
/* poll any events */
|
||||
|
@ -508,10 +510,6 @@ int main_loop_wait(int nonblocking)
|
|||
|
||||
qemu_run_all_timers();
|
||||
|
||||
/* Check bottom-halves last in case any of the earlier events triggered
|
||||
them. */
|
||||
qemu_bh_poll();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -522,11 +520,6 @@ QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque)
|
|||
return aio_bh_new(qemu_aio_context, cb, opaque);
|
||||
}
|
||||
|
||||
int qemu_bh_poll(void)
|
||||
{
|
||||
return aio_bh_poll(qemu_aio_context);
|
||||
}
|
||||
|
||||
void qemu_aio_flush(void)
|
||||
{
|
||||
aio_flush(qemu_aio_context);
|
||||
|
@ -546,16 +539,12 @@ void qemu_aio_set_fd_handler(int fd,
|
|||
{
|
||||
aio_set_fd_handler(qemu_aio_context, fd, io_read, io_write, io_flush,
|
||||
opaque);
|
||||
|
||||
qemu_set_fd_handler2(fd, NULL, io_read, io_write, opaque);
|
||||
}
|
||||
#endif
|
||||
|
||||
void qemu_aio_set_event_notifier(EventNotifier *notifier,
|
||||
EventNotifierHandler *io_read,
|
||||
AioFlushEventNotifierHandler *io_flush)
|
||||
{
|
||||
qemu_aio_set_fd_handler(event_notifier_get_fd(notifier),
|
||||
(IOHandler *)io_read, NULL,
|
||||
(AioFlushHandler *)io_flush, notifier);
|
||||
aio_set_event_notifier(qemu_aio_context, notifier, io_read, io_flush);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -302,6 +302,5 @@ void qemu_iohandler_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds, int rc
|
|||
|
||||
QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque);
|
||||
void qemu_bh_schedule_idle(QEMUBH *bh);
|
||||
int qemu_bh_poll(void);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue