mirror of
https://github.com/mii443/qemu.git
synced 2025-12-16 17:18:49 +00:00
rdma: export yield_until_fd_readable()
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: Juan Quintela <quintela@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Chegu Vinod <chegu_vinod@hp.com> Tested-by: Chegu Vinod <chegu_vinod@hp.com> Tested-by: Michael R. Hines <mrhines@us.ibm.com> Signed-off-by: Michael R. Hines <mrhines@us.ibm.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
committed by
Juan Quintela
parent
2b0ce0797d
commit
9f05d0c3a4
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user