summaryrefslogtreecommitdiffstats
path: root/qemu-coroutine-io.c
diff options
context:
space:
mode:
authorAnthony Liguori <aliguori@us.ibm.com>2013-06-27 08:48:38 -0500
committerAnthony Liguori <aliguori@us.ibm.com>2013-06-27 08:48:38 -0500
commitc394ace828a559be13ec0bde15b476970f186dad (patch)
treee15ec28f02b7d995171274aa47703244880dd827 /qemu-coroutine-io.c
parent3e5087329489e0beceecf3426f1216619821937f (diff)
parent60d9222c8f50c3e5dd3df9ee84ddd1d1c4b35389 (diff)
downloadhqemu-c394ace828a559be13ec0bde15b476970f186dad.zip
hqemu-c394ace828a559be13ec0bde15b476970f186dad.tar.gz
Merge remote-tracking branch 'quintela/migration.next' into staging
# By Michael R. Hines (9) and others # Via Juan Quintela * quintela/migration.next: rdma: introduce capability x-rdma-pin-all rdma: new QEMUFileOps hooks rdma: introduce qemu_ram_foreach_block() rdma: export qemu_fflush() rdma: introduce qemu_file_mode_is_not_valid() rdma: export throughput w/ MigrationStats QMP rdma: export yield_until_fd_readable() rdma: introduce qemu_update_position() rdma: add documentation migration: do not overwrite zero pages Revert "migration: do not sent zero pages in bulk stage" arch_init/ram_load: add error message for block length mismatch Message-id: 1372329455-5995-1-git-send-email-quintela@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'qemu-coroutine-io.c')
-rw-r--r--qemu-coroutine-io.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/qemu-coroutine-io.c b/qemu-coroutine-io.c
index e8ad1a4..c4df35a 100644
--- a/qemu-coroutine-io.c
+++ b/qemu-coroutine-io.c
@@ -63,3 +63,26 @@ qemu_co_send_recv(int sockfd, void *buf, size_t bytes, bool do_send)
struct iovec iov = { .iov_base = buf, .iov_len = bytes };
return qemu_co_sendv_recvv(sockfd, &iov, 1, 0, bytes, do_send);
}
+
+typedef struct {
+ Coroutine *co;
+ int fd;
+} FDYieldUntilData;
+
+static void fd_coroutine_enter(void *opaque)
+{
+ FDYieldUntilData *data = opaque;
+ qemu_set_fd_handler(data->fd, NULL, NULL, NULL);
+ qemu_coroutine_enter(data->co, NULL);
+}
+
+void coroutine_fn yield_until_fd_readable(int fd)
+{
+ FDYieldUntilData data;
+
+ assert(qemu_in_coroutine());
+ data.co = qemu_coroutine_self();
+ data.fd = fd;
+ qemu_set_fd_handler(fd, fd_coroutine_enter, NULL, &data);
+ qemu_coroutine_yield();
+}
OpenPOWER on IntegriCloud