[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v10 03/14, resend] rdma: export yield_until_fd_reada
From: |
mrhines |
Subject: |
[Qemu-devel] [PATCH v10 03/14, resend] rdma: export yield_until_fd_readable() |
Date: |
Mon, 24 Jun 2013 09:46:19 -0400 |
From: "Michael R. Hines" <address@hidden>
The RDMA event channel can be made non-blocking just like a TCP
socket. Exporting this function allows us to yield so that the
QEMU monitor remains available.
Reviewed-by: Paolo Bonzini <address@hidden>
Reviewed-by: Chegu Vinod <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Tested-by: Chegu Vinod <address@hidden>
Tested-by: Michael R. Hines <address@hidden>
Signed-off-by: Michael R. Hines <address@hidden>
---
include/block/coroutine.h | 6 ++++++
qemu-coroutine-io.c | 23 +++++++++++++++++++++++
savevm.c | 28 ----------------------------
3 files changed, 29 insertions(+), 28 deletions(-)
diff --git a/include/block/coroutine.h b/include/block/coroutine.h
index a978162..377805a 100644
--- a/include/block/coroutine.h
+++ b/include/block/coroutine.h
@@ -209,4 +209,10 @@ void qemu_co_rwlock_unlock(CoRwlock *lock);
*/
void coroutine_fn co_sleep_ns(QEMUClock *clock, int64_t ns);
+/**
+ * Yield until a file descriptor becomes readable
+ *
+ * Note that this function clobbers the handlers for the file descriptor.
+ */
+void coroutine_fn yield_until_fd_readable(int fd);
#endif /* QEMU_COROUTINE_H */
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();
+}
diff --git a/savevm.c b/savevm.c
index 2983905..2122bf0 100644
--- a/savevm.c
+++ b/savevm.c
@@ -149,34 +149,6 @@ typedef struct QEMUFileSocket
QEMUFile *file;
} QEMUFileSocket;
-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);
-}
-
-/**
- * Yield until a file descriptor becomes readable
- *
- * Note that this function clobbers the handlers for the file descriptor.
- */
-static 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();
-}
-
static ssize_t socket_writev_buffer(void *opaque, struct iovec *iov, int
iovcnt,
int64_t pos)
{
--
1.7.10.4
- [Qemu-devel] [PATCH v10 12/14, resend] rdma: send pc.ram, (continued)
[Qemu-devel] [PATCH v10 11/14, resend] rdma: core logic, mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 10/14, resend] rdma: introduce capability x-rdma-pin-all, mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 03/14, resend] rdma: export yield_until_fd_readable(),
mrhines <=
[Qemu-devel] [PATCH v10 04/14, resend] rdma: export throughput w/ MigrationStats QMP, mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 06/14, resend] rdma: export qemu_fflush(), mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 13/14, resend] rdma: fix mlock() freezes and accounting, mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 09/14, resend] rdma: new QEMUFileOps hooks, mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 05/14, resend] rdma: introduce qemu_file_mode_is_not_valid(), mrhines, 2013/06/24
[Qemu-devel] [PATCH v10 02/14, resend] rdma: introduce qemu_update_position(), mrhines, 2013/06/24