diff options
author | Juan Quintela <quintela@redhat.com> | 2023-04-26 12:20:36 +0200 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2023-04-27 16:37:28 +0200 |
commit | d2026ee117147893f8d80f060cede6d872ecbd7f (patch) | |
tree | 53a1ebe4a1da0702344957e6de88255c0d1e783d /migration/multifd.c | |
parent | 1eb95e1baef852d0971a1dd62a3293cd68f1ec35 (diff) | |
download | qemu-d2026ee117147893f8d80f060cede6d872ecbd7f.zip qemu-d2026ee117147893f8d80f060cede6d872ecbd7f.tar.gz qemu-d2026ee117147893f8d80f060cede6d872ecbd7f.tar.bz2 |
multifd: Fix the number of channels ready
We don't wait in the sem when we are doing a sync_main. Make it wait
there. To make things clearer, we mark the channel ready at the
begining of the thread loop.
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Diffstat (limited to 'migration/multifd.c')
-rw-r--r-- | migration/multifd.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/migration/multifd.c b/migration/multifd.c index cce3ad6..6a59c03 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -635,6 +635,7 @@ int multifd_send_sync_main(QEMUFile *f) for (i = 0; i < migrate_multifd_channels(); i++) { MultiFDSendParams *p = &multifd_send_state->params[i]; + qemu_sem_wait(&multifd_send_state->channels_ready); trace_multifd_send_sync_main_wait(p->id); qemu_sem_wait(&p->sem_sync); @@ -668,6 +669,7 @@ static void *multifd_send_thread(void *opaque) p->num_packets = 1; while (true) { + qemu_sem_post(&multifd_send_state->channels_ready); qemu_sem_wait(&p->sem); if (qatomic_read(&multifd_send_state->exiting)) { @@ -736,7 +738,6 @@ static void *multifd_send_thread(void *opaque) if (flags & MULTIFD_FLAG_SYNC) { qemu_sem_post(&p->sem_sync); } - qemu_sem_post(&multifd_send_state->channels_ready); } else if (p->quit) { qemu_mutex_unlock(&p->mutex); break; |