migration: Start sending messages
Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
b9ee2f7d70
commit
8b2db7f5fd
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue