diff options
author | Juan Quintela <quintela@redhat.com> | 2018-04-11 12:36:13 +0200 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2018-06-27 13:28:11 +0200 |
commit | 8b2db7f5fd9566ab9cf22b02b623c51b2075a60e (patch) | |
tree | 2713e3aedff69ac29e847f8794ba502a5e4f902f /migration/ram.c | |
parent | b9ee2f7d701457f205a3329ea67b33e0b63a0f43 (diff) | |
download | qemu-8b2db7f5fd9566ab9cf22b02b623c51b2075a60e.zip qemu-8b2db7f5fd9566ab9cf22b02b623c51b2075a60e.tar.gz qemu-8b2db7f5fd9566ab9cf22b02b623c51b2075a60e.tar.bz2 |
migration: Start sending messages
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'migration/ram.c')
-rw-r--r-- | migration/ram.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/migration/ram.c b/migration/ram.c index 050e2f2..b9c8f65 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); |