multifd.c (81072abf1575b11226b3779af76dc71dfa85ee5d) multifd.c (51b07548f7c31793adc178c7460c5f4369733c61)
1/*
2 * Multifd common code
3 *
4 * Copyright (c) 2019-2020 Red Hat Inc
5 *
6 * Authors:
7 * Juan Quintela <quintela@redhat.com>
8 *

--- 502 unchanged lines hidden (view full) ---

511 qemu_mutex_unlock(&p->mutex);
512 }
513}
514
515void multifd_save_cleanup(void)
516{
517 int i;
518
1/*
2 * Multifd common code
3 *
4 * Copyright (c) 2019-2020 Red Hat Inc
5 *
6 * Authors:
7 * Juan Quintela <quintela@redhat.com>
8 *

--- 502 unchanged lines hidden (view full) ---

511 qemu_mutex_unlock(&p->mutex);
512 }
513}
514
515void multifd_save_cleanup(void)
516{
517 int i;
518
519 if (!migrate_use_multifd()) {
519 if (!migrate_multifd()) {
520 return;
521 }
522 multifd_send_terminate_threads(NULL);
523 for (i = 0; i < migrate_multifd_channels(); i++) {
524 MultiFDSendParams *p = &multifd_send_state->params[i];
525
526 if (p->running) {
527 qemu_thread_join(&p->thread);

--- 54 unchanged lines hidden (view full) ---

582 return ret;
583}
584
585int multifd_send_sync_main(QEMUFile *f)
586{
587 int i;
588 bool flush_zero_copy;
589
520 return;
521 }
522 multifd_send_terminate_threads(NULL);
523 for (i = 0; i < migrate_multifd_channels(); i++) {
524 MultiFDSendParams *p = &multifd_send_state->params[i];
525
526 if (p->running) {
527 qemu_thread_join(&p->thread);

--- 54 unchanged lines hidden (view full) ---

582 return ret;
583}
584
585int multifd_send_sync_main(QEMUFile *f)
586{
587 int i;
588 bool flush_zero_copy;
589
590 if (!migrate_use_multifd()) {
590 if (!migrate_multifd()) {
591 return 0;
592 }
593 if (multifd_send_state->pages->num) {
594 if (multifd_send_pages(f) < 0) {
595 error_report("%s: multifd_send_pages fail", __func__);
596 return -1;
597 }
598 }

--- 307 unchanged lines hidden (view full) ---

906}
907
908int multifd_save_setup(Error **errp)
909{
910 int thread_count;
911 uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size();
912 uint8_t i;
913
591 return 0;
592 }
593 if (multifd_send_state->pages->num) {
594 if (multifd_send_pages(f) < 0) {
595 error_report("%s: multifd_send_pages fail", __func__);
596 return -1;
597 }
598 }

--- 307 unchanged lines hidden (view full) ---

906}
907
908int multifd_save_setup(Error **errp)
909{
910 int thread_count;
911 uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size();
912 uint8_t i;
913
914 if (!migrate_use_multifd()) {
914 if (!migrate_multifd()) {
915 return 0;
916 }
917
918 thread_count = migrate_multifd_channels();
919 multifd_send_state = g_malloc0(sizeof(*multifd_send_state));
920 multifd_send_state->params = g_new0(MultiFDSendParams, thread_count);
921 multifd_send_state->pages = multifd_pages_init(page_count);
922 qemu_sem_init(&multifd_send_state->channels_ready, 0);

--- 88 unchanged lines hidden (view full) ---

1011 qio_channel_shutdown(p->c, QIO_CHANNEL_SHUTDOWN_BOTH, NULL);
1012 }
1013 qemu_mutex_unlock(&p->mutex);
1014 }
1015}
1016
1017void multifd_load_shutdown(void)
1018{
915 return 0;
916 }
917
918 thread_count = migrate_multifd_channels();
919 multifd_send_state = g_malloc0(sizeof(*multifd_send_state));
920 multifd_send_state->params = g_new0(MultiFDSendParams, thread_count);
921 multifd_send_state->pages = multifd_pages_init(page_count);
922 qemu_sem_init(&multifd_send_state->channels_ready, 0);

--- 88 unchanged lines hidden (view full) ---

1011 qio_channel_shutdown(p->c, QIO_CHANNEL_SHUTDOWN_BOTH, NULL);
1012 }
1013 qemu_mutex_unlock(&p->mutex);
1014 }
1015}
1016
1017void multifd_load_shutdown(void)
1018{
1019 if (migrate_use_multifd()) {
1019 if (migrate_multifd()) {
1020 multifd_recv_terminate_threads(NULL);
1021 }
1022}
1023
1024void multifd_load_cleanup(void)
1025{
1026 int i;
1027
1020 multifd_recv_terminate_threads(NULL);
1021 }
1022}
1023
1024void multifd_load_cleanup(void)
1025{
1026 int i;
1027
1028 if (!migrate_use_multifd()) {
1028 if (!migrate_multifd()) {
1029 return;
1030 }
1031 multifd_recv_terminate_threads(NULL);
1032 for (i = 0; i < migrate_multifd_channels(); i++) {
1033 MultiFDRecvParams *p = &multifd_recv_state->params[i];
1034
1035 if (p->running) {
1036 /*

--- 30 unchanged lines hidden (view full) ---

1067 g_free(multifd_recv_state);
1068 multifd_recv_state = NULL;
1069}
1070
1071void multifd_recv_sync_main(void)
1072{
1073 int i;
1074
1029 return;
1030 }
1031 multifd_recv_terminate_threads(NULL);
1032 for (i = 0; i < migrate_multifd_channels(); i++) {
1033 MultiFDRecvParams *p = &multifd_recv_state->params[i];
1034
1035 if (p->running) {
1036 /*

--- 30 unchanged lines hidden (view full) ---

1067 g_free(multifd_recv_state);
1068 multifd_recv_state = NULL;
1069}
1070
1071void multifd_recv_sync_main(void)
1072{
1073 int i;
1074
1075 if (!migrate_use_multifd()) {
1075 if (!migrate_multifd()) {
1076 return;
1077 }
1078 for (i = 0; i < migrate_multifd_channels(); i++) {
1079 MultiFDRecvParams *p = &multifd_recv_state->params[i];
1080
1081 trace_multifd_recv_sync_main_wait(p->id);
1082 qemu_sem_wait(&multifd_recv_state->sem_sync);
1083 }

--- 81 unchanged lines hidden (view full) ---

1165 int thread_count;
1166 uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size();
1167 uint8_t i;
1168
1169 /*
1170 * Return successfully if multiFD recv state is already initialised
1171 * or multiFD is not enabled.
1172 */
1076 return;
1077 }
1078 for (i = 0; i < migrate_multifd_channels(); i++) {
1079 MultiFDRecvParams *p = &multifd_recv_state->params[i];
1080
1081 trace_multifd_recv_sync_main_wait(p->id);
1082 qemu_sem_wait(&multifd_recv_state->sem_sync);
1083 }

