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 --- |