[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 0/6] migration/multifd: Fix channel creation vs. cleanup races
From: |
Fabiano Rosas |
Subject: |
[PATCH v2 0/6] migration/multifd: Fix channel creation vs. cleanup races |
Date: |
Mon, 5 Feb 2024 16:49:23 -0300 |
Based-on: 20240202102857.110210-1-peterx@redhat.com
[PATCH v2 00/23] migration/multifd: Refactor ->send_prepare() and cleanups
20240202102857.110210-1-peterx@redhat.com">https://lore.kernel.org/r/20240202102857.110210-1-peterx@redhat.com
Hi,
In this v2 I made sure NO channel is created after the semaphores are
posted. Feel free to call me out if that's not the case.
Not much changes, except that now both TLS and non-TLS go through the
same code, so there's a centralized place to do error handling and
releasing the semaphore.
CI run: https://gitlab.com/farosas/qemu/-/pipelines/1165206107
based on Peter's code: https://gitlab.com/farosas/qemu/-/pipelines/1165303276
v1:
20240202191128.1901-1-farosas@suse.de">https://lore.kernel.org/r/20240202191128.1901-1-farosas@suse.de
This contains 2 patches from my previous series addressing the
p->running misuse and the TLS thread leak and 3 new patches to fix the
cleanup-while-creating-threads race.
For the p->running I'm keeping the idea from the other series to
remove p->running and use a more narrow p->thread_created flag. This
flag is used only inform whether the thread has been created so we can
join it.
For the cleanup race I have moved some code around and added a
semaphore to make multifd_save_setup() only return once all channel
creation tasks have started.
The idea is that after multifd_save_setup() returns, no new creations
are in flight and the p->thread_created flags will never change again,
so they're enough to cause the cleanup code to wait for the threads to
join.
CI run: https://gitlab.com/farosas/qemu/-/pipelines/1162798843
@Peter: I can rebase this on top of your series once we decide about
it.
Fabiano Rosas (6):
migration/multifd: Join the TLS thread
migration/multifd: Remove p->running
migration/multifd: Move multifd_send_setup error handling in to the
function
migration/multifd: Move multifd_send_setup into migration thread
migration/multifd: Unify multifd and TLS connection paths
migration/multifd: Add a synchronization point for channel creation
migration/migration.c | 14 ++--
migration/multifd.c | 157 +++++++++++++++++++++++-------------------
migration/multifd.h | 11 ++-
3 files changed, 98 insertions(+), 84 deletions(-)
--
2.35.3