[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/16] migration: Start sending messages
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PULL 11/16] migration: Start sending messages |
Date: |
Wed, 27 Jun 2018 14:55:59 +0200 |
Signed-off-by: Juan Quintela <address@hidden>
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
---
migration/ram.c | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/migration/ram.c b/migration/ram.c
index 050e2f2000..b9c8f65059 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -736,9 +736,6 @@ static int multifd_recv_unfill_packet(MultiFDRecvParams *p,
Error **errp)
RAMBlock *block;
int i;
- /* ToDo: We can't use it until we haven't received a message */
- return 0;
-
be32_to_cpus(&packet->magic);
if (packet->magic != MULTIFD_MAGIC) {
error_setg(errp, "multifd: received packet "
@@ -994,6 +991,7 @@ static void *multifd_send_thread(void *opaque)
{
MultiFDSendParams *p = opaque;
Error *local_err = NULL;
+ int ret;
trace_multifd_send_thread_start(p->id);
@@ -1021,7 +1019,16 @@ static void *multifd_send_thread(void *opaque)
trace_multifd_send(p->id, packet_num, used, flags);
- /* ToDo: send packet here */
+ ret = qio_channel_write_all(p->c, (void *)p->packet,
+ p->packet_len, &local_err);
+ if (ret != 0) {
+ break;
+ }
+
+ ret = qio_channel_writev_all(p->c, p->pages->iov, used,
&local_err);
+ if (ret != 0) {
+ break;
+ }
qemu_mutex_lock(&p->mutex);
p->pending_job--;
@@ -1230,7 +1237,14 @@ static void *multifd_recv_thread(void *opaque)
uint32_t used;
uint32_t flags;
- /* ToDo: recv packet here */
+ ret = qio_channel_read_all_eof(p->c, (void *)p->packet,
+ p->packet_len, &local_err);
+ if (ret == 0) { /* EOF */
+ break;
+ }
+ if (ret == -1) { /* Error */
+ break;
+ }
qemu_mutex_lock(&p->mutex);
ret = multifd_recv_unfill_packet(p, &local_err);
@@ -1247,6 +1261,11 @@ static void *multifd_recv_thread(void *opaque)
p->num_pages += used;
qemu_mutex_unlock(&p->mutex);
+ ret = qio_channel_readv_all(p->c, p->pages->iov, used, &local_err);
+ if (ret != 0) {
+ break;
+ }
+
if (flags & MULTIFD_FLAG_SYNC) {
qemu_sem_post(&multifd_recv_state->sem_sync);
qemu_sem_wait(&p->sem_sync);
--
2.17.1
- [Qemu-devel] [PULL 01/16] migration: Create multipage support, (continued)
- [Qemu-devel] [PULL 01/16] migration: Create multipage support, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 02/16] migration: Create multifd packet, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 04/16] migration: Abstract the number of bytes sent, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 05/16] migration: Add multifd traces for start/end thread, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 03/16] migration: Calculate mbps only during transfer time, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 06/16] migration: Multifd channels always wait on the sem, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 07/16] migration: Add block where to send/receive packets, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 08/16] migration: Synchronize multifd threads with main thread, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 10/16] migration: Create ram_save_multifd_page, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 09/16] migration: Create multifd_bytes ram_counter, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 11/16] migration: Start sending messages,
Juan Quintela <=
- [Qemu-devel] [PULL 12/16] migration: Wait for blocking IO, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 13/16] migration: Remove not needed semaphore and quit, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 14/16] migration: Stop sending whole pages through main channel, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 16/16] migration: fix crash in when incoming client channel setup fails, Juan Quintela, 2018/06/27
- [Qemu-devel] [PULL 15/16] postcopy: drop ram_pages parameter from postcopy_ram_incoming_init(), Juan Quintela, 2018/06/27
- Re: [Qemu-devel] [PULL 00/16] Migration, Peter Maydell, 2018/06/28