migration/multifd: Cleanup multifd_recv_sync_main
Some minor cleanups and documentation for multifd_recv_sync_main. Use thread_count as done in other parts of the code. Remove p->id from the multifd_recv_state sync, since that is global and not tied to a channel. Add documentation for the sync steps. Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Fabiano Rosas <farosas@suse.de> Link: https://lore.kernel.org/r/20240229153017.2221-2-farosas@suse.de Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
2b57143231
commit
4aac6b1e9b
@ -1182,18 +1182,27 @@ void multifd_recv_cleanup(void)
|
|||||||
|
|
||||||
void multifd_recv_sync_main(void)
|
void multifd_recv_sync_main(void)
|
||||||
{
|
{
|
||||||
|
int thread_count = migrate_multifd_channels();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!migrate_multifd()) {
|
if (!migrate_multifd()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (i = 0; i < migrate_multifd_channels(); i++) {
|
|
||||||
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
|
||||||
|
|
||||||
trace_multifd_recv_sync_main_wait(p->id);
|
/*
|
||||||
|
* Initiate the synchronization by waiting for all channels.
|
||||||
|
* For socket-based migration this means each channel has received
|
||||||
|
* the SYNC packet on the stream.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < thread_count; i++) {
|
||||||
|
trace_multifd_recv_sync_main_wait(i);
|
||||||
qemu_sem_wait(&multifd_recv_state->sem_sync);
|
qemu_sem_wait(&multifd_recv_state->sem_sync);
|
||||||
}
|
}
|
||||||
for (i = 0; i < migrate_multifd_channels(); i++) {
|
|
||||||
|
/*
|
||||||
|
* Sync done. Release the channels for the next iteration.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < thread_count; i++) {
|
||||||
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
MultiFDRecvParams *p = &multifd_recv_state->params[i];
|
||||||
|
|
||||||
WITH_QEMU_LOCK_GUARD(&p->mutex) {
|
WITH_QEMU_LOCK_GUARD(&p->mutex) {
|
||||||
|
@ -132,7 +132,7 @@ multifd_recv(uint8_t id, uint64_t packet_num, uint32_t used, uint32_t flags, uin
|
|||||||
multifd_recv_new_channel(uint8_t id) "channel %u"
|
multifd_recv_new_channel(uint8_t id) "channel %u"
|
||||||
multifd_recv_sync_main(long packet_num) "packet num %ld"
|
multifd_recv_sync_main(long packet_num) "packet num %ld"
|
||||||
multifd_recv_sync_main_signal(uint8_t id) "channel %u"
|
multifd_recv_sync_main_signal(uint8_t id) "channel %u"
|
||||||
multifd_recv_sync_main_wait(uint8_t id) "channel %u"
|
multifd_recv_sync_main_wait(uint8_t id) "iter %u"
|
||||||
multifd_recv_terminate_threads(bool error) "error %d"
|
multifd_recv_terminate_threads(bool error) "error %d"
|
||||||
multifd_recv_thread_end(uint8_t id, uint64_t packets, uint64_t pages) "channel %u packets %" PRIu64 " pages %" PRIu64
|
multifd_recv_thread_end(uint8_t id, uint64_t packets, uint64_t pages) "channel %u packets %" PRIu64 " pages %" PRIu64
|
||||||
multifd_recv_thread_start(uint8_t id) "%u"
|
multifd_recv_thread_start(uint8_t id) "%u"
|
||||||
|
Loading…
Reference in New Issue
Block a user