xref: /openbmc/qemu/migration/migration.c (revision 07d1d063d3235c02f60dc92ec174d419e6f8a750)
1 /*
2  * QEMU live migration
3  *
4  * Copyright IBM, Corp. 2008
5  *
6  * Authors:
7  *  Anthony Liguori   <aliguori@us.ibm.com>
8  *
9  * This work is licensed under the terms of the GNU GPL, version 2.  See
10  * the COPYING file in the top-level directory.
11  *
12  * Contributions after 2012-01-13 are licensed under the terms of the
13  * GNU GPL, version 2 or (at your option) any later version.
14  */
15 
16 #include "qemu/osdep.h"
17 #include "qemu/cutils.h"
18 #include "qemu/error-report.h"
19 #include "migration/blocker.h"
20 #include "exec.h"
21 #include "fd.h"
22 #include "socket.h"
23 #include "rdma.h"
24 #include "ram.h"
25 #include "migration/global_state.h"
26 #include "migration/misc.h"
27 #include "migration.h"
28 #include "savevm.h"
29 #include "qemu-file-channel.h"
30 #include "qemu-file.h"
31 #include "migration/vmstate.h"
32 #include "block/block.h"
33 #include "qapi/qmp/qerror.h"
34 #include "qapi/util.h"
35 #include "qemu/rcu.h"
36 #include "block.h"
37 #include "postcopy-ram.h"
38 #include "qemu/thread.h"
39 #include "qmp-commands.h"
40 #include "trace.h"
41 #include "qapi-event.h"
42 #include "exec/target_page.h"
43 #include "io/channel-buffer.h"
44 #include "migration/colo.h"
45 #include "hw/boards.h"
46 #include "monitor/monitor.h"
47 
48 #define MAX_THROTTLE  (32 << 20)      /* Migration transfer speed throttling */
49 
50 /* Amount of time to allocate to each "chunk" of bandwidth-throttled
51  * data. */
52 #define BUFFER_DELAY     100
53 #define XFER_LIMIT_RATIO (1000 / BUFFER_DELAY)
54 
55 /* Time in milliseconds we are allowed to stop the source,
56  * for sending the last part */
57 #define DEFAULT_MIGRATE_SET_DOWNTIME 300
58 
59 /* Maximum migrate downtime set to 2000 seconds */
60 #define MAX_MIGRATE_DOWNTIME_SECONDS 2000
61 #define MAX_MIGRATE_DOWNTIME (MAX_MIGRATE_DOWNTIME_SECONDS * 1000)
62 
63 /* Default compression thread count */
64 #define DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT 8
65 /* Default decompression thread count, usually decompression is at
66  * least 4 times as fast as compression.*/
67 #define DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT 2
68 /*0: means nocompress, 1: best speed, ... 9: best compress ratio */
69 #define DEFAULT_MIGRATE_COMPRESS_LEVEL 1
70 /* Define default autoconverge cpu throttle migration parameters */
71 #define DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL 20
72 #define DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT 10
73 
74 /* Migration XBZRLE default cache size */
75 #define DEFAULT_MIGRATE_CACHE_SIZE (64 * 1024 * 1024)
76 
77 /* The delay time (in ms) between two COLO checkpoints
78  * Note: Please change this default value to 10000 when we support hybrid mode.
79  */
80 #define DEFAULT_MIGRATE_X_CHECKPOINT_DELAY 200
81 
82 static NotifierList migration_state_notifiers =
83     NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
84 
85 static bool deferred_incoming;
86 
87 /* Messages sent on the return path from destination to source */
88 enum mig_rp_message_type {
89     MIG_RP_MSG_INVALID = 0,  /* Must be 0 */
90     MIG_RP_MSG_SHUT,         /* sibling will not send any more RP messages */
91     MIG_RP_MSG_PONG,         /* Response to a PING; data (seq: be32 ) */
92 
93     MIG_RP_MSG_REQ_PAGES_ID, /* data (start: be64, len: be32, id: string) */
94     MIG_RP_MSG_REQ_PAGES,    /* data (start: be64, len: be32) */
95 
96     MIG_RP_MSG_MAX
97 };
98 
99 /* When we add fault tolerance, we could have several
100    migrations at once.  For now we don't need to add
101    dynamic creation of migration */
102 
103 static MigrationState *current_migration;
104 
105 void migration_object_init(void)
106 {
107     MachineState *ms = MACHINE(qdev_get_machine());
108 
109     /* This can only be called once. */
110     assert(!current_migration);
111     current_migration = MIGRATION_OBJ(object_new(TYPE_MIGRATION));
112 
113     /*
114      * We cannot really do this in migration_instance_init() since at
115      * that time global properties are not yet applied, then this
116      * value will be definitely replaced by something else.
117      */
118     if (ms->enforce_config_section) {
119         current_migration->send_configuration = true;
120     }
121 }
122 
123 /* For outgoing */
124 MigrationState *migrate_get_current(void)
125 {
126     /* This can only be called after the object created. */
127     assert(current_migration);
128     return current_migration;
129 }
130 
131 MigrationIncomingState *migration_incoming_get_current(void)
132 {
133     static bool once;
134     static MigrationIncomingState mis_current;
135 
136     if (!once) {
137         mis_current.state = MIGRATION_STATUS_NONE;
138         memset(&mis_current, 0, sizeof(MigrationIncomingState));
139         qemu_mutex_init(&mis_current.rp_mutex);
140         qemu_event_init(&mis_current.main_thread_load_event, false);
141         once = true;
142     }
143     return &mis_current;
144 }
145 
146 void migration_incoming_state_destroy(void)
147 {
148     struct MigrationIncomingState *mis = migration_incoming_get_current();
149 
150     if (mis->to_src_file) {
151         /* Tell source that we are done */
152         migrate_send_rp_shut(mis, qemu_file_get_error(mis->from_src_file) != 0);
153         qemu_fclose(mis->to_src_file);
154         mis->to_src_file = NULL;
155     }
156 
157     if (mis->from_src_file) {
158         qemu_fclose(mis->from_src_file);
159         mis->from_src_file = NULL;
160     }
161 
162     qemu_event_destroy(&mis->main_thread_load_event);
163 }
164 
165 static void migrate_generate_event(int new_state)
166 {
167     if (migrate_use_events()) {
168         qapi_event_send_migration(new_state, &error_abort);
169     }
170 }
171 
172 /*
173  * Called on -incoming with a defer: uri.
174  * The migration can be started later after any parameters have been
175  * changed.
176  */
177 static void deferred_incoming_migration(Error **errp)
178 {
179     if (deferred_incoming) {
180         error_setg(errp, "Incoming migration already deferred");
181     }
182     deferred_incoming = true;
183 }
184 
185 /*
186  * Send a message on the return channel back to the source
187  * of the migration.
188  */
189 static void migrate_send_rp_message(MigrationIncomingState *mis,
190                                     enum mig_rp_message_type message_type,
191                                     uint16_t len, void *data)
192 {
193     trace_migrate_send_rp_message((int)message_type, len);
194     qemu_mutex_lock(&mis->rp_mutex);
195     qemu_put_be16(mis->to_src_file, (unsigned int)message_type);
196     qemu_put_be16(mis->to_src_file, len);
197     qemu_put_buffer(mis->to_src_file, data, len);
198     qemu_fflush(mis->to_src_file);
199     qemu_mutex_unlock(&mis->rp_mutex);
200 }
201 
202 /* Request a range of pages from the source VM at the given
203  * start address.
204  *   rbname: Name of the RAMBlock to request the page in, if NULL it's the same
205  *           as the last request (a name must have been given previously)
206  *   Start: Address offset within the RB
207  *   Len: Length in bytes required - must be a multiple of pagesize
208  */
209 void migrate_send_rp_req_pages(MigrationIncomingState *mis, const char *rbname,
210                                ram_addr_t start, size_t len)
211 {
212     uint8_t bufc[12 + 1 + 255]; /* start (8), len (4), rbname up to 256 */
213     size_t msglen = 12; /* start + len */
214 
215     *(uint64_t *)bufc = cpu_to_be64((uint64_t)start);
216     *(uint32_t *)(bufc + 8) = cpu_to_be32((uint32_t)len);
217 
218     if (rbname) {
219         int rbname_len = strlen(rbname);
220         assert(rbname_len < 256);
221 
222         bufc[msglen++] = rbname_len;
223         memcpy(bufc + msglen, rbname, rbname_len);
224         msglen += rbname_len;
225         migrate_send_rp_message(mis, MIG_RP_MSG_REQ_PAGES_ID, msglen, bufc);
226     } else {
227         migrate_send_rp_message(mis, MIG_RP_MSG_REQ_PAGES, msglen, bufc);
228     }
229 }
230 
231 void qemu_start_incoming_migration(const char *uri, Error **errp)
232 {
233     const char *p;
234 
235     qapi_event_send_migration(MIGRATION_STATUS_SETUP, &error_abort);
236     if (!strcmp(uri, "defer")) {
237         deferred_incoming_migration(errp);
238     } else if (strstart(uri, "tcp:", &p)) {
239         tcp_start_incoming_migration(p, errp);
240 #ifdef CONFIG_RDMA
241     } else if (strstart(uri, "rdma:", &p)) {
242         rdma_start_incoming_migration(p, errp);
243 #endif
244     } else if (strstart(uri, "exec:", &p)) {
245         exec_start_incoming_migration(p, errp);
246     } else if (strstart(uri, "unix:", &p)) {
247         unix_start_incoming_migration(p, errp);
248     } else if (strstart(uri, "fd:", &p)) {
249         fd_start_incoming_migration(p, errp);
250     } else {
251         error_setg(errp, "unknown migration protocol: %s", uri);
252     }
253 }
254 
255 static void process_incoming_migration_bh(void *opaque)
256 {
257     Error *local_err = NULL;
258     MigrationIncomingState *mis = opaque;
259 
260     /* Make sure all file formats flush their mutable metadata.
261      * If we get an error here, just don't restart the VM yet. */
262     bdrv_invalidate_cache_all(&local_err);
263     if (local_err) {
264         error_report_err(local_err);
265         local_err = NULL;
266         autostart = false;
267     }
268 
269     /*
270      * This must happen after all error conditions are dealt with and
271      * we're sure the VM is going to be running on this host.
272      */
273     qemu_announce_self();
274 
275     /* If global state section was not received or we are in running
276        state, we need to obey autostart. Any other state is set with
277        runstate_set. */
278 
279     if (!global_state_received() ||
280         global_state_get_runstate() == RUN_STATE_RUNNING) {
281         if (autostart) {
282             vm_start();
283         } else {
284             runstate_set(RUN_STATE_PAUSED);
285         }
286     } else {
287         runstate_set(global_state_get_runstate());
288     }
289     /*
290      * This must happen after any state changes since as soon as an external
291      * observer sees this event they might start to prod at the VM assuming
292      * it's ready to use.
293      */
294     migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
295                       MIGRATION_STATUS_COMPLETED);
296     qemu_bh_delete(mis->bh);
297     migration_incoming_state_destroy();
298 }
299 
300 static void process_incoming_migration_co(void *opaque)
301 {
302     QEMUFile *f = opaque;
303     MigrationIncomingState *mis = migration_incoming_get_current();
304     PostcopyState ps;
305     int ret;
306 
307     mis->from_src_file = f;
308     mis->largest_page_size = qemu_ram_pagesize_largest();
309     postcopy_state_set(POSTCOPY_INCOMING_NONE);
310     migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
311                       MIGRATION_STATUS_ACTIVE);
312     ret = qemu_loadvm_state(f);
313 
314     ps = postcopy_state_get();
315     trace_process_incoming_migration_co_end(ret, ps);
316     if (ps != POSTCOPY_INCOMING_NONE) {
317         if (ps == POSTCOPY_INCOMING_ADVISE) {
318             /*
319              * Where a migration had postcopy enabled (and thus went to advise)
320              * but managed to complete within the precopy period, we can use
321              * the normal exit.
322              */
323             postcopy_ram_incoming_cleanup(mis);
324         } else if (ret >= 0) {
325             /*
326              * Postcopy was started, cleanup should happen at the end of the
327              * postcopy thread.
328              */
329             trace_process_incoming_migration_co_postcopy_end_main();
330             return;
331         }
332         /* Else if something went wrong then just fall out of the normal exit */
333     }
334 
335     /* we get COLO info, and know if we are in COLO mode */
336     if (!ret && migration_incoming_enable_colo()) {
337         mis->migration_incoming_co = qemu_coroutine_self();
338         qemu_thread_create(&mis->colo_incoming_thread, "COLO incoming",
339              colo_process_incoming_thread, mis, QEMU_THREAD_JOINABLE);
340         mis->have_colo_incoming_thread = true;
341         qemu_coroutine_yield();
342 
343         /* Wait checkpoint incoming thread exit before free resource */
344         qemu_thread_join(&mis->colo_incoming_thread);
345     }
346 
347     if (ret < 0) {
348         migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
349                           MIGRATION_STATUS_FAILED);
350         error_report("load of migration failed: %s", strerror(-ret));
351         qemu_fclose(mis->from_src_file);
352         exit(EXIT_FAILURE);
353     }
354     mis->bh = qemu_bh_new(process_incoming_migration_bh, mis);
355     qemu_bh_schedule(mis->bh);
356 }
357 
358 void migration_fd_process_incoming(QEMUFile *f)
359 {
360     Coroutine *co = qemu_coroutine_create(process_incoming_migration_co, f);
361 
362     qemu_file_set_blocking(f, false);
363     qemu_coroutine_enter(co);
364 }
365 
366 /*
367  * Send a 'SHUT' message on the return channel with the given value
368  * to indicate that we've finished with the RP.  Non-0 value indicates
369  * error.
370  */
371 void migrate_send_rp_shut(MigrationIncomingState *mis,
372                           uint32_t value)
373 {
374     uint32_t buf;
375 
376     buf = cpu_to_be32(value);
377     migrate_send_rp_message(mis, MIG_RP_MSG_SHUT, sizeof(buf), &buf);
378 }
379 
380 /*
381  * Send a 'PONG' message on the return channel with the given value
382  * (normally in response to a 'PING')
383  */
384 void migrate_send_rp_pong(MigrationIncomingState *mis,
385                           uint32_t value)
386 {
387     uint32_t buf;
388 
389     buf = cpu_to_be32(value);
390     migrate_send_rp_message(mis, MIG_RP_MSG_PONG, sizeof(buf), &buf);
391 }
392 
393 MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
394 {
395     MigrationCapabilityStatusList *head = NULL;
396     MigrationCapabilityStatusList *caps;
397     MigrationState *s = migrate_get_current();
398     int i;
399 
400     caps = NULL; /* silence compiler warning */
401     for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
402 #ifndef CONFIG_LIVE_BLOCK_MIGRATION
403         if (i == MIGRATION_CAPABILITY_BLOCK) {
404             continue;
405         }
406 #endif
407         if (i == MIGRATION_CAPABILITY_X_COLO && !colo_supported()) {
408             continue;
409         }
410         if (head == NULL) {
411             head = g_malloc0(sizeof(*caps));
412             caps = head;
413         } else {
414             caps->next = g_malloc0(sizeof(*caps));
415             caps = caps->next;
416         }
417         caps->value =
418             g_malloc(sizeof(*caps->value));
419         caps->value->capability = i;
420         caps->value->state = s->enabled_capabilities[i];
421     }
422 
423     return head;
424 }
425 
426 MigrationParameters *qmp_query_migrate_parameters(Error **errp)
427 {
428     MigrationParameters *params;
429     MigrationState *s = migrate_get_current();
430 
431     params = g_malloc0(sizeof(*params));
432     params->has_compress_level = true;
433     params->compress_level = s->parameters.compress_level;
434     params->has_compress_threads = true;
435     params->compress_threads = s->parameters.compress_threads;
436     params->has_decompress_threads = true;
437     params->decompress_threads = s->parameters.decompress_threads;
438     params->has_cpu_throttle_initial = true;
439     params->cpu_throttle_initial = s->parameters.cpu_throttle_initial;
440     params->has_cpu_throttle_increment = true;
441     params->cpu_throttle_increment = s->parameters.cpu_throttle_increment;
442     params->has_tls_creds = !!s->parameters.tls_creds;
443     params->tls_creds = g_strdup(s->parameters.tls_creds);
444     params->has_tls_hostname = !!s->parameters.tls_hostname;
445     params->tls_hostname = g_strdup(s->parameters.tls_hostname);
446     params->has_max_bandwidth = true;
447     params->max_bandwidth = s->parameters.max_bandwidth;
448     params->has_downtime_limit = true;
449     params->downtime_limit = s->parameters.downtime_limit;
450     params->has_x_checkpoint_delay = true;
451     params->x_checkpoint_delay = s->parameters.x_checkpoint_delay;
452     params->has_block_incremental = true;
453     params->block_incremental = s->parameters.block_incremental;
454 
455     return params;
456 }
457 
458 /*
459  * Return true if we're already in the middle of a migration
460  * (i.e. any of the active or setup states)
461  */
462 static bool migration_is_setup_or_active(int state)
463 {
464     switch (state) {
465     case MIGRATION_STATUS_ACTIVE:
466     case MIGRATION_STATUS_POSTCOPY_ACTIVE:
467     case MIGRATION_STATUS_SETUP:
468         return true;
469 
470     default:
471         return false;
472 
473     }
474 }
475 
476 static void populate_ram_info(MigrationInfo *info, MigrationState *s)
477 {
478     info->has_ram = true;
479     info->ram = g_malloc0(sizeof(*info->ram));
480     info->ram->transferred = ram_counters.transferred;
481     info->ram->total = ram_bytes_total();
482     info->ram->duplicate = ram_counters.duplicate;
483     /* legacy value.  It is not used anymore */
484     info->ram->skipped = 0;
485     info->ram->normal = ram_counters.normal;
486     info->ram->normal_bytes = ram_counters.normal *
487         qemu_target_page_size();
488     info->ram->mbps = s->mbps;
489     info->ram->dirty_sync_count = ram_counters.dirty_sync_count;
490     info->ram->postcopy_requests = ram_counters.postcopy_requests;
491     info->ram->page_size = qemu_target_page_size();
492 
493     if (migrate_use_xbzrle()) {
494         info->has_xbzrle_cache = true;
495         info->xbzrle_cache = g_malloc0(sizeof(*info->xbzrle_cache));
496         info->xbzrle_cache->cache_size = migrate_xbzrle_cache_size();
497         info->xbzrle_cache->bytes = xbzrle_counters.bytes;
498         info->xbzrle_cache->pages = xbzrle_counters.pages;
499         info->xbzrle_cache->cache_miss = xbzrle_counters.cache_miss;
500         info->xbzrle_cache->cache_miss_rate = xbzrle_counters.cache_miss_rate;
501         info->xbzrle_cache->overflow = xbzrle_counters.overflow;
502     }
503 
504     if (cpu_throttle_active()) {
505         info->has_cpu_throttle_percentage = true;
506         info->cpu_throttle_percentage = cpu_throttle_get_percentage();
507     }
508 
509     if (s->state != MIGRATION_STATUS_COMPLETED) {
510         info->ram->remaining = ram_bytes_remaining();
511         info->ram->dirty_pages_rate = ram_counters.dirty_pages_rate;
512     }
513 }
514 
515 static void populate_disk_info(MigrationInfo *info)
516 {
517     if (blk_mig_active()) {
518         info->has_disk = true;
519         info->disk = g_malloc0(sizeof(*info->disk));
520         info->disk->transferred = blk_mig_bytes_transferred();
521         info->disk->remaining = blk_mig_bytes_remaining();
522         info->disk->total = blk_mig_bytes_total();
523     }
524 }
525 
526 MigrationInfo *qmp_query_migrate(Error **errp)
527 {
528     MigrationInfo *info = g_malloc0(sizeof(*info));
529     MigrationState *s = migrate_get_current();
530 
531     switch (s->state) {
532     case MIGRATION_STATUS_NONE:
533         /* no migration has happened ever */
534         break;
535     case MIGRATION_STATUS_SETUP:
536         info->has_status = true;
537         info->has_total_time = false;
538         break;
539     case MIGRATION_STATUS_ACTIVE:
540     case MIGRATION_STATUS_CANCELLING:
541     case MIGRATION_STATUS_POSTCOPY_ACTIVE:
542          /* TODO add some postcopy stats */
543         info->has_status = true;
544         info->has_total_time = true;
545         info->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME)
546             - s->total_time;
547         info->has_expected_downtime = true;
548         info->expected_downtime = s->expected_downtime;
549         info->has_setup_time = true;
550         info->setup_time = s->setup_time;
551 
552         populate_ram_info(info, s);
553         populate_disk_info(info);
554         break;
555     case MIGRATION_STATUS_COLO:
556         info->has_status = true;
557         /* TODO: display COLO specific information (checkpoint info etc.) */
558         break;
559     case MIGRATION_STATUS_COMPLETED:
560         info->has_status = true;
561         info->has_total_time = true;
562         info->total_time = s->total_time;
563         info->has_downtime = true;
564         info->downtime = s->downtime;
565         info->has_setup_time = true;
566         info->setup_time = s->setup_time;
567 
568         populate_ram_info(info, s);
569         break;
570     case MIGRATION_STATUS_FAILED:
571         info->has_status = true;
572         if (s->error) {
573             info->has_error_desc = true;
574             info->error_desc = g_strdup(error_get_pretty(s->error));
575         }
576         break;
577     case MIGRATION_STATUS_CANCELLED:
578         info->has_status = true;
579         break;
580     }
581     info->status = s->state;
582 
583     return info;
584 }
585 
586 void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
587                                   Error **errp)
588 {
589     MigrationState *s = migrate_get_current();
590     MigrationCapabilityStatusList *cap;
591     bool old_postcopy_cap = migrate_postcopy_ram();
592 
593     if (migration_is_setup_or_active(s->state)) {
594         error_setg(errp, QERR_MIGRATION_ACTIVE);
595         return;
596     }
597 
598     for (cap = params; cap; cap = cap->next) {
599 #ifndef CONFIG_LIVE_BLOCK_MIGRATION
600         if (cap->value->capability == MIGRATION_CAPABILITY_BLOCK
601             && cap->value->state) {
602             error_setg(errp, "QEMU compiled without old-style (blk/-b, inc/-i) "
603                        "block migration");
604             error_append_hint(errp, "Use drive_mirror+NBD instead.\n");
605             continue;
606         }
607 #endif
608         if (cap->value->capability == MIGRATION_CAPABILITY_X_COLO) {
609             if (!colo_supported()) {
610                 error_setg(errp, "COLO is not currently supported, please"
611                              " configure with --enable-colo option in order to"
612                              " support COLO feature");
613                 continue;
614             }
615         }
616         s->enabled_capabilities[cap->value->capability] = cap->value->state;
617     }
618 
619     if (migrate_postcopy_ram()) {
620         if (migrate_use_compression()) {
621             /* The decompression threads asynchronously write into RAM
622              * rather than use the atomic copies needed to avoid
623              * userfaulting.  It should be possible to fix the decompression
624              * threads for compatibility in future.
625              */
626             error_report("Postcopy is not currently compatible with "
627                          "compression");
628             s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM] =
629                 false;
630         }
631         /* This check is reasonably expensive, so only when it's being
632          * set the first time, also it's only the destination that needs
633          * special support.
634          */
635         if (!old_postcopy_cap && runstate_check(RUN_STATE_INMIGRATE) &&
636             !postcopy_ram_supported_by_host()) {
637             /* postcopy_ram_supported_by_host will have emitted a more
638              * detailed message
639              */
640             error_report("Postcopy is not supported");
641             s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM] =
642                 false;
643         }
644     }
645 }
646 
647 void qmp_migrate_set_parameters(MigrationParameters *params, Error **errp)
648 {
649     MigrationState *s = migrate_get_current();
650 
651     if (params->has_compress_level &&
652         (params->compress_level < 0 || params->compress_level > 9)) {
653         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "compress_level",
654                    "is invalid, it should be in the range of 0 to 9");
655         return;
656     }
657     if (params->has_compress_threads &&
658         (params->compress_threads < 1 || params->compress_threads > 255)) {
659         error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
660                    "compress_threads",
661                    "is invalid, it should be in the range of 1 to 255");
662         return;
663     }
664     if (params->has_decompress_threads &&
665         (params->decompress_threads < 1 || params->decompress_threads > 255)) {
666         error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
667                    "decompress_threads",
668                    "is invalid, it should be in the range of 1 to 255");
669         return;
670     }
671     if (params->has_cpu_throttle_initial &&
672         (params->cpu_throttle_initial < 1 ||
673          params->cpu_throttle_initial > 99)) {
674         error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
675                    "cpu_throttle_initial",
676                    "an integer in the range of 1 to 99");
677         return;
678     }
679     if (params->has_cpu_throttle_increment &&
680         (params->cpu_throttle_increment < 1 ||
681          params->cpu_throttle_increment > 99)) {
682         error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
683                    "cpu_throttle_increment",
684                    "an integer in the range of 1 to 99");
685         return;
686     }
687     if (params->has_max_bandwidth &&
688         (params->max_bandwidth < 0 || params->max_bandwidth > SIZE_MAX)) {
689         error_setg(errp, "Parameter 'max_bandwidth' expects an integer in the"
690                          " range of 0 to %zu bytes/second", SIZE_MAX);
691         return;
692     }
693     if (params->has_downtime_limit &&
694         (params->downtime_limit < 0 ||
695          params->downtime_limit > MAX_MIGRATE_DOWNTIME)) {
696         error_setg(errp, "Parameter 'downtime_limit' expects an integer in "
697                          "the range of 0 to %d milliseconds",
698                          MAX_MIGRATE_DOWNTIME);
699         return;
700     }
701     if (params->has_x_checkpoint_delay && (params->x_checkpoint_delay < 0)) {
702         error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
703                     "x_checkpoint_delay",
704                     "is invalid, it should be positive");
705     }
706 
707     if (params->has_compress_level) {
708         s->parameters.compress_level = params->compress_level;
709     }
710     if (params->has_compress_threads) {
711         s->parameters.compress_threads = params->compress_threads;
712     }
713     if (params->has_decompress_threads) {
714         s->parameters.decompress_threads = params->decompress_threads;
715     }
716     if (params->has_cpu_throttle_initial) {
717         s->parameters.cpu_throttle_initial = params->cpu_throttle_initial;
718     }
719     if (params->has_cpu_throttle_increment) {
720         s->parameters.cpu_throttle_increment = params->cpu_throttle_increment;
721     }
722     if (params->has_tls_creds) {
723         g_free(s->parameters.tls_creds);
724         s->parameters.tls_creds = g_strdup(params->tls_creds);
725     }
726     if (params->has_tls_hostname) {
727         g_free(s->parameters.tls_hostname);
728         s->parameters.tls_hostname = g_strdup(params->tls_hostname);
729     }
730     if (params->has_max_bandwidth) {
731         s->parameters.max_bandwidth = params->max_bandwidth;
732         if (s->to_dst_file) {
733             qemu_file_set_rate_limit(s->to_dst_file,
734                                 s->parameters.max_bandwidth / XFER_LIMIT_RATIO);
735         }
736     }
737     if (params->has_downtime_limit) {
738         s->parameters.downtime_limit = params->downtime_limit;
739     }
740 
741     if (params->has_x_checkpoint_delay) {
742         s->parameters.x_checkpoint_delay = params->x_checkpoint_delay;
743         if (migration_in_colo_state()) {
744             colo_checkpoint_notify(s);
745         }
746     }
747     if (params->has_block_incremental) {
748         s->parameters.block_incremental = params->block_incremental;
749     }
750 }
751 
752 
753 void qmp_migrate_start_postcopy(Error **errp)
754 {
755     MigrationState *s = migrate_get_current();
756 
757     if (!migrate_postcopy_ram()) {
758         error_setg(errp, "Enable postcopy with migrate_set_capability before"
759                          " the start of migration");
760         return;
761     }
762 
763     if (s->state == MIGRATION_STATUS_NONE) {
764         error_setg(errp, "Postcopy must be started after migration has been"
765                          " started");
766         return;
767     }
768     /*
769      * we don't error if migration has finished since that would be racy
770      * with issuing this command.
771      */
772     atomic_set(&s->start_postcopy, true);
773 }
774 
775 /* shared migration helpers */
776 
777 void migrate_set_state(int *state, int old_state, int new_state)
778 {
779     if (atomic_cmpxchg(state, old_state, new_state) == old_state) {
780         trace_migrate_set_state(new_state);
781         migrate_generate_event(new_state);
782     }
783 }
784 
785 void migrate_set_block_enabled(bool value, Error **errp)
786 {
787     MigrationCapabilityStatusList *cap;
788 
789     cap = g_new0(MigrationCapabilityStatusList, 1);
790     cap->value = g_new0(MigrationCapabilityStatus, 1);
791     cap->value->capability = MIGRATION_CAPABILITY_BLOCK;
792     cap->value->state = value;
793     qmp_migrate_set_capabilities(cap, errp);
794     qapi_free_MigrationCapabilityStatusList(cap);
795 }
796 
797 static void migrate_set_block_incremental(MigrationState *s, bool value)
798 {
799     s->parameters.block_incremental = value;
800 }
801 
802 static void block_cleanup_parameters(MigrationState *s)
803 {
804     if (s->must_remove_block_options) {
805         /* setting to false can never fail */
806         migrate_set_block_enabled(false, &error_abort);
807         migrate_set_block_incremental(s, false);
808         s->must_remove_block_options = false;
809     }
810 }
811 
812 static void migrate_fd_cleanup(void *opaque)
813 {
814     MigrationState *s = opaque;
815 
816     qemu_bh_delete(s->cleanup_bh);
817     s->cleanup_bh = NULL;
818 
819     if (s->to_dst_file) {
820         trace_migrate_fd_cleanup();
821         qemu_mutex_unlock_iothread();
822         if (s->migration_thread_running) {
823             qemu_thread_join(&s->thread);
824             s->migration_thread_running = false;
825         }
826         qemu_mutex_lock_iothread();
827 
828         qemu_fclose(s->to_dst_file);
829         s->to_dst_file = NULL;
830     }
831 
832     assert((s->state != MIGRATION_STATUS_ACTIVE) &&
833            (s->state != MIGRATION_STATUS_POSTCOPY_ACTIVE));
834 
835     if (s->state == MIGRATION_STATUS_CANCELLING) {
836         migrate_set_state(&s->state, MIGRATION_STATUS_CANCELLING,
837                           MIGRATION_STATUS_CANCELLED);
838     }
839 
840     notifier_list_notify(&migration_state_notifiers, s);
841     block_cleanup_parameters(s);
842 }
843 
844 void migrate_fd_error(MigrationState *s, const Error *error)
845 {
846     trace_migrate_fd_error(error_get_pretty(error));
847     assert(s->to_dst_file == NULL);
848     migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
849                       MIGRATION_STATUS_FAILED);
850     if (!s->error) {
851         s->error = error_copy(error);
852     }
853     notifier_list_notify(&migration_state_notifiers, s);
854     block_cleanup_parameters(s);
855 }
856 
857 static void migrate_fd_cancel(MigrationState *s)
858 {
859     int old_state ;
860     QEMUFile *f = migrate_get_current()->to_dst_file;
861     trace_migrate_fd_cancel();
862 
863     if (s->rp_state.from_dst_file) {
864         /* shutdown the rp socket, so causing the rp thread to shutdown */
865         qemu_file_shutdown(s->rp_state.from_dst_file);
866     }
867 
868     do {
869         old_state = s->state;
870         if (!migration_is_setup_or_active(old_state)) {
871             break;
872         }
873         migrate_set_state(&s->state, old_state, MIGRATION_STATUS_CANCELLING);
874     } while (s->state != MIGRATION_STATUS_CANCELLING);
875 
876     /*
877      * If we're unlucky the migration code might be stuck somewhere in a
878      * send/write while the network has failed and is waiting to timeout;
879      * if we've got shutdown(2) available then we can force it to quit.
880      * The outgoing qemu file gets closed in migrate_fd_cleanup that is
881      * called in a bh, so there is no race against this cancel.
882      */
883     if (s->state == MIGRATION_STATUS_CANCELLING && f) {
884         qemu_file_shutdown(f);
885     }
886     if (s->state == MIGRATION_STATUS_CANCELLING && s->block_inactive) {
887         Error *local_err = NULL;
888 
889         bdrv_invalidate_cache_all(&local_err);
890         if (local_err) {
891             error_report_err(local_err);
892         } else {
893             s->block_inactive = false;
894         }
895     }
896     block_cleanup_parameters(s);
897 }
898 
899 void add_migration_state_change_notifier(Notifier *notify)
900 {
901     notifier_list_add(&migration_state_notifiers, notify);
902 }
903 
904 void remove_migration_state_change_notifier(Notifier *notify)
905 {
906     notifier_remove(notify);
907 }
908 
909 bool migration_in_setup(MigrationState *s)
910 {
911     return s->state == MIGRATION_STATUS_SETUP;
912 }
913 
914 bool migration_has_finished(MigrationState *s)
915 {
916     return s->state == MIGRATION_STATUS_COMPLETED;
917 }
918 
919 bool migration_has_failed(MigrationState *s)
920 {
921     return (s->state == MIGRATION_STATUS_CANCELLED ||
922             s->state == MIGRATION_STATUS_FAILED);
923 }
924 
925 bool migration_in_postcopy(void)
926 {
927     MigrationState *s = migrate_get_current();
928 
929     return (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE);
930 }
931 
932 bool migration_in_postcopy_after_devices(MigrationState *s)
933 {
934     return migration_in_postcopy() && s->postcopy_after_devices;
935 }
936 
937 bool migration_is_idle(void)
938 {
939     MigrationState *s = migrate_get_current();
940 
941     switch (s->state) {
942     case MIGRATION_STATUS_NONE:
943     case MIGRATION_STATUS_CANCELLED:
944     case MIGRATION_STATUS_COMPLETED:
945     case MIGRATION_STATUS_FAILED:
946         return true;
947     case MIGRATION_STATUS_SETUP:
948     case MIGRATION_STATUS_CANCELLING:
949     case MIGRATION_STATUS_ACTIVE:
950     case MIGRATION_STATUS_POSTCOPY_ACTIVE:
951     case MIGRATION_STATUS_COLO:
952         return false;
953     case MIGRATION_STATUS__MAX:
954         g_assert_not_reached();
955     }
956 
957     return false;
958 }
959 
960 MigrationState *migrate_init(void)
961 {
962     MigrationState *s = migrate_get_current();
963 
964     /*
965      * Reinitialise all migration state, except
966      * parameters/capabilities that the user set, and
967      * locks.
968      */
969     s->bytes_xfer = 0;
970     s->xfer_limit = 0;
971     s->cleanup_bh = 0;
972     s->to_dst_file = NULL;
973     s->state = MIGRATION_STATUS_NONE;
974     s->rp_state.from_dst_file = NULL;
975     s->rp_state.error = false;
976     s->mbps = 0.0;
977     s->downtime = 0;
978     s->expected_downtime = 0;
979     s->setup_time = 0;
980     s->start_postcopy = false;
981     s->postcopy_after_devices = false;
982     s->migration_thread_running = false;
983     error_free(s->error);
984     s->error = NULL;
985 
986     migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP);
987 
988     s->total_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
989     return s;
990 }
991 
992 static GSList *migration_blockers;
993 
994 int migrate_add_blocker(Error *reason, Error **errp)
995 {
996     if (migrate_get_current()->only_migratable) {
997         error_propagate(errp, error_copy(reason));
998         error_prepend(errp, "disallowing migration blocker "
999                           "(--only_migratable) for: ");
1000         return -EACCES;
1001     }
1002 
1003     if (migration_is_idle()) {
1004         migration_blockers = g_slist_prepend(migration_blockers, reason);
1005         return 0;
1006     }
1007 
1008     error_propagate(errp, error_copy(reason));
1009     error_prepend(errp, "disallowing migration blocker (migration in "
1010                       "progress) for: ");
1011     return -EBUSY;
1012 }
1013 
1014 void migrate_del_blocker(Error *reason)
1015 {
1016     migration_blockers = g_slist_remove(migration_blockers, reason);
1017 }
1018 
1019 void qmp_migrate_incoming(const char *uri, Error **errp)
1020 {
1021     Error *local_err = NULL;
1022     static bool once = true;
1023 
1024     if (!deferred_incoming) {
1025         error_setg(errp, "For use with '-incoming defer'");
1026         return;
1027     }
1028     if (!once) {
1029         error_setg(errp, "The incoming migration has already been started");
1030     }
1031 
1032     qemu_start_incoming_migration(uri, &local_err);
1033 
1034     if (local_err) {
1035         error_propagate(errp, local_err);
1036         return;
1037     }
1038 
1039     once = false;
1040 }
1041 
1042 bool migration_is_blocked(Error **errp)
1043 {
1044     if (qemu_savevm_state_blocked(errp)) {
1045         return true;
1046     }
1047 
1048     if (migration_blockers) {
1049         error_propagate(errp, error_copy(migration_blockers->data));
1050         return true;
1051     }
1052 
1053     return false;
1054 }
1055 
1056 void qmp_migrate(const char *uri, bool has_blk, bool blk,
1057                  bool has_inc, bool inc, bool has_detach, bool detach,
1058                  Error **errp)
1059 {
1060     Error *local_err = NULL;
1061     MigrationState *s = migrate_get_current();
1062     const char *p;
1063 
1064     if (migration_is_setup_or_active(s->state) ||
1065         s->state == MIGRATION_STATUS_CANCELLING ||
1066         s->state == MIGRATION_STATUS_COLO) {
1067         error_setg(errp, QERR_MIGRATION_ACTIVE);
1068         return;
1069     }
1070     if (runstate_check(RUN_STATE_INMIGRATE)) {
1071         error_setg(errp, "Guest is waiting for an incoming migration");
1072         return;
1073     }
1074 
1075     if (migration_is_blocked(errp)) {
1076         return;
1077     }
1078 
1079     if ((has_blk && blk) || (has_inc && inc)) {
1080         if (migrate_use_block() || migrate_use_block_incremental()) {
1081             error_setg(errp, "Command options are incompatible with "
1082                        "current migration capabilities");
1083             return;
1084         }
1085         migrate_set_block_enabled(true, &local_err);
1086         if (local_err) {
1087             error_propagate(errp, local_err);
1088             return;
1089         }
1090         s->must_remove_block_options = true;
1091     }
1092 
1093     if (has_inc && inc) {
1094         migrate_set_block_incremental(s, true);
1095     }
1096 
1097     s = migrate_init();
1098 
1099     if (strstart(uri, "tcp:", &p)) {
1100         tcp_start_outgoing_migration(s, p, &local_err);
1101 #ifdef CONFIG_RDMA
1102     } else if (strstart(uri, "rdma:", &p)) {
1103         rdma_start_outgoing_migration(s, p, &local_err);
1104 #endif
1105     } else if (strstart(uri, "exec:", &p)) {
1106         exec_start_outgoing_migration(s, p, &local_err);
1107     } else if (strstart(uri, "unix:", &p)) {
1108         unix_start_outgoing_migration(s, p, &local_err);
1109     } else if (strstart(uri, "fd:", &p)) {
1110         fd_start_outgoing_migration(s, p, &local_err);
1111     } else {
1112         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "uri",
1113                    "a valid migration protocol");
1114         migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
1115                           MIGRATION_STATUS_FAILED);
1116         return;
1117     }
1118 
1119     if (local_err) {
1120         migrate_fd_error(s, local_err);
1121         error_propagate(errp, local_err);
1122         return;
1123     }
1124 }
1125 
1126 void qmp_migrate_cancel(Error **errp)
1127 {
1128     migrate_fd_cancel(migrate_get_current());
1129 }
1130 
1131 void qmp_migrate_set_cache_size(int64_t value, Error **errp)
1132 {
1133     MigrationState *s = migrate_get_current();
1134     int64_t new_size;
1135 
1136     /* Check for truncation */
1137     if (value != (size_t)value) {
1138         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
1139                    "exceeding address space");
1140         return;
1141     }
1142 
1143     /* Cache should not be larger than guest ram size */
1144     if (value > ram_bytes_total()) {
1145         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
1146                    "exceeds guest ram size ");
1147         return;
1148     }
1149 
1150     new_size = xbzrle_cache_resize(value);
1151     if (new_size < 0) {
1152         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
1153                    "is smaller than page size");
1154         return;
1155     }
1156 
1157     s->xbzrle_cache_size = new_size;
1158 }
1159 
1160 int64_t qmp_query_migrate_cache_size(Error **errp)
1161 {
1162     return migrate_xbzrle_cache_size();
1163 }
1164 
1165 void qmp_migrate_set_speed(int64_t value, Error **errp)
1166 {
1167     MigrationParameters p = {
1168         .has_max_bandwidth = true,
1169         .max_bandwidth = value,
1170     };
1171 
1172     qmp_migrate_set_parameters(&p, errp);
1173 }
1174 
1175 void qmp_migrate_set_downtime(double value, Error **errp)
1176 {
1177     if (value < 0 || value > MAX_MIGRATE_DOWNTIME_SECONDS) {
1178         error_setg(errp, "Parameter 'downtime_limit' expects an integer in "
1179                          "the range of 0 to %d seconds",
1180                          MAX_MIGRATE_DOWNTIME_SECONDS);
1181         return;
1182     }
1183 
1184     value *= 1000; /* Convert to milliseconds */
1185     value = MAX(0, MIN(INT64_MAX, value));
1186 
1187     MigrationParameters p = {
1188         .has_downtime_limit = true,
1189         .downtime_limit = value,
1190     };
1191 
1192     qmp_migrate_set_parameters(&p, errp);
1193 }
1194 
1195 bool migrate_release_ram(void)
1196 {
1197     MigrationState *s;
1198 
1199     s = migrate_get_current();
1200 
1201     return s->enabled_capabilities[MIGRATION_CAPABILITY_RELEASE_RAM];
1202 }
1203 
1204 bool migrate_postcopy_ram(void)
1205 {
1206     MigrationState *s;
1207 
1208     s = migrate_get_current();
1209 
1210     return s->enabled_capabilities[MIGRATION_CAPABILITY_POSTCOPY_RAM];
1211 }
1212 
1213 bool migrate_auto_converge(void)
1214 {
1215     MigrationState *s;
1216 
1217     s = migrate_get_current();
1218 
1219     return s->enabled_capabilities[MIGRATION_CAPABILITY_AUTO_CONVERGE];
1220 }
1221 
1222 bool migrate_zero_blocks(void)
1223 {
1224     MigrationState *s;
1225 
1226     s = migrate_get_current();
1227 
1228     return s->enabled_capabilities[MIGRATION_CAPABILITY_ZERO_BLOCKS];
1229 }
1230 
1231 bool migrate_use_compression(void)
1232 {
1233     MigrationState *s;
1234 
1235     s = migrate_get_current();
1236 
1237     return s->enabled_capabilities[MIGRATION_CAPABILITY_COMPRESS];
1238 }
1239 
1240 int migrate_compress_level(void)
1241 {
1242     MigrationState *s;
1243 
1244     s = migrate_get_current();
1245 
1246     return s->parameters.compress_level;
1247 }
1248 
1249 int migrate_compress_threads(void)
1250 {
1251     MigrationState *s;
1252 
1253     s = migrate_get_current();
1254 
1255     return s->parameters.compress_threads;
1256 }
1257 
1258 int migrate_decompress_threads(void)
1259 {
1260     MigrationState *s;
1261 
1262     s = migrate_get_current();
1263 
1264     return s->parameters.decompress_threads;
1265 }
1266 
1267 bool migrate_use_events(void)
1268 {
1269     MigrationState *s;
1270 
1271     s = migrate_get_current();
1272 
1273     return s->enabled_capabilities[MIGRATION_CAPABILITY_EVENTS];
1274 }
1275 
1276 int migrate_use_xbzrle(void)
1277 {
1278     MigrationState *s;
1279 
1280     s = migrate_get_current();
1281 
1282     return s->enabled_capabilities[MIGRATION_CAPABILITY_XBZRLE];
1283 }
1284 
1285 int64_t migrate_xbzrle_cache_size(void)
1286 {
1287     MigrationState *s;
1288 
1289     s = migrate_get_current();
1290 
1291     return s->xbzrle_cache_size;
1292 }
1293 
1294 bool migrate_use_block(void)
1295 {
1296     MigrationState *s;
1297 
1298     s = migrate_get_current();
1299 
1300     return s->enabled_capabilities[MIGRATION_CAPABILITY_BLOCK];
1301 }
1302 
1303 bool migrate_use_return_path(void)
1304 {
1305     MigrationState *s;
1306 
1307     s = migrate_get_current();
1308 
1309     return s->enabled_capabilities[MIGRATION_CAPABILITY_RETURN_PATH];
1310 }
1311 
1312 bool migrate_use_block_incremental(void)
1313 {
1314     MigrationState *s;
1315 
1316     s = migrate_get_current();
1317 
1318     return s->parameters.block_incremental;
1319 }
1320 
1321 /* migration thread support */
1322 /*
1323  * Something bad happened to the RP stream, mark an error
1324  * The caller shall print or trace something to indicate why
1325  */
1326 static void mark_source_rp_bad(MigrationState *s)
1327 {
1328     s->rp_state.error = true;
1329 }
1330 
1331 static struct rp_cmd_args {
1332     ssize_t     len; /* -1 = variable */
1333     const char *name;
1334 } rp_cmd_args[] = {
1335     [MIG_RP_MSG_INVALID]        = { .len = -1, .name = "INVALID" },
1336     [MIG_RP_MSG_SHUT]           = { .len =  4, .name = "SHUT" },
1337     [MIG_RP_MSG_PONG]           = { .len =  4, .name = "PONG" },
1338     [MIG_RP_MSG_REQ_PAGES]      = { .len = 12, .name = "REQ_PAGES" },
1339     [MIG_RP_MSG_REQ_PAGES_ID]   = { .len = -1, .name = "REQ_PAGES_ID" },
1340     [MIG_RP_MSG_MAX]            = { .len = -1, .name = "MAX" },
1341 };
1342 
1343 /*
1344  * Process a request for pages received on the return path,
1345  * We're allowed to send more than requested (e.g. to round to our page size)
1346  * and we don't need to send pages that have already been sent.
1347  */
1348 static void migrate_handle_rp_req_pages(MigrationState *ms, const char* rbname,
1349                                        ram_addr_t start, size_t len)
1350 {
1351     long our_host_ps = getpagesize();
1352 
1353     trace_migrate_handle_rp_req_pages(rbname, start, len);
1354 
1355     /*
1356      * Since we currently insist on matching page sizes, just sanity check
1357      * we're being asked for whole host pages.
1358      */
1359     if (start & (our_host_ps-1) ||
1360        (len & (our_host_ps-1))) {
1361         error_report("%s: Misaligned page request, start: " RAM_ADDR_FMT
1362                      " len: %zd", __func__, start, len);
1363         mark_source_rp_bad(ms);
1364         return;
1365     }
1366 
1367     if (ram_save_queue_pages(rbname, start, len)) {
1368         mark_source_rp_bad(ms);
1369     }
1370 }
1371 
1372 /*
1373  * Handles messages sent on the return path towards the source VM
1374  *
1375  */
1376 static void *source_return_path_thread(void *opaque)
1377 {
1378     MigrationState *ms = opaque;
1379     QEMUFile *rp = ms->rp_state.from_dst_file;
1380     uint16_t header_len, header_type;
1381     uint8_t buf[512];
1382     uint32_t tmp32, sibling_error;
1383     ram_addr_t start = 0; /* =0 to silence warning */
1384     size_t  len = 0, expected_len;
1385     int res;
1386 
1387     trace_source_return_path_thread_entry();
1388     while (!ms->rp_state.error && !qemu_file_get_error(rp) &&
1389            migration_is_setup_or_active(ms->state)) {
1390         trace_source_return_path_thread_loop_top();
1391         header_type = qemu_get_be16(rp);
1392         header_len = qemu_get_be16(rp);
1393 
1394         if (header_type >= MIG_RP_MSG_MAX ||
1395             header_type == MIG_RP_MSG_INVALID) {
1396             error_report("RP: Received invalid message 0x%04x length 0x%04x",
1397                     header_type, header_len);
1398             mark_source_rp_bad(ms);
1399             goto out;
1400         }
1401 
1402         if ((rp_cmd_args[header_type].len != -1 &&
1403             header_len != rp_cmd_args[header_type].len) ||
1404             header_len > sizeof(buf)) {
1405             error_report("RP: Received '%s' message (0x%04x) with"
1406                     "incorrect length %d expecting %zu",
1407                     rp_cmd_args[header_type].name, header_type, header_len,
1408                     (size_t)rp_cmd_args[header_type].len);
1409             mark_source_rp_bad(ms);
1410             goto out;
1411         }
1412 
1413         /* We know we've got a valid header by this point */
1414         res = qemu_get_buffer(rp, buf, header_len);
1415         if (res != header_len) {
1416             error_report("RP: Failed reading data for message 0x%04x"
1417                          " read %d expected %d",
1418                          header_type, res, header_len);
1419             mark_source_rp_bad(ms);
1420             goto out;
1421         }
1422 
1423         /* OK, we have the message and the data */
1424         switch (header_type) {
1425         case MIG_RP_MSG_SHUT:
1426             sibling_error = ldl_be_p(buf);
1427             trace_source_return_path_thread_shut(sibling_error);
1428             if (sibling_error) {
1429                 error_report("RP: Sibling indicated error %d", sibling_error);
1430                 mark_source_rp_bad(ms);
1431             }
1432             /*
1433              * We'll let the main thread deal with closing the RP
1434              * we could do a shutdown(2) on it, but we're the only user
1435              * anyway, so there's nothing gained.
1436              */
1437             goto out;
1438 
1439         case MIG_RP_MSG_PONG:
1440             tmp32 = ldl_be_p(buf);
1441             trace_source_return_path_thread_pong(tmp32);
1442             break;
1443 
1444         case MIG_RP_MSG_REQ_PAGES:
1445             start = ldq_be_p(buf);
1446             len = ldl_be_p(buf + 8);
1447             migrate_handle_rp_req_pages(ms, NULL, start, len);
1448             break;
1449 
1450         case MIG_RP_MSG_REQ_PAGES_ID:
1451             expected_len = 12 + 1; /* header + termination */
1452 
1453             if (header_len >= expected_len) {
1454                 start = ldq_be_p(buf);
1455                 len = ldl_be_p(buf + 8);
1456                 /* Now we expect an idstr */
1457                 tmp32 = buf[12]; /* Length of the following idstr */
1458                 buf[13 + tmp32] = '\0';
1459                 expected_len += tmp32;
1460             }
1461             if (header_len != expected_len) {
1462                 error_report("RP: Req_Page_id with length %d expecting %zd",
1463                         header_len, expected_len);
1464                 mark_source_rp_bad(ms);
1465                 goto out;
1466             }
1467             migrate_handle_rp_req_pages(ms, (char *)&buf[13], start, len);
1468             break;
1469 
1470         default:
1471             break;
1472         }
1473     }
1474     if (qemu_file_get_error(rp)) {
1475         trace_source_return_path_thread_bad_end();
1476         mark_source_rp_bad(ms);
1477     }
1478 
1479     trace_source_return_path_thread_end();
1480 out:
1481     ms->rp_state.from_dst_file = NULL;
1482     qemu_fclose(rp);
1483     return NULL;
1484 }
1485 
1486 static int open_return_path_on_source(MigrationState *ms)
1487 {
1488 
1489     ms->rp_state.from_dst_file = qemu_file_get_return_path(ms->to_dst_file);
1490     if (!ms->rp_state.from_dst_file) {
1491         return -1;
1492     }
1493 
1494     trace_open_return_path_on_source();
1495     qemu_thread_create(&ms->rp_state.rp_thread, "return path",
1496                        source_return_path_thread, ms, QEMU_THREAD_JOINABLE);
1497 
1498     trace_open_return_path_on_source_continue();
1499 
1500     return 0;
1501 }
1502 
1503 /* Returns 0 if the RP was ok, otherwise there was an error on the RP */
1504 static int await_return_path_close_on_source(MigrationState *ms)
1505 {
1506     /*
1507      * If this is a normal exit then the destination will send a SHUT and the
1508      * rp_thread will exit, however if there's an error we need to cause
1509      * it to exit.
1510      */
1511     if (qemu_file_get_error(ms->to_dst_file) && ms->rp_state.from_dst_file) {
1512         /*
1513          * shutdown(2), if we have it, will cause it to unblock if it's stuck
1514          * waiting for the destination.
1515          */
1516         qemu_file_shutdown(ms->rp_state.from_dst_file);
1517         mark_source_rp_bad(ms);
1518     }
1519     trace_await_return_path_close_on_source_joining();
1520     qemu_thread_join(&ms->rp_state.rp_thread);
1521     trace_await_return_path_close_on_source_close();
1522     return ms->rp_state.error;
1523 }
1524 
1525 /*
1526  * Switch from normal iteration to postcopy
1527  * Returns non-0 on error
1528  */
1529 static int postcopy_start(MigrationState *ms, bool *old_vm_running)
1530 {
1531     int ret;
1532     QIOChannelBuffer *bioc;
1533     QEMUFile *fb;
1534     int64_t time_at_stop = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1535     bool restart_block = false;
1536     migrate_set_state(&ms->state, MIGRATION_STATUS_ACTIVE,
1537                       MIGRATION_STATUS_POSTCOPY_ACTIVE);
1538 
1539     trace_postcopy_start();
1540     qemu_mutex_lock_iothread();
1541     trace_postcopy_start_set_run();
1542 
1543     qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
1544     *old_vm_running = runstate_is_running();
1545     global_state_store();
1546     ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
1547     if (ret < 0) {
1548         goto fail;
1549     }
1550 
1551     ret = bdrv_inactivate_all();
1552     if (ret < 0) {
1553         goto fail;
1554     }
1555     restart_block = true;
1556 
1557     /*
1558      * Cause any non-postcopiable, but iterative devices to
1559      * send out their final data.
1560      */
1561     qemu_savevm_state_complete_precopy(ms->to_dst_file, true, false);
1562 
1563     /*
1564      * in Finish migrate and with the io-lock held everything should
1565      * be quiet, but we've potentially still got dirty pages and we
1566      * need to tell the destination to throw any pages it's already received
1567      * that are dirty
1568      */
1569     if (ram_postcopy_send_discard_bitmap(ms)) {
1570         error_report("postcopy send discard bitmap failed");
1571         goto fail;
1572     }
1573 
1574     /*
1575      * send rest of state - note things that are doing postcopy
1576      * will notice we're in POSTCOPY_ACTIVE and not actually
1577      * wrap their state up here
1578      */
1579     qemu_file_set_rate_limit(ms->to_dst_file, INT64_MAX);
1580     /* Ping just for debugging, helps line traces up */
1581     qemu_savevm_send_ping(ms->to_dst_file, 2);
1582 
1583     /*
1584      * While loading the device state we may trigger page transfer
1585      * requests and the fd must be free to process those, and thus
1586      * the destination must read the whole device state off the fd before
1587      * it starts processing it.  Unfortunately the ad-hoc migration format
1588      * doesn't allow the destination to know the size to read without fully
1589      * parsing it through each devices load-state code (especially the open
1590      * coded devices that use get/put).
1591      * So we wrap the device state up in a package with a length at the start;
1592      * to do this we use a qemu_buf to hold the whole of the device state.
1593      */
1594     bioc = qio_channel_buffer_new(4096);
1595     qio_channel_set_name(QIO_CHANNEL(bioc), "migration-postcopy-buffer");
1596     fb = qemu_fopen_channel_output(QIO_CHANNEL(bioc));
1597     object_unref(OBJECT(bioc));
1598 
1599     /*
1600      * Make sure the receiver can get incoming pages before we send the rest
1601      * of the state
1602      */
1603     qemu_savevm_send_postcopy_listen(fb);
1604 
1605     qemu_savevm_state_complete_precopy(fb, false, false);
1606     qemu_savevm_send_ping(fb, 3);
1607 
1608     qemu_savevm_send_postcopy_run(fb);
1609 
1610     /* <><> end of stuff going into the package */
1611 
1612     /* Last point of recovery; as soon as we send the package the destination
1613      * can open devices and potentially start running.
1614      * Lets just check again we've not got any errors.
1615      */
1616     ret = qemu_file_get_error(ms->to_dst_file);
1617     if (ret) {
1618         error_report("postcopy_start: Migration stream errored (pre package)");
1619         goto fail_closefb;
1620     }
1621 
1622     restart_block = false;
1623 
1624     /* Now send that blob */
1625     if (qemu_savevm_send_packaged(ms->to_dst_file, bioc->data, bioc->usage)) {
1626         goto fail_closefb;
1627     }
1628     qemu_fclose(fb);
1629 
1630     /* Send a notify to give a chance for anything that needs to happen
1631      * at the transition to postcopy and after the device state; in particular
1632      * spice needs to trigger a transition now
1633      */
1634     ms->postcopy_after_devices = true;
1635     notifier_list_notify(&migration_state_notifiers, ms);
1636 
1637     ms->downtime =  qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - time_at_stop;
1638 
1639     qemu_mutex_unlock_iothread();
1640 
1641     /*
1642      * Although this ping is just for debug, it could potentially be
1643      * used for getting a better measurement of downtime at the source.
1644      */
1645     qemu_savevm_send_ping(ms->to_dst_file, 4);
1646 
1647     if (migrate_release_ram()) {
1648         ram_postcopy_migrated_memory_release(ms);
1649     }
1650 
1651     ret = qemu_file_get_error(ms->to_dst_file);
1652     if (ret) {
1653         error_report("postcopy_start: Migration stream errored");
1654         migrate_set_state(&ms->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
1655                               MIGRATION_STATUS_FAILED);
1656     }
1657 
1658     return ret;
1659 
1660 fail_closefb:
1661     qemu_fclose(fb);
1662 fail:
1663     migrate_set_state(&ms->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
1664                           MIGRATION_STATUS_FAILED);
1665     if (restart_block) {
1666         /* A failure happened early enough that we know the destination hasn't
1667          * accessed block devices, so we're safe to recover.
1668          */
1669         Error *local_err = NULL;
1670 
1671         bdrv_invalidate_cache_all(&local_err);
1672         if (local_err) {
1673             error_report_err(local_err);
1674         }
1675     }
1676     qemu_mutex_unlock_iothread();
1677     return -1;
1678 }
1679 
1680 /**
1681  * migration_completion: Used by migration_thread when there's not much left.
1682  *   The caller 'breaks' the loop when this returns.
1683  *
1684  * @s: Current migration state
1685  * @current_active_state: The migration state we expect to be in
1686  * @*old_vm_running: Pointer to old_vm_running flag
1687  * @*start_time: Pointer to time to update
1688  */
1689 static void migration_completion(MigrationState *s, int current_active_state,
1690                                  bool *old_vm_running,
1691                                  int64_t *start_time)
1692 {
1693     int ret;
1694 
1695     if (s->state == MIGRATION_STATUS_ACTIVE) {
1696         qemu_mutex_lock_iothread();
1697         *start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1698         qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
1699         *old_vm_running = runstate_is_running();
1700         ret = global_state_store();
1701 
1702         if (!ret) {
1703             bool inactivate = !migrate_colo_enabled();
1704             ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
1705             if (ret >= 0) {
1706                 qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
1707                 ret = qemu_savevm_state_complete_precopy(s->to_dst_file, false,
1708                                                          inactivate);
1709             }
1710             if (inactivate && ret >= 0) {
1711                 s->block_inactive = true;
1712             }
1713         }
1714         qemu_mutex_unlock_iothread();
1715 
1716         if (ret < 0) {
1717             goto fail;
1718         }
1719     } else if (s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
1720         trace_migration_completion_postcopy_end();
1721 
1722         qemu_savevm_state_complete_postcopy(s->to_dst_file);
1723         trace_migration_completion_postcopy_end_after_complete();
1724     }
1725 
1726     /*
1727      * If rp was opened we must clean up the thread before
1728      * cleaning everything else up (since if there are no failures
1729      * it will wait for the destination to send it's status in
1730      * a SHUT command).
1731      */
1732     if (s->rp_state.from_dst_file) {
1733         int rp_error;
1734         trace_migration_return_path_end_before();
1735         rp_error = await_return_path_close_on_source(s);
1736         trace_migration_return_path_end_after(rp_error);
1737         if (rp_error) {
1738             goto fail_invalidate;
1739         }
1740     }
1741 
1742     if (qemu_file_get_error(s->to_dst_file)) {
1743         trace_migration_completion_file_err();
1744         goto fail_invalidate;
1745     }
1746 
1747     if (!migrate_colo_enabled()) {
1748         migrate_set_state(&s->state, current_active_state,
1749                           MIGRATION_STATUS_COMPLETED);
1750     }
1751 
1752     return;
1753 
1754 fail_invalidate:
1755     /* If not doing postcopy, vm_start() will be called: let's regain
1756      * control on images.
1757      */
1758     if (s->state == MIGRATION_STATUS_ACTIVE) {
1759         Error *local_err = NULL;
1760 
1761         qemu_mutex_lock_iothread();
1762         bdrv_invalidate_cache_all(&local_err);
1763         if (local_err) {
1764             error_report_err(local_err);
1765         } else {
1766             s->block_inactive = false;
1767         }
1768         qemu_mutex_unlock_iothread();
1769     }
1770 
1771 fail:
1772     migrate_set_state(&s->state, current_active_state,
1773                       MIGRATION_STATUS_FAILED);
1774 }
1775 
1776 bool migrate_colo_enabled(void)
1777 {
1778     MigrationState *s = migrate_get_current();
1779     return s->enabled_capabilities[MIGRATION_CAPABILITY_X_COLO];
1780 }
1781 
1782 /*
1783  * Master migration thread on the source VM.
1784  * It drives the migration and pumps the data down the outgoing channel.
1785  */
1786 static void *migration_thread(void *opaque)
1787 {
1788     MigrationState *s = opaque;
1789     /* Used by the bandwidth calcs, updated later */
1790     int64_t initial_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1791     int64_t setup_start = qemu_clock_get_ms(QEMU_CLOCK_HOST);
1792     int64_t initial_bytes = 0;
1793     /*
1794      * The final stage happens when the remaining data is smaller than
1795      * this threshold; it's calculated from the requested downtime and
1796      * measured bandwidth
1797      */
1798     int64_t threshold_size = 0;
1799     int64_t start_time = initial_time;
1800     int64_t end_time;
1801     bool old_vm_running = false;
1802     bool entered_postcopy = false;
1803     /* The active state we expect to be in; ACTIVE or POSTCOPY_ACTIVE */
1804     enum MigrationStatus current_active_state = MIGRATION_STATUS_ACTIVE;
1805     bool enable_colo = migrate_colo_enabled();
1806 
1807     rcu_register_thread();
1808 
1809     qemu_savevm_state_header(s->to_dst_file);
1810 
1811     /*
1812      * If we opened the return path, we need to make sure dst has it
1813      * opened as well.
1814      */
1815     if (s->rp_state.from_dst_file) {
1816         /* Now tell the dest that it should open its end so it can reply */
1817         qemu_savevm_send_open_return_path(s->to_dst_file);
1818 
1819         /* And do a ping that will make stuff easier to debug */
1820         qemu_savevm_send_ping(s->to_dst_file, 1);
1821     }
1822 
1823     if (migrate_postcopy_ram()) {
1824         /*
1825          * Tell the destination that we *might* want to do postcopy later;
1826          * if the other end can't do postcopy it should fail now, nice and
1827          * early.
1828          */
1829         qemu_savevm_send_postcopy_advise(s->to_dst_file);
1830     }
1831 
1832     qemu_savevm_state_setup(s->to_dst_file);
1833 
1834     s->setup_time = qemu_clock_get_ms(QEMU_CLOCK_HOST) - setup_start;
1835     migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
1836                       MIGRATION_STATUS_ACTIVE);
1837 
1838     trace_migration_thread_setup_complete();
1839 
1840     while (s->state == MIGRATION_STATUS_ACTIVE ||
1841            s->state == MIGRATION_STATUS_POSTCOPY_ACTIVE) {
1842         int64_t current_time;
1843         uint64_t pending_size;
1844 
1845         if (!qemu_file_rate_limit(s->to_dst_file)) {
1846             uint64_t pend_post, pend_nonpost;
1847 
1848             qemu_savevm_state_pending(s->to_dst_file, threshold_size,
1849                                       &pend_nonpost, &pend_post);
1850             pending_size = pend_nonpost + pend_post;
1851             trace_migrate_pending(pending_size, threshold_size,
1852                                   pend_post, pend_nonpost);
1853             if (pending_size && pending_size >= threshold_size) {
1854                 /* Still a significant amount to transfer */
1855 
1856                 if (migrate_postcopy_ram() &&
1857                     s->state != MIGRATION_STATUS_POSTCOPY_ACTIVE &&
1858                     pend_nonpost <= threshold_size &&
1859                     atomic_read(&s->start_postcopy)) {
1860 
1861                     if (!postcopy_start(s, &old_vm_running)) {
1862                         current_active_state = MIGRATION_STATUS_POSTCOPY_ACTIVE;
1863                         entered_postcopy = true;
1864                     }
1865 
1866                     continue;
1867                 }
1868                 /* Just another iteration step */
1869                 qemu_savevm_state_iterate(s->to_dst_file, entered_postcopy);
1870             } else {
1871                 trace_migration_thread_low_pending(pending_size);
1872                 migration_completion(s, current_active_state,
1873                                      &old_vm_running, &start_time);
1874                 break;
1875             }
1876         }
1877 
1878         if (qemu_file_get_error(s->to_dst_file)) {
1879             migrate_set_state(&s->state, current_active_state,
1880                               MIGRATION_STATUS_FAILED);
1881             trace_migration_thread_file_err();
1882             break;
1883         }
1884         current_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1885         if (current_time >= initial_time + BUFFER_DELAY) {
1886             uint64_t transferred_bytes = qemu_ftell(s->to_dst_file) -
1887                                          initial_bytes;
1888             uint64_t time_spent = current_time - initial_time;
1889             double bandwidth = (double)transferred_bytes / time_spent;
1890             threshold_size = bandwidth * s->parameters.downtime_limit;
1891 
1892             s->mbps = (((double) transferred_bytes * 8.0) /
1893                     ((double) time_spent / 1000.0)) / 1000.0 / 1000.0;
1894 
1895             trace_migrate_transferred(transferred_bytes, time_spent,
1896                                       bandwidth, threshold_size);
1897             /* if we haven't sent anything, we don't want to recalculate
1898                10000 is a small enough number for our purposes */
1899             if (ram_counters.dirty_pages_rate && transferred_bytes > 10000) {
1900                 s->expected_downtime = ram_counters.dirty_pages_rate *
1901                     qemu_target_page_size() / bandwidth;
1902             }
1903 
1904             qemu_file_reset_rate_limit(s->to_dst_file);
1905             initial_time = current_time;
1906             initial_bytes = qemu_ftell(s->to_dst_file);
1907         }
1908         if (qemu_file_rate_limit(s->to_dst_file)) {
1909             /* usleep expects microseconds */
1910             g_usleep((initial_time + BUFFER_DELAY - current_time)*1000);
1911         }
1912     }
1913 
1914     trace_migration_thread_after_loop();
1915     /* If we enabled cpu throttling for auto-converge, turn it off. */
1916     cpu_throttle_stop();
1917     end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1918 
1919     qemu_mutex_lock_iothread();
1920     /*
1921      * The resource has been allocated by migration will be reused in COLO
1922      * process, so don't release them.
1923      */
1924     if (!enable_colo) {
1925         qemu_savevm_state_cleanup();
1926     }
1927     if (s->state == MIGRATION_STATUS_COMPLETED) {
1928         uint64_t transferred_bytes = qemu_ftell(s->to_dst_file);
1929         s->total_time = end_time - s->total_time;
1930         if (!entered_postcopy) {
1931             s->downtime = end_time - start_time;
1932         }
1933         if (s->total_time) {
1934             s->mbps = (((double) transferred_bytes * 8.0) /
1935                        ((double) s->total_time)) / 1000;
1936         }
1937         runstate_set(RUN_STATE_POSTMIGRATE);
1938     } else {
1939         if (s->state == MIGRATION_STATUS_ACTIVE && enable_colo) {
1940             migrate_start_colo_process(s);
1941             qemu_savevm_state_cleanup();
1942             /*
1943             * Fixme: we will run VM in COLO no matter its old running state.
1944             * After exited COLO, we will keep running.
1945             */
1946             old_vm_running = true;
1947         }
1948         if (old_vm_running && !entered_postcopy) {
1949             vm_start();
1950         } else {
1951             if (runstate_check(RUN_STATE_FINISH_MIGRATE)) {
1952                 runstate_set(RUN_STATE_POSTMIGRATE);
1953             }
1954         }
1955     }
1956     qemu_bh_schedule(s->cleanup_bh);
1957     qemu_mutex_unlock_iothread();
1958 
1959     rcu_unregister_thread();
1960     return NULL;
1961 }
1962 
1963 void migrate_fd_connect(MigrationState *s)
1964 {
1965     s->expected_downtime = s->parameters.downtime_limit;
1966     s->cleanup_bh = qemu_bh_new(migrate_fd_cleanup, s);
1967 
1968     qemu_file_set_blocking(s->to_dst_file, true);
1969     qemu_file_set_rate_limit(s->to_dst_file,
1970                              s->parameters.max_bandwidth / XFER_LIMIT_RATIO);
1971 
1972     /* Notify before starting migration thread */
1973     notifier_list_notify(&migration_state_notifiers, s);
1974 
1975     /*
1976      * Open the return path. For postcopy, it is used exclusively. For
1977      * precopy, only if user specified "return-path" capability would
1978      * QEMU uses the return path.
1979      */
1980     if (migrate_postcopy_ram() || migrate_use_return_path()) {
1981         if (open_return_path_on_source(s)) {
1982             error_report("Unable to open return-path for postcopy");
1983             migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,
1984                               MIGRATION_STATUS_FAILED);
1985             migrate_fd_cleanup(s);
1986             return;
1987         }
1988     }
1989 
1990     qemu_thread_create(&s->thread, "live_migration", migration_thread, s,
1991                        QEMU_THREAD_JOINABLE);
1992     s->migration_thread_running = true;
1993 }
1994 
1995 void migration_global_dump(Monitor *mon)
1996 {
1997     MigrationState *ms = migrate_get_current();
1998 
1999     monitor_printf(mon, "globals: store-global-state=%d, only_migratable=%d, "
2000                    "send-configuration=%d, send-section-footer=%d\n",
2001                    ms->store_global_state, ms->only_migratable,
2002                    ms->send_configuration, ms->send_section_footer);
2003 }
2004 
2005 static Property migration_properties[] = {
2006     DEFINE_PROP_BOOL("store-global-state", MigrationState,
2007                      store_global_state, true),
2008     DEFINE_PROP_BOOL("only-migratable", MigrationState, only_migratable, false),
2009     DEFINE_PROP_BOOL("send-configuration", MigrationState,
2010                      send_configuration, true),
2011     DEFINE_PROP_BOOL("send-section-footer", MigrationState,
2012                      send_section_footer, true),
2013     DEFINE_PROP_END_OF_LIST(),
2014 };
2015 
2016 static void migration_class_init(ObjectClass *klass, void *data)
2017 {
2018     DeviceClass *dc = DEVICE_CLASS(klass);
2019 
2020     dc->user_creatable = false;
2021     dc->props = migration_properties;
2022 }
2023 
2024 static void migration_instance_init(Object *obj)
2025 {
2026     MigrationState *ms = MIGRATION_OBJ(obj);
2027 
2028     ms->state = MIGRATION_STATUS_NONE;
2029     ms->xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE;
2030     ms->mbps = -1;
2031     ms->parameters = (MigrationParameters) {
2032         .compress_level = DEFAULT_MIGRATE_COMPRESS_LEVEL,
2033         .compress_threads = DEFAULT_MIGRATE_COMPRESS_THREAD_COUNT,
2034         .decompress_threads = DEFAULT_MIGRATE_DECOMPRESS_THREAD_COUNT,
2035         .cpu_throttle_initial = DEFAULT_MIGRATE_CPU_THROTTLE_INITIAL,
2036         .cpu_throttle_increment = DEFAULT_MIGRATE_CPU_THROTTLE_INCREMENT,
2037         .max_bandwidth = MAX_THROTTLE,
2038         .downtime_limit = DEFAULT_MIGRATE_SET_DOWNTIME,
2039         .x_checkpoint_delay = DEFAULT_MIGRATE_X_CHECKPOINT_DELAY,
2040     };
2041     ms->parameters.tls_creds = g_strdup("");
2042     ms->parameters.tls_hostname = g_strdup("");
2043 }
2044 
2045 static const TypeInfo migration_type = {
2046     .name = TYPE_MIGRATION,
2047     /*
2048      * NOTE: TYPE_MIGRATION is not really a device, as the object is
2049      * not created using qdev_create(), it is not attached to the qdev
2050      * device tree, and it is never realized.
2051      *
2052      * TODO: Make this TYPE_OBJECT once QOM provides something like
2053      * TYPE_DEVICE's "-global" properties.
2054      */
2055     .parent = TYPE_DEVICE,
2056     .class_init = migration_class_init,
2057     .class_size = sizeof(MigrationClass),
2058     .instance_size = sizeof(MigrationState),
2059     .instance_init = migration_instance_init,
2060 };
2061 
2062 static void register_migration_types(void)
2063 {
2064     type_register_static(&migration_type);
2065 }
2066 
2067 type_init(register_migration_types);
2068