[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [RFC PATCH 2/4] aio-win32: Implement aio_set_io_event_notif
From: |
Fam Zheng |
Subject: |
[Qemu-block] [RFC PATCH 2/4] aio-win32: Implement aio_set_io_event_notifier |
Date: |
Wed, 27 May 2015 15:19:04 +0800 |
Signed-off-by: Fam Zheng <address@hidden>
---
aio-win32.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 47 insertions(+), 9 deletions(-)
diff --git a/aio-win32.c b/aio-win32.c
index 233d8f5..52867ab 100644
--- a/aio-win32.c
+++ b/aio-win32.c
@@ -27,15 +27,17 @@ struct AioHandler {
EventNotifierHandler *io_notify;
GPollFD pfd;
int deleted;
+ bool outmost;
void *opaque;
QLIST_ENTRY(AioHandler) node;
};
-void aio_set_fd_handler(AioContext *ctx,
- int fd,
- IOHandler *io_read,
- IOHandler *io_write,
- void *opaque)
+void aio_set_fd_handler_do(AioContext *ctx,
+ int fd,
+ IOHandler *io_read,
+ IOHandler *io_write,
+ void *opaque,
+ bool outmost)
{
/* fd is a SOCKET in our case */
AioHandler *node;
@@ -86,6 +88,7 @@ void aio_set_fd_handler(AioContext *ctx,
node->opaque = opaque;
node->io_read = io_read;
node->io_write = io_write;
+ node->outmost = outmost;
event = event_notifier_get_handle(&ctx->notifier);
WSAEventSelect(node->pfd.fd, event,
@@ -96,9 +99,29 @@ void aio_set_fd_handler(AioContext *ctx,
aio_notify(ctx);
}
-void aio_set_event_notifier(AioContext *ctx,
- EventNotifier *e,
- EventNotifierHandler *io_notify)
+void aio_set_fd_handler(AioContext *ctx,
+ int fd,
+ IOHandler *io_read,
+ IOHandler *io_write,
+ void *opaque)
+{
+ aio_set_fd_handler_do(ctx, fd, io_read, io_write, opaque, false);
+}
+
+void aio_set_iohandler(AioContext *ctx,
+ int fd,
+ IOHandler *io_read,
+ IOHandler *io_write,
+ void *opaque)
+{
+ aio_set_fd_handler_do(ctx, fd, io_read, io_write, opaque, true);
+}
+
+
+static void aio_set_event_notifier_do(AioContext *ctx,
+ EventNotifier *e,
+ EventNotifierHandler *io_notify,
+ bool outmost)
{
AioHandler *node;
@@ -144,6 +167,20 @@ void aio_set_event_notifier(AioContext *ctx,
aio_notify(ctx);
}
+void aio_set_event_notifier(AioContext *ctx,
+ EventNotifier *e,
+ EventNotifierHandler *io_notify)
+{
+ return aio_set_event_notifier_do(ctx, e, io_notify, false);
+}
+
+void aio_set_io_event_notifier(AioContext *ctx,
+ EventNotifier *e,
+ EventNotifierHandler *io_notify)
+{
+ return aio_set_event_notifier_do(ctx, e, io_notify, true);
+}
+
bool aio_prepare(AioContext *ctx)
{
static struct timeval tv0;
@@ -309,7 +346,8 @@ bool aio_poll(AioContext *ctx, bool blocking)
/* fill fd sets */
count = 0;
QLIST_FOREACH(node, &ctx->aio_handlers, node) {
- if (!node->deleted && node->io_notify) {
+ if (!node->deleted && node->io_notify &&
+ !(was_dispatching && node->outmost)) {
events[count++] = event_notifier_get_handle(node->e);
}
}
--
2.4.1
- [Qemu-block] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Fam Zheng, 2015/05/27
- [Qemu-block] [RFC PATCH 1/4] aio-posix: Introduce aio_set_io_event_notifier, Fam Zheng, 2015/05/27
- [Qemu-block] [RFC PATCH 2/4] aio-win32: Implement aio_set_io_event_notifier,
Fam Zheng <=
- [Qemu-block] [RFC PATCH 3/4] virtio-blk: Use aio_set_io_event_notifier in dataplane, Fam Zheng, 2015/05/27
- [Qemu-block] [RFC PATCH 4/4] virtio-scsi-dataplane: User aio_set_io_event_notifier, Fam Zheng, 2015/05/27
- Re: [Qemu-block] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Paolo Bonzini, 2015/05/27
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Fam Zheng, 2015/05/27
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Paolo Bonzini, 2015/05/28
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Fam Zheng, 2015/05/28
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Paolo Bonzini, 2015/05/28
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Fam Zheng, 2015/05/28
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 0/4] aio: Don't poll ioeventfd in nested aio_poll(), Paolo Bonzini, 2015/05/28