aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Xu <peterx@redhat.com>2024-02-02 18:28:48 +0800
committerPeter Xu <peterx@redhat.com>2024-02-05 14:42:10 +0800
commit859ebaf346e8b5dece6cf255c604fe953d8ec9ab (patch)
tree0eee8cfe6c50c1b013f62a6483f8f9f9e5b6cb07
parent25a1f8787597f6906b151b2f73ae6cc92a31de57 (diff)
downloadqemu-859ebaf346e8b5dece6cf255c604fe953d8ec9ab.zip
qemu-859ebaf346e8b5dece6cf255c604fe953d8ec9ab.tar.gz
qemu-859ebaf346e8b5dece6cf255c604fe953d8ec9ab.tar.bz2
migration/multifd: Forbid spurious wakeups
Now multifd's logic is designed to have no spurious wakeup. I still remember a talk to Juan and he seems to agree we should drop it now, and if my memory was right it was there because multifd used to hit that when still debugging. Let's drop it and see what can explode; as long as it's not reaching soft-freeze. Reviewed-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20240202102857.110210-15-peterx@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com>
-rw-r--r--migration/multifd.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/migration/multifd.c b/migration/multifd.c
index 6aa4434..28b5410 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -756,7 +756,9 @@ static void *multifd_send_thread(void *opaque)
p->next_packet_size = 0;
qatomic_set(&p->pending_job, false);
qemu_mutex_unlock(&p->mutex);
- } else if (qatomic_read(&p->pending_sync)) {
+ } else {
+ /* If not a normal job, must be a sync request */
+ assert(qatomic_read(&p->pending_sync));
p->flags = MULTIFD_FLAG_SYNC;
multifd_send_fill_packet(p);
ret = qio_channel_write_all(p->c, (void *)p->packet,
@@ -771,9 +773,6 @@ static void *multifd_send_thread(void *opaque)
qatomic_set(&p->pending_sync, false);
qemu_mutex_unlock(&p->mutex);
qemu_sem_post(&p->sem_sync);
- } else {
- qemu_mutex_unlock(&p->mutex);
- /* sometimes there are spurious wakeups */
}
}