summaryrefslogtreecommitdiffstats
path: root/include/io
diff options
context:
space:
mode:
authorPaolo Bonzini2017-02-13 14:52:22 +0100
committerStefan Hajnoczi2017-02-21 12:14:07 +0100
commitbf88c1247f80ac6d62710d5d0d0d9ce3a53e99ec (patch)
tree2b2e9e2f7f0f525cb22fc8aaea204ff6307a65d1 /include/io
parenttest-thread-pool: use generic AioContext infrastructure (diff)
downloadqemu-bf88c1247f80ac6d62710d5d0d0d9ce3a53e99ec.tar.gz
qemu-bf88c1247f80ac6d62710d5d0d0d9ce3a53e99ec.tar.xz
qemu-bf88c1247f80ac6d62710d5d0d0d9ce3a53e99ec.zip
io: add methods to set I/O handlers on AioContext
This is in preparation for making qio_channel_yield work on AioContexts other than the main one. Reviewed-by: Daniel P. Berrange <berrange@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-id: 20170213135235.12274-6-pbonzini@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'include/io')
-rw-r--r--include/io/channel.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/io/channel.h b/include/io/channel.h
index 32a9470794..0bc7c3f47f 100644
--- a/include/io/channel.h
+++ b/include/io/channel.h
@@ -23,6 +23,7 @@
#include "qemu-common.h"
#include "qom/object.h"
+#include "block/aio.h"
#define TYPE_QIO_CHANNEL "qio-channel"
#define QIO_CHANNEL(obj) \
@@ -132,6 +133,11 @@ struct QIOChannelClass {
off_t offset,
int whence,
Error **errp);
+ void (*io_set_aio_fd_handler)(QIOChannel *ioc,
+ AioContext *ctx,
+ IOHandler *io_read,
+ IOHandler *io_write,
+ void *opaque);
};
/* General I/O handling functions */
@@ -525,4 +531,23 @@ void qio_channel_yield(QIOChannel *ioc,
void qio_channel_wait(QIOChannel *ioc,
GIOCondition condition);
+/**
+ * qio_channel_set_aio_fd_handler:
+ * @ioc: the channel object
+ * @ctx: the AioContext to set the handlers on
+ * @io_read: the read handler
+ * @io_write: the write handler
+ * @opaque: the opaque value passed to the handler
+ *
+ * This is used internally by qio_channel_yield(). It can
+ * be used by channel implementations to forward the handlers
+ * to another channel (e.g. from #QIOChannelTLS to the
+ * underlying socket).
+ */
+void qio_channel_set_aio_fd_handler(QIOChannel *ioc,
+ AioContext *ctx,
+ IOHandler *io_read,
+ IOHandler *io_write,
+ void *opaque);
+
#endif /* QIO_CHANNEL_H */