--- 81 unchanged lines hidden (view full) ---

1165 int thread_count;
1166 uint32_t page_count = MULTIFD_PACKET_SIZE / qemu_target_page_size();
1167 uint8_t i;
1168
1169 /*
1170 * Return successfully if multiFD recv state is already initialised
1171 * or multiFD is not enabled.
1172 */
1173 if (multifd_recv_state || !migrate_use_multifd()) {
1173 if (multifd_recv_state || !migrate_multifd()) {
1174 return 0;
1175 }
1176
1177 thread_count = migrate_multifd_channels();
1178 multifd_recv_state = g_malloc0(sizeof(*multifd_recv_state));
1179 multifd_recv_state->params = g_new0(MultiFDRecvParams, thread_count);
1180 qatomic_set(&multifd_recv_state->count, 0);
1181 qemu_sem_init(&multifd_recv_state->sem_sync, 0);

--- 29 unchanged lines hidden (view full) ---

1211 }
1212 return 0;
1213}
1214
1215bool multifd_recv_all_channels_created(void)
1216{
1217 int thread_count = migrate_multifd_channels();
1218
1174 return 0;
1175 }
1176
1177 thread_count = migrate_multifd_channels();
1178 multifd_recv_state = g_malloc0(sizeof(*multifd_recv_state));
1179 multifd_recv_state->params = g_new0(MultiFDRecvParams, thread_count);
1180 qatomic_set(&multifd_recv_state->count, 0);
1181 qemu_sem_init(&multifd_recv_state->sem_sync, 0);

--- 29 unchanged lines hidden (view full) ---

1211 }
1212 return 0;
1213}
1214
1215bool multifd_recv_all_channels_created(void)
1216{
1217 int thread_count = migrate_multifd_channels();
1218
1219 if (!migrate_use_multifd()) {
1219 if (!migrate_multifd()) {
1220 return true;
1221 }
1222
1223 if (!multifd_recv_state) {
1224 /* Called before any connections created */
1225 return false;
1226 }
1227

--- 42 unchanged lines hidden ---
1220 return true;
1221 }
1222
1223 if (!multifd_recv_state) {
1224 /* Called before any connections created */
1225 return false;
1226 }
1227

--- 42 unchanged lines hidden ---