xref: /openbmc/qemu/migration/ram.c (revision fe7f9b8e)
1 /*
2  * QEMU System Emulator
3  *
4  * Copyright (c) 2003-2008 Fabrice Bellard
5  * Copyright (c) 2011-2015 Red Hat Inc
6  *
7  * Authors:
8  *  Juan Quintela <quintela@redhat.com>
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining a copy
11  * of this software and associated documentation files (the "Software"), to deal
12  * in the Software without restriction, including without limitation the rights
13  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14  * copies of the Software, and to permit persons to whom the Software is
15  * furnished to do so, subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be included in
18  * all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26  * THE SOFTWARE.
27  */
28 
29 #include "qemu/osdep.h"
30 #include "cpu.h"
31 #include <zlib.h>
32 #include "qemu/cutils.h"
33 #include "qemu/bitops.h"
34 #include "qemu/bitmap.h"
35 #include "qemu/main-loop.h"
36 #include "xbzrle.h"
37 #include "ram.h"
38 #include "migration.h"
39 #include "socket.h"
40 #include "migration/register.h"
41 #include "migration/misc.h"
42 #include "qemu-file.h"
43 #include "postcopy-ram.h"
44 #include "migration/page_cache.h"
45 #include "qemu/error-report.h"
46 #include "qapi/error.h"
47 #include "qapi/qapi-events-migration.h"
48 #include "qapi/qmp/qerror.h"
49 #include "trace.h"
50 #include "exec/ram_addr.h"
51 #include "exec/target_page.h"
52 #include "qemu/rcu_queue.h"
53 #include "migration/colo.h"
54 #include "migration/block.h"
55 #include "sysemu/sysemu.h"
56 #include "qemu/uuid.h"
57 #include "savevm.h"
58 
59 /***********************************************************/
60 /* ram save/restore */
61 
62 /* RAM_SAVE_FLAG_ZERO used to be named RAM_SAVE_FLAG_COMPRESS, it
63  * worked for pages that where filled with the same char.  We switched
64  * it to only search for the zero value.  And to avoid confusion with
65  * RAM_SSAVE_FLAG_COMPRESS_PAGE just rename it.
66  */
67 
68 #define RAM_SAVE_FLAG_FULL     0x01 /* Obsolete, not used anymore */
69 #define RAM_SAVE_FLAG_ZERO     0x02
70 #define RAM_SAVE_FLAG_MEM_SIZE 0x04
71 #define RAM_SAVE_FLAG_PAGE     0x08
72 #define RAM_SAVE_FLAG_EOS      0x10
73 #define RAM_SAVE_FLAG_CONTINUE 0x20
74 #define RAM_SAVE_FLAG_XBZRLE   0x40
75 /* 0x80 is reserved in migration.h start with 0x100 next */
76 #define RAM_SAVE_FLAG_COMPRESS_PAGE    0x100
77 
78 static inline bool is_zero_range(uint8_t *p, uint64_t size)
79 {
80     return buffer_is_zero(p, size);
81 }
82 
83 XBZRLECacheStats xbzrle_counters;
84 
85 /* struct contains XBZRLE cache and a static page
86    used by the compression */
87 static struct {
88     /* buffer used for XBZRLE encoding */
89     uint8_t *encoded_buf;
90     /* buffer for storing page content */
91     uint8_t *current_buf;
92     /* Cache for XBZRLE, Protected by lock. */
93     PageCache *cache;
94     QemuMutex lock;
95     /* it will store a page full of zeros */
96     uint8_t *zero_target_page;
97     /* buffer used for XBZRLE decoding */
98     uint8_t *decoded_buf;
99 } XBZRLE;
100 
101 static void XBZRLE_cache_lock(void)
102 {
103     if (migrate_use_xbzrle())
104         qemu_mutex_lock(&XBZRLE.lock);
105 }
106 
107 static void XBZRLE_cache_unlock(void)
108 {
109     if (migrate_use_xbzrle())
110         qemu_mutex_unlock(&XBZRLE.lock);
111 }
112 
113 /**
114  * xbzrle_cache_resize: resize the xbzrle cache
115  *
116  * This function is called from qmp_migrate_set_cache_size in main
117  * thread, possibly while a migration is in progress.  A running
118  * migration may be using the cache and might finish during this call,
119  * hence changes to the cache are protected by XBZRLE.lock().
120  *
121  * Returns 0 for success or -1 for error
122  *
123  * @new_size: new cache size
124  * @errp: set *errp if the check failed, with reason
125  */
126 int xbzrle_cache_resize(int64_t new_size, Error **errp)
127 {
128     PageCache *new_cache;
129     int64_t ret = 0;
130 
131     /* Check for truncation */
132     if (new_size != (size_t)new_size) {
133         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
134                    "exceeding address space");
135         return -1;
136     }
137 
138     if (new_size == migrate_xbzrle_cache_size()) {
139         /* nothing to do */
140         return 0;
141     }
142 
143     XBZRLE_cache_lock();
144 
145     if (XBZRLE.cache != NULL) {
146         new_cache = cache_init(new_size, TARGET_PAGE_SIZE, errp);
147         if (!new_cache) {
148             ret = -1;
149             goto out;
150         }
151 
152         cache_fini(XBZRLE.cache);
153         XBZRLE.cache = new_cache;
154     }
155 out:
156     XBZRLE_cache_unlock();
157     return ret;
158 }
159 
160 static void ramblock_recv_map_init(void)
161 {
162     RAMBlock *rb;
163 
164     RAMBLOCK_FOREACH(rb) {
165         assert(!rb->receivedmap);
166         rb->receivedmap = bitmap_new(rb->max_length >> qemu_target_page_bits());
167     }
168 }
169 
170 int ramblock_recv_bitmap_test(RAMBlock *rb, void *host_addr)
171 {
172     return test_bit(ramblock_recv_bitmap_offset(host_addr, rb),
173                     rb->receivedmap);
174 }
175 
176 bool ramblock_recv_bitmap_test_byte_offset(RAMBlock *rb, uint64_t byte_offset)
177 {
178     return test_bit(byte_offset >> TARGET_PAGE_BITS, rb->receivedmap);
179 }
180 
181 void ramblock_recv_bitmap_set(RAMBlock *rb, void *host_addr)
182 {
183     set_bit_atomic(ramblock_recv_bitmap_offset(host_addr, rb), rb->receivedmap);
184 }
185 
186 void ramblock_recv_bitmap_set_range(RAMBlock *rb, void *host_addr,
187                                     size_t nr)
188 {
189     bitmap_set_atomic(rb->receivedmap,
190                       ramblock_recv_bitmap_offset(host_addr, rb),
191                       nr);
192 }
193 
194 #define  RAMBLOCK_RECV_BITMAP_ENDING  (0x0123456789abcdefULL)
195 
196 /*
197  * Format: bitmap_size (8 bytes) + whole_bitmap (N bytes).
198  *
199  * Returns >0 if success with sent bytes, or <0 if error.
200  */
201 int64_t ramblock_recv_bitmap_send(QEMUFile *file,
202                                   const char *block_name)
203 {
204     RAMBlock *block = qemu_ram_block_by_name(block_name);
205     unsigned long *le_bitmap, nbits;
206     uint64_t size;
207 
208     if (!block) {
209         error_report("%s: invalid block name: %s", __func__, block_name);
210         return -1;
211     }
212 
213     nbits = block->used_length >> TARGET_PAGE_BITS;
214 
215     /*
216      * Make sure the tmp bitmap buffer is big enough, e.g., on 32bit
217      * machines we may need 4 more bytes for padding (see below
218      * comment). So extend it a bit before hand.
219      */
220     le_bitmap = bitmap_new(nbits + BITS_PER_LONG);
221 
222     /*
223      * Always use little endian when sending the bitmap. This is
224      * required that when source and destination VMs are not using the
225      * same endianess. (Note: big endian won't work.)
226      */
227     bitmap_to_le(le_bitmap, block->receivedmap, nbits);
228 
229     /* Size of the bitmap, in bytes */
230     size = nbits / 8;
231 
232     /*
233      * size is always aligned to 8 bytes for 64bit machines, but it
234      * may not be true for 32bit machines. We need this padding to
235      * make sure the migration can survive even between 32bit and
236      * 64bit machines.
237      */
238     size = ROUND_UP(size, 8);
239 
240     qemu_put_be64(file, size);
241     qemu_put_buffer(file, (const uint8_t *)le_bitmap, size);
242     /*
243      * Mark as an end, in case the middle part is screwed up due to
244      * some "misterious" reason.
245      */
246     qemu_put_be64(file, RAMBLOCK_RECV_BITMAP_ENDING);
247     qemu_fflush(file);
248 
249     free(le_bitmap);
250 
251     if (qemu_file_get_error(file)) {
252         return qemu_file_get_error(file);
253     }
254 
255     return size + sizeof(size);
256 }
257 
258 /*
259  * An outstanding page request, on the source, having been received
260  * and queued
261  */
262 struct RAMSrcPageRequest {
263     RAMBlock *rb;
264     hwaddr    offset;
265     hwaddr    len;
266 
267     QSIMPLEQ_ENTRY(RAMSrcPageRequest) next_req;
268 };
269 
270 /* State of RAM for migration */
271 struct RAMState {
272     /* QEMUFile used for this migration */
273     QEMUFile *f;
274     /* Last block that we have visited searching for dirty pages */
275     RAMBlock *last_seen_block;
276     /* Last block from where we have sent data */
277     RAMBlock *last_sent_block;
278     /* Last dirty target page we have sent */
279     ram_addr_t last_page;
280     /* last ram version we have seen */
281     uint32_t last_version;
282     /* We are in the first round */
283     bool ram_bulk_stage;
284     /* How many times we have dirty too many pages */
285     int dirty_rate_high_cnt;
286     /* these variables are used for bitmap sync */
287     /* last time we did a full bitmap_sync */
288     int64_t time_last_bitmap_sync;
289     /* bytes transferred at start_time */
290     uint64_t bytes_xfer_prev;
291     /* number of dirty pages since start_time */
292     uint64_t num_dirty_pages_period;
293     /* xbzrle misses since the beginning of the period */
294     uint64_t xbzrle_cache_miss_prev;
295     /* number of iterations at the beginning of period */
296     uint64_t iterations_prev;
297     /* Iterations since start */
298     uint64_t iterations;
299     /* number of dirty bits in the bitmap */
300     uint64_t migration_dirty_pages;
301     /* protects modification of the bitmap */
302     QemuMutex bitmap_mutex;
303     /* The RAMBlock used in the last src_page_requests */
304     RAMBlock *last_req_rb;
305     /* Queue of outstanding page requests from the destination */
306     QemuMutex src_page_req_mutex;
307     QSIMPLEQ_HEAD(src_page_requests, RAMSrcPageRequest) src_page_requests;
308 };
309 typedef struct RAMState RAMState;
310 
311 static RAMState *ram_state;
312 
313 uint64_t ram_bytes_remaining(void)
314 {
315     return ram_state ? (ram_state->migration_dirty_pages * TARGET_PAGE_SIZE) :
316                        0;
317 }
318 
319 MigrationStats ram_counters;
320 
321 /* used by the search for pages to send */
322 struct PageSearchStatus {
323     /* Current block being searched */
324     RAMBlock    *block;
325     /* Current page to search from */
326     unsigned long page;
327     /* Set once we wrap around */
328     bool         complete_round;
329 };
330 typedef struct PageSearchStatus PageSearchStatus;
331 
332 struct CompressParam {
333     bool done;
334     bool quit;
335     QEMUFile *file;
336     QemuMutex mutex;
337     QemuCond cond;
338     RAMBlock *block;
339     ram_addr_t offset;
340 
341     /* internally used fields */
342     z_stream stream;
343     uint8_t *originbuf;
344 };
345 typedef struct CompressParam CompressParam;
346 
347 struct DecompressParam {
348     bool done;
349     bool quit;
350     QemuMutex mutex;
351     QemuCond cond;
352     void *des;
353     uint8_t *compbuf;
354     int len;
355     z_stream stream;
356 };
357 typedef struct DecompressParam DecompressParam;
358 
359 static CompressParam *comp_param;
360 static QemuThread *compress_threads;
361 /* comp_done_cond is used to wake up the migration thread when
362  * one of the compression threads has finished the compression.
363  * comp_done_lock is used to co-work with comp_done_cond.
364  */
365 static QemuMutex comp_done_lock;
366 static QemuCond comp_done_cond;
367 /* The empty QEMUFileOps will be used by file in CompressParam */
368 static const QEMUFileOps empty_ops = { };
369 
370 static QEMUFile *decomp_file;
371 static DecompressParam *decomp_param;
372 static QemuThread *decompress_threads;
373 static QemuMutex decomp_done_lock;
374 static QemuCond decomp_done_cond;
375 
376 static int do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block,
377                                 ram_addr_t offset, uint8_t *source_buf);
378 
379 static void *do_data_compress(void *opaque)
380 {
381     CompressParam *param = opaque;
382     RAMBlock *block;
383     ram_addr_t offset;
384 
385     qemu_mutex_lock(&param->mutex);
386     while (!param->quit) {
387         if (param->block) {
388             block = param->block;
389             offset = param->offset;
390             param->block = NULL;
391             qemu_mutex_unlock(&param->mutex);
392 
393             do_compress_ram_page(param->file, &param->stream, block, offset,
394                                  param->originbuf);
395 
396             qemu_mutex_lock(&comp_done_lock);
397             param->done = true;
398             qemu_cond_signal(&comp_done_cond);
399             qemu_mutex_unlock(&comp_done_lock);
400 
401             qemu_mutex_lock(&param->mutex);
402         } else {
403             qemu_cond_wait(&param->cond, &param->mutex);
404         }
405     }
406     qemu_mutex_unlock(&param->mutex);
407 
408     return NULL;
409 }
410 
411 static inline void terminate_compression_threads(void)
412 {
413     int idx, thread_count;
414 
415     thread_count = migrate_compress_threads();
416 
417     for (idx = 0; idx < thread_count; idx++) {
418         qemu_mutex_lock(&comp_param[idx].mutex);
419         comp_param[idx].quit = true;
420         qemu_cond_signal(&comp_param[idx].cond);
421         qemu_mutex_unlock(&comp_param[idx].mutex);
422     }
423 }
424 
425 static void compress_threads_save_cleanup(void)
426 {
427     int i, thread_count;
428 
429     if (!migrate_use_compression()) {
430         return;
431     }
432     terminate_compression_threads();
433     thread_count = migrate_compress_threads();
434     for (i = 0; i < thread_count; i++) {
435         /*
436          * we use it as a indicator which shows if the thread is
437          * properly init'd or not
438          */
439         if (!comp_param[i].file) {
440             break;
441         }
442         qemu_thread_join(compress_threads + i);
443         qemu_mutex_destroy(&comp_param[i].mutex);
444         qemu_cond_destroy(&comp_param[i].cond);
445         deflateEnd(&comp_param[i].stream);
446         g_free(comp_param[i].originbuf);
447         qemu_fclose(comp_param[i].file);
448         comp_param[i].file = NULL;
449     }
450     qemu_mutex_destroy(&comp_done_lock);
451     qemu_cond_destroy(&comp_done_cond);
452     g_free(compress_threads);
453     g_free(comp_param);
454     compress_threads = NULL;
455     comp_param = NULL;
456 }
457 
458 static int compress_threads_save_setup(void)
459 {
460     int i, thread_count;
461 
462     if (!migrate_use_compression()) {
463         return 0;
464     }
465     thread_count = migrate_compress_threads();
466     compress_threads = g_new0(QemuThread, thread_count);
467     comp_param = g_new0(CompressParam, thread_count);
468     qemu_cond_init(&comp_done_cond);
469     qemu_mutex_init(&comp_done_lock);
470     for (i = 0; i < thread_count; i++) {
471         comp_param[i].originbuf = g_try_malloc(TARGET_PAGE_SIZE);
472         if (!comp_param[i].originbuf) {
473             goto exit;
474         }
475 
476         if (deflateInit(&comp_param[i].stream,
477                         migrate_compress_level()) != Z_OK) {
478             g_free(comp_param[i].originbuf);
479             goto exit;
480         }
481 
482         /* comp_param[i].file is just used as a dummy buffer to save data,
483          * set its ops to empty.
484          */
485         comp_param[i].file = qemu_fopen_ops(NULL, &empty_ops);
486         comp_param[i].done = true;
487         comp_param[i].quit = false;
488         qemu_mutex_init(&comp_param[i].mutex);
489         qemu_cond_init(&comp_param[i].cond);
490         qemu_thread_create(compress_threads + i, "compress",
491                            do_data_compress, comp_param + i,
492                            QEMU_THREAD_JOINABLE);
493     }
494     return 0;
495 
496 exit:
497     compress_threads_save_cleanup();
498     return -1;
499 }
500 
501 /* Multiple fd's */
502 
503 #define MULTIFD_MAGIC 0x11223344U
504 #define MULTIFD_VERSION 1
505 
506 typedef struct {
507     uint32_t magic;
508     uint32_t version;
509     unsigned char uuid[16]; /* QemuUUID */
510     uint8_t id;
511 } __attribute__((packed)) MultiFDInit_t;
512 
513 typedef struct {
514     /* this fields are not changed once the thread is created */
515     /* channel number */
516     uint8_t id;
517     /* channel thread name */
518     char *name;
519     /* channel thread id */
520     QemuThread thread;
521     /* communication channel */
522     QIOChannel *c;
523     /* sem where to wait for more work */
524     QemuSemaphore sem;
525     /* this mutex protects the following parameters */
526     QemuMutex mutex;
527     /* is this channel thread running */
528     bool running;
529     /* should this thread finish */
530     bool quit;
531 }  MultiFDSendParams;
532 
533 typedef struct {
534     /* this fields are not changed once the thread is created */
535     /* channel number */
536     uint8_t id;
537     /* channel thread name */
538     char *name;
539     /* channel thread id */
540     QemuThread thread;
541     /* communication channel */
542     QIOChannel *c;
543     /* sem where to wait for more work */
544     QemuSemaphore sem;
545     /* this mutex protects the following parameters */
546     QemuMutex mutex;
547     /* is this channel thread running */
548     bool running;
549     /* should this thread finish */
550     bool quit;
551 } MultiFDRecvParams;
552 
553 static int multifd_send_initial_packet(MultiFDSendParams *p, Error **errp)
554 {
555     MultiFDInit_t msg;
556     int ret;
557 
558     msg.magic = cpu_to_be32(MULTIFD_MAGIC);
559     msg.version = cpu_to_be32(MULTIFD_VERSION);
560     msg.id = p->id;
561     memcpy(msg.uuid, &qemu_uuid.data, sizeof(msg.uuid));
562 
563     ret = qio_channel_write_all(p->c, (char *)&msg, sizeof(msg), errp);
564     if (ret != 0) {
565         return -1;
566     }
567     return 0;
568 }
569 
570 static int multifd_recv_initial_packet(QIOChannel *c, Error **errp)
571 {
572     MultiFDInit_t msg;
573     int ret;
574 
575     ret = qio_channel_read_all(c, (char *)&msg, sizeof(msg), errp);
576     if (ret != 0) {
577         return -1;
578     }
579 
580     be32_to_cpus(&msg.magic);
581     be32_to_cpus(&msg.version);
582 
583     if (msg.magic != MULTIFD_MAGIC) {
584         error_setg(errp, "multifd: received packet magic %x "
585                    "expected %x", msg.magic, MULTIFD_MAGIC);
586         return -1;
587     }
588 
589     if (msg.version != MULTIFD_VERSION) {
590         error_setg(errp, "multifd: received packet version %d "
591                    "expected %d", msg.version, MULTIFD_VERSION);
592         return -1;
593     }
594 
595     if (memcmp(msg.uuid, &qemu_uuid, sizeof(qemu_uuid))) {
596         char *uuid = qemu_uuid_unparse_strdup(&qemu_uuid);
597         char *msg_uuid = qemu_uuid_unparse_strdup((const QemuUUID *)msg.uuid);
598 
599         error_setg(errp, "multifd: received uuid '%s' and expected "
600                    "uuid '%s' for channel %hhd", msg_uuid, uuid, msg.id);
601         g_free(uuid);
602         g_free(msg_uuid);
603         return -1;
604     }
605 
606     if (msg.id > migrate_multifd_channels()) {
607         error_setg(errp, "multifd: received channel version %d "
608                    "expected %d", msg.version, MULTIFD_VERSION);
609         return -1;
610     }
611 
612     return msg.id;
613 }
614 
615 struct {
616     MultiFDSendParams *params;
617     /* number of created threads */
618     int count;
619 } *multifd_send_state;
620 
621 static void multifd_send_terminate_threads(Error *err)
622 {
623     int i;
624 
625     if (err) {
626         MigrationState *s = migrate_get_current();
627         migrate_set_error(s, err);
628         if (s->state == MIGRATION_STATUS_SETUP ||
629             s->state == MIGRATION_STATUS_PRE_SWITCHOVER ||
630             s->state == MIGRATION_STATUS_DEVICE ||
631             s->state == MIGRATION_STATUS_ACTIVE) {
632             migrate_set_state(&s->state, s->state,
633                               MIGRATION_STATUS_FAILED);
634         }
635     }
636 
637     for (i = 0; i < migrate_multifd_channels(); i++) {
638         MultiFDSendParams *p = &multifd_send_state->params[i];
639 
640         qemu_mutex_lock(&p->mutex);
641         p->quit = true;
642         qemu_sem_post(&p->sem);
643         qemu_mutex_unlock(&p->mutex);
644     }
645 }
646 
647 int multifd_save_cleanup(Error **errp)
648 {
649     int i;
650     int ret = 0;
651 
652     if (!migrate_use_multifd()) {
653         return 0;
654     }
655     multifd_send_terminate_threads(NULL);
656     for (i = 0; i < migrate_multifd_channels(); i++) {
657         MultiFDSendParams *p = &multifd_send_state->params[i];
658 
659         if (p->running) {
660             qemu_thread_join(&p->thread);
661         }
662         socket_send_channel_destroy(p->c);
663         p->c = NULL;
664         qemu_mutex_destroy(&p->mutex);
665         qemu_sem_destroy(&p->sem);
666         g_free(p->name);
667         p->name = NULL;
668     }
669     g_free(multifd_send_state->params);
670     multifd_send_state->params = NULL;
671     g_free(multifd_send_state);
672     multifd_send_state = NULL;
673     return ret;
674 }
675 
676 static void *multifd_send_thread(void *opaque)
677 {
678     MultiFDSendParams *p = opaque;
679     Error *local_err = NULL;
680 
681     if (multifd_send_initial_packet(p, &local_err) < 0) {
682         goto out;
683     }
684 
685     while (true) {
686         qemu_mutex_lock(&p->mutex);
687         if (p->quit) {
688             qemu_mutex_unlock(&p->mutex);
689             break;
690         }
691         qemu_mutex_unlock(&p->mutex);
692         qemu_sem_wait(&p->sem);
693     }
694 
695 out:
696     if (local_err) {
697         multifd_send_terminate_threads(local_err);
698     }
699 
700     qemu_mutex_lock(&p->mutex);
701     p->running = false;
702     qemu_mutex_unlock(&p->mutex);
703 
704     return NULL;
705 }
706 
707 static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
708 {
709     MultiFDSendParams *p = opaque;
710     QIOChannel *sioc = QIO_CHANNEL(qio_task_get_source(task));
711     Error *local_err = NULL;
712 
713     if (qio_task_propagate_error(task, &local_err)) {
714         if (multifd_save_cleanup(&local_err) != 0) {
715             migrate_set_error(migrate_get_current(), local_err);
716         }
717     } else {
718         p->c = QIO_CHANNEL(sioc);
719         qio_channel_set_delay(p->c, false);
720         p->running = true;
721         qemu_thread_create(&p->thread, p->name, multifd_send_thread, p,
722                            QEMU_THREAD_JOINABLE);
723 
724         atomic_inc(&multifd_send_state->count);
725     }
726 }
727 
728 int multifd_save_setup(void)
729 {
730     int thread_count;
731     uint8_t i;
732 
733     if (!migrate_use_multifd()) {
734         return 0;
735     }
736     thread_count = migrate_multifd_channels();
737     multifd_send_state = g_malloc0(sizeof(*multifd_send_state));
738     multifd_send_state->params = g_new0(MultiFDSendParams, thread_count);
739     atomic_set(&multifd_send_state->count, 0);
740     for (i = 0; i < thread_count; i++) {
741         MultiFDSendParams *p = &multifd_send_state->params[i];
742 
743         qemu_mutex_init(&p->mutex);
744         qemu_sem_init(&p->sem, 0);
745         p->quit = false;
746         p->id = i;
747         p->name = g_strdup_printf("multifdsend_%d", i);
748         socket_send_channel_create(multifd_new_send_channel_async, p);
749     }
750     return 0;
751 }
752 
753 struct {
754     MultiFDRecvParams *params;
755     /* number of created threads */
756     int count;
757 } *multifd_recv_state;
758 
759 static void multifd_recv_terminate_threads(Error *err)
760 {
761     int i;
762 
763     if (err) {
764         MigrationState *s = migrate_get_current();
765         migrate_set_error(s, err);
766         if (s->state == MIGRATION_STATUS_SETUP ||
767             s->state == MIGRATION_STATUS_ACTIVE) {
768             migrate_set_state(&s->state, s->state,
769                               MIGRATION_STATUS_FAILED);
770         }
771     }
772 
773     for (i = 0; i < migrate_multifd_channels(); i++) {
774         MultiFDRecvParams *p = &multifd_recv_state->params[i];
775 
776         qemu_mutex_lock(&p->mutex);
777         p->quit = true;
778         qemu_sem_post(&p->sem);
779         qemu_mutex_unlock(&p->mutex);
780     }
781 }
782 
783 int multifd_load_cleanup(Error **errp)
784 {
785     int i;
786     int ret = 0;
787 
788     if (!migrate_use_multifd()) {
789         return 0;
790     }
791     multifd_recv_terminate_threads(NULL);
792     for (i = 0; i < migrate_multifd_channels(); i++) {
793         MultiFDRecvParams *p = &multifd_recv_state->params[i];
794 
795         if (p->running) {
796             qemu_thread_join(&p->thread);
797         }
798         object_unref(OBJECT(p->c));
799         p->c = NULL;
800         qemu_mutex_destroy(&p->mutex);
801         qemu_sem_destroy(&p->sem);
802         g_free(p->name);
803         p->name = NULL;
804     }
805     g_free(multifd_recv_state->params);
806     multifd_recv_state->params = NULL;
807     g_free(multifd_recv_state);
808     multifd_recv_state = NULL;
809 
810     return ret;
811 }
812 
813 static void *multifd_recv_thread(void *opaque)
814 {
815     MultiFDRecvParams *p = opaque;
816 
817     while (true) {
818         qemu_mutex_lock(&p->mutex);
819         if (p->quit) {
820             qemu_mutex_unlock(&p->mutex);
821             break;
822         }
823         qemu_mutex_unlock(&p->mutex);
824         qemu_sem_wait(&p->sem);
825     }
826 
827     qemu_mutex_lock(&p->mutex);
828     p->running = false;
829     qemu_mutex_unlock(&p->mutex);
830 
831     return NULL;
832 }
833 
834 int multifd_load_setup(void)
835 {
836     int thread_count;
837     uint8_t i;
838 
839     if (!migrate_use_multifd()) {
840         return 0;
841     }
842     thread_count = migrate_multifd_channels();
843     multifd_recv_state = g_malloc0(sizeof(*multifd_recv_state));
844     multifd_recv_state->params = g_new0(MultiFDRecvParams, thread_count);
845     atomic_set(&multifd_recv_state->count, 0);
846     for (i = 0; i < thread_count; i++) {
847         MultiFDRecvParams *p = &multifd_recv_state->params[i];
848 
849         qemu_mutex_init(&p->mutex);
850         qemu_sem_init(&p->sem, 0);
851         p->quit = false;
852         p->id = i;
853         p->name = g_strdup_printf("multifdrecv_%d", i);
854     }
855     return 0;
856 }
857 
858 bool multifd_recv_all_channels_created(void)
859 {
860     int thread_count = migrate_multifd_channels();
861 
862     if (!migrate_use_multifd()) {
863         return true;
864     }
865 
866     return thread_count == atomic_read(&multifd_recv_state->count);
867 }
868 
869 void multifd_recv_new_channel(QIOChannel *ioc)
870 {
871     MultiFDRecvParams *p;
872     Error *local_err = NULL;
873     int id;
874 
875     id = multifd_recv_initial_packet(ioc, &local_err);
876     if (id < 0) {
877         multifd_recv_terminate_threads(local_err);
878         return;
879     }
880 
881     p = &multifd_recv_state->params[id];
882     if (p->c != NULL) {
883         error_setg(&local_err, "multifd: received id '%d' already setup'",
884                    id);
885         multifd_recv_terminate_threads(local_err);
886         return;
887     }
888     p->c = ioc;
889     object_ref(OBJECT(ioc));
890 
891     p->running = true;
892     qemu_thread_create(&p->thread, p->name, multifd_recv_thread, p,
893                        QEMU_THREAD_JOINABLE);
894     atomic_inc(&multifd_recv_state->count);
895     if (multifd_recv_state->count == migrate_multifd_channels()) {
896         migration_incoming_process();
897     }
898 }
899 
900 /**
901  * save_page_header: write page header to wire
902  *
903  * If this is the 1st block, it also writes the block identification
904  *
905  * Returns the number of bytes written
906  *
907  * @f: QEMUFile where to send the data
908  * @block: block that contains the page we want to send
909  * @offset: offset inside the block for the page
910  *          in the lower bits, it contains flags
911  */
912 static size_t save_page_header(RAMState *rs, QEMUFile *f,  RAMBlock *block,
913                                ram_addr_t offset)
914 {
915     size_t size, len;
916 
917     if (block == rs->last_sent_block) {
918         offset |= RAM_SAVE_FLAG_CONTINUE;
919     }
920     qemu_put_be64(f, offset);
921     size = 8;
922 
923     if (!(offset & RAM_SAVE_FLAG_CONTINUE)) {
924         len = strlen(block->idstr);
925         qemu_put_byte(f, len);
926         qemu_put_buffer(f, (uint8_t *)block->idstr, len);
927         size += 1 + len;
928         rs->last_sent_block = block;
929     }
930     return size;
931 }
932 
933 /**
934  * mig_throttle_guest_down: throotle down the guest
935  *
936  * Reduce amount of guest cpu execution to hopefully slow down memory
937  * writes. If guest dirty memory rate is reduced below the rate at
938  * which we can transfer pages to the destination then we should be
939  * able to complete migration. Some workloads dirty memory way too
940  * fast and will not effectively converge, even with auto-converge.
941  */
942 static void mig_throttle_guest_down(void)
943 {
944     MigrationState *s = migrate_get_current();
945     uint64_t pct_initial = s->parameters.cpu_throttle_initial;
946     uint64_t pct_icrement = s->parameters.cpu_throttle_increment;
947 
948     /* We have not started throttling yet. Let's start it. */
949     if (!cpu_throttle_active()) {
950         cpu_throttle_set(pct_initial);
951     } else {
952         /* Throttling already on, just increase the rate */
953         cpu_throttle_set(cpu_throttle_get_percentage() + pct_icrement);
954     }
955 }
956 
957 /**
958  * xbzrle_cache_zero_page: insert a zero page in the XBZRLE cache
959  *
960  * @rs: current RAM state
961  * @current_addr: address for the zero page
962  *
963  * Update the xbzrle cache to reflect a page that's been sent as all 0.
964  * The important thing is that a stale (not-yet-0'd) page be replaced
965  * by the new data.
966  * As a bonus, if the page wasn't in the cache it gets added so that
967  * when a small write is made into the 0'd page it gets XBZRLE sent.
968  */
969 static void xbzrle_cache_zero_page(RAMState *rs, ram_addr_t current_addr)
970 {
971     if (rs->ram_bulk_stage || !migrate_use_xbzrle()) {
972         return;
973     }
974 
975     /* We don't care if this fails to allocate a new cache page
976      * as long as it updated an old one */
977     cache_insert(XBZRLE.cache, current_addr, XBZRLE.zero_target_page,
978                  ram_counters.dirty_sync_count);
979 }
980 
981 #define ENCODING_FLAG_XBZRLE 0x1
982 
983 /**
984  * save_xbzrle_page: compress and send current page
985  *
986  * Returns: 1 means that we wrote the page
987  *          0 means that page is identical to the one already sent
988  *          -1 means that xbzrle would be longer than normal
989  *
990  * @rs: current RAM state
991  * @current_data: pointer to the address of the page contents
992  * @current_addr: addr of the page
993  * @block: block that contains the page we want to send
994  * @offset: offset inside the block for the page
995  * @last_stage: if we are at the completion stage
996  */
997 static int save_xbzrle_page(RAMState *rs, uint8_t **current_data,
998                             ram_addr_t current_addr, RAMBlock *block,
999                             ram_addr_t offset, bool last_stage)
1000 {
1001     int encoded_len = 0, bytes_xbzrle;
1002     uint8_t *prev_cached_page;
1003 
1004     if (!cache_is_cached(XBZRLE.cache, current_addr,
1005                          ram_counters.dirty_sync_count)) {
1006         xbzrle_counters.cache_miss++;
1007         if (!last_stage) {
1008             if (cache_insert(XBZRLE.cache, current_addr, *current_data,
1009                              ram_counters.dirty_sync_count) == -1) {
1010                 return -1;
1011             } else {
1012                 /* update *current_data when the page has been
1013                    inserted into cache */
1014                 *current_data = get_cached_data(XBZRLE.cache, current_addr);
1015             }
1016         }
1017         return -1;
1018     }
1019 
1020     prev_cached_page = get_cached_data(XBZRLE.cache, current_addr);
1021 
1022     /* save current buffer into memory */
1023     memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE);
1024 
1025     /* XBZRLE encoding (if there is no overflow) */
1026     encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf,
1027                                        TARGET_PAGE_SIZE, XBZRLE.encoded_buf,
1028                                        TARGET_PAGE_SIZE);
1029     if (encoded_len == 0) {
1030         trace_save_xbzrle_page_skipping();
1031         return 0;
1032     } else if (encoded_len == -1) {
1033         trace_save_xbzrle_page_overflow();
1034         xbzrle_counters.overflow++;
1035         /* update data in the cache */
1036         if (!last_stage) {
1037             memcpy(prev_cached_page, *current_data, TARGET_PAGE_SIZE);
1038             *current_data = prev_cached_page;
1039         }
1040         return -1;
1041     }
1042 
1043     /* we need to update the data in the cache, in order to get the same data */
1044     if (!last_stage) {
1045         memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
1046     }
1047 
1048     /* Send XBZRLE based compressed page */
1049     bytes_xbzrle = save_page_header(rs, rs->f, block,
1050                                     offset | RAM_SAVE_FLAG_XBZRLE);
1051     qemu_put_byte(rs->f, ENCODING_FLAG_XBZRLE);
1052     qemu_put_be16(rs->f, encoded_len);
1053     qemu_put_buffer(rs->f, XBZRLE.encoded_buf, encoded_len);
1054     bytes_xbzrle += encoded_len + 1 + 2;
1055     xbzrle_counters.pages++;
1056     xbzrle_counters.bytes += bytes_xbzrle;
1057     ram_counters.transferred += bytes_xbzrle;
1058 
1059     return 1;
1060 }
1061 
1062 /**
1063  * migration_bitmap_find_dirty: find the next dirty page from start
1064  *
1065  * Called with rcu_read_lock() to protect migration_bitmap
1066  *
1067  * Returns the byte offset within memory region of the start of a dirty page
1068  *
1069  * @rs: current RAM state
1070  * @rb: RAMBlock where to search for dirty pages
1071  * @start: page where we start the search
1072  */
1073 static inline
1074 unsigned long migration_bitmap_find_dirty(RAMState *rs, RAMBlock *rb,
1075                                           unsigned long start)
1076 {
1077     unsigned long size = rb->used_length >> TARGET_PAGE_BITS;
1078     unsigned long *bitmap = rb->bmap;
1079     unsigned long next;
1080 
1081     if (rs->ram_bulk_stage && start > 0) {
1082         next = start + 1;
1083     } else {
1084         next = find_next_bit(bitmap, size, start);
1085     }
1086 
1087     return next;
1088 }
1089 
1090 static inline bool migration_bitmap_clear_dirty(RAMState *rs,
1091                                                 RAMBlock *rb,
1092                                                 unsigned long page)
1093 {
1094     bool ret;
1095 
1096     ret = test_and_clear_bit(page, rb->bmap);
1097 
1098     if (ret) {
1099         rs->migration_dirty_pages--;
1100     }
1101     return ret;
1102 }
1103 
1104 static void migration_bitmap_sync_range(RAMState *rs, RAMBlock *rb,
1105                                         ram_addr_t start, ram_addr_t length)
1106 {
1107     rs->migration_dirty_pages +=
1108         cpu_physical_memory_sync_dirty_bitmap(rb, start, length,
1109                                               &rs->num_dirty_pages_period);
1110 }
1111 
1112 /**
1113  * ram_pagesize_summary: calculate all the pagesizes of a VM
1114  *
1115  * Returns a summary bitmap of the page sizes of all RAMBlocks
1116  *
1117  * For VMs with just normal pages this is equivalent to the host page
1118  * size. If it's got some huge pages then it's the OR of all the
1119  * different page sizes.
1120  */
1121 uint64_t ram_pagesize_summary(void)
1122 {
1123     RAMBlock *block;
1124     uint64_t summary = 0;
1125 
1126     RAMBLOCK_FOREACH(block) {
1127         summary |= block->page_size;
1128     }
1129 
1130     return summary;
1131 }
1132 
1133 static void migration_bitmap_sync(RAMState *rs)
1134 {
1135     RAMBlock *block;
1136     int64_t end_time;
1137     uint64_t bytes_xfer_now;
1138 
1139     ram_counters.dirty_sync_count++;
1140 
1141     if (!rs->time_last_bitmap_sync) {
1142         rs->time_last_bitmap_sync = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1143     }
1144 
1145     trace_migration_bitmap_sync_start();
1146     memory_global_dirty_log_sync();
1147 
1148     qemu_mutex_lock(&rs->bitmap_mutex);
1149     rcu_read_lock();
1150     RAMBLOCK_FOREACH(block) {
1151         migration_bitmap_sync_range(rs, block, 0, block->used_length);
1152     }
1153     rcu_read_unlock();
1154     qemu_mutex_unlock(&rs->bitmap_mutex);
1155 
1156     trace_migration_bitmap_sync_end(rs->num_dirty_pages_period);
1157 
1158     end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1159 
1160     /* more than 1 second = 1000 millisecons */
1161     if (end_time > rs->time_last_bitmap_sync + 1000) {
1162         /* calculate period counters */
1163         ram_counters.dirty_pages_rate = rs->num_dirty_pages_period * 1000
1164             / (end_time - rs->time_last_bitmap_sync);
1165         bytes_xfer_now = ram_counters.transferred;
1166 
1167         /* During block migration the auto-converge logic incorrectly detects
1168          * that ram migration makes no progress. Avoid this by disabling the
1169          * throttling logic during the bulk phase of block migration. */
1170         if (migrate_auto_converge() && !blk_mig_bulk_active()) {
1171             /* The following detection logic can be refined later. For now:
1172                Check to see if the dirtied bytes is 50% more than the approx.
1173                amount of bytes that just got transferred since the last time we
1174                were in this routine. If that happens twice, start or increase
1175                throttling */
1176 
1177             if ((rs->num_dirty_pages_period * TARGET_PAGE_SIZE >
1178                    (bytes_xfer_now - rs->bytes_xfer_prev) / 2) &&
1179                 (++rs->dirty_rate_high_cnt >= 2)) {
1180                     trace_migration_throttle();
1181                     rs->dirty_rate_high_cnt = 0;
1182                     mig_throttle_guest_down();
1183             }
1184         }
1185 
1186         if (migrate_use_xbzrle()) {
1187             if (rs->iterations_prev != rs->iterations) {
1188                 xbzrle_counters.cache_miss_rate =
1189                    (double)(xbzrle_counters.cache_miss -
1190                             rs->xbzrle_cache_miss_prev) /
1191                    (rs->iterations - rs->iterations_prev);
1192             }
1193             rs->iterations_prev = rs->iterations;
1194             rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss;
1195         }
1196 
1197         /* reset period counters */
1198         rs->time_last_bitmap_sync = end_time;
1199         rs->num_dirty_pages_period = 0;
1200         rs->bytes_xfer_prev = bytes_xfer_now;
1201     }
1202     if (migrate_use_events()) {
1203         qapi_event_send_migration_pass(ram_counters.dirty_sync_count, NULL);
1204     }
1205 }
1206 
1207 /**
1208  * save_zero_page: send the zero page to the stream
1209  *
1210  * Returns the number of pages written.
1211  *
1212  * @rs: current RAM state
1213  * @block: block that contains the page we want to send
1214  * @offset: offset inside the block for the page
1215  */
1216 static int save_zero_page(RAMState *rs, RAMBlock *block, ram_addr_t offset)
1217 {
1218     uint8_t *p = block->host + offset;
1219     int pages = -1;
1220 
1221     if (is_zero_range(p, TARGET_PAGE_SIZE)) {
1222         ram_counters.duplicate++;
1223         ram_counters.transferred +=
1224             save_page_header(rs, rs->f, block, offset | RAM_SAVE_FLAG_ZERO);
1225         qemu_put_byte(rs->f, 0);
1226         ram_counters.transferred += 1;
1227         pages = 1;
1228     }
1229 
1230     return pages;
1231 }
1232 
1233 static void ram_release_pages(const char *rbname, uint64_t offset, int pages)
1234 {
1235     if (!migrate_release_ram() || !migration_in_postcopy()) {
1236         return;
1237     }
1238 
1239     ram_discard_range(rbname, offset, pages << TARGET_PAGE_BITS);
1240 }
1241 
1242 /*
1243  * @pages: the number of pages written by the control path,
1244  *        < 0 - error
1245  *        > 0 - number of pages written
1246  *
1247  * Return true if the pages has been saved, otherwise false is returned.
1248  */
1249 static bool control_save_page(RAMState *rs, RAMBlock *block, ram_addr_t offset,
1250                               int *pages)
1251 {
1252     uint64_t bytes_xmit = 0;
1253     int ret;
1254 
1255     *pages = -1;
1256     ret = ram_control_save_page(rs->f, block->offset, offset, TARGET_PAGE_SIZE,
1257                                 &bytes_xmit);
1258     if (ret == RAM_SAVE_CONTROL_NOT_SUPP) {
1259         return false;
1260     }
1261 
1262     if (bytes_xmit) {
1263         ram_counters.transferred += bytes_xmit;
1264         *pages = 1;
1265     }
1266 
1267     if (ret == RAM_SAVE_CONTROL_DELAYED) {
1268         return true;
1269     }
1270 
1271     if (bytes_xmit > 0) {
1272         ram_counters.normal++;
1273     } else if (bytes_xmit == 0) {
1274         ram_counters.duplicate++;
1275     }
1276 
1277     return true;
1278 }
1279 
1280 /*
1281  * directly send the page to the stream
1282  *
1283  * Returns the number of pages written.
1284  *
1285  * @rs: current RAM state
1286  * @block: block that contains the page we want to send
1287  * @offset: offset inside the block for the page
1288  * @buf: the page to be sent
1289  * @async: send to page asyncly
1290  */
1291 static int save_normal_page(RAMState *rs, RAMBlock *block, ram_addr_t offset,
1292                             uint8_t *buf, bool async)
1293 {
1294     ram_counters.transferred += save_page_header(rs, rs->f, block,
1295                                                  offset | RAM_SAVE_FLAG_PAGE);
1296     if (async) {
1297         qemu_put_buffer_async(rs->f, buf, TARGET_PAGE_SIZE,
1298                               migrate_release_ram() &
1299                               migration_in_postcopy());
1300     } else {
1301         qemu_put_buffer(rs->f, buf, TARGET_PAGE_SIZE);
1302     }
1303     ram_counters.transferred += TARGET_PAGE_SIZE;
1304     ram_counters.normal++;
1305     return 1;
1306 }
1307 
1308 /**
1309  * ram_save_page: send the given page to the stream
1310  *
1311  * Returns the number of pages written.
1312  *          < 0 - error
1313  *          >=0 - Number of pages written - this might legally be 0
1314  *                if xbzrle noticed the page was the same.
1315  *
1316  * @rs: current RAM state
1317  * @block: block that contains the page we want to send
1318  * @offset: offset inside the block for the page
1319  * @last_stage: if we are at the completion stage
1320  */
1321 static int ram_save_page(RAMState *rs, PageSearchStatus *pss, bool last_stage)
1322 {
1323     int pages = -1;
1324     uint8_t *p;
1325     bool send_async = true;
1326     RAMBlock *block = pss->block;
1327     ram_addr_t offset = pss->page << TARGET_PAGE_BITS;
1328     ram_addr_t current_addr = block->offset + offset;
1329 
1330     p = block->host + offset;
1331     trace_ram_save_page(block->idstr, (uint64_t)offset, p);
1332 
1333     XBZRLE_cache_lock();
1334     if (!rs->ram_bulk_stage && !migration_in_postcopy() &&
1335         migrate_use_xbzrle()) {
1336         pages = save_xbzrle_page(rs, &p, current_addr, block,
1337                                  offset, last_stage);
1338         if (!last_stage) {
1339             /* Can't send this cached data async, since the cache page
1340              * might get updated before it gets to the wire
1341              */
1342             send_async = false;
1343         }
1344     }
1345 
1346     /* XBZRLE overflow or normal page */
1347     if (pages == -1) {
1348         pages = save_normal_page(rs, block, offset, p, send_async);
1349     }
1350 
1351     XBZRLE_cache_unlock();
1352 
1353     return pages;
1354 }
1355 
1356 static int do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block,
1357                                 ram_addr_t offset, uint8_t *source_buf)
1358 {
1359     RAMState *rs = ram_state;
1360     int bytes_sent, blen;
1361     uint8_t *p = block->host + (offset & TARGET_PAGE_MASK);
1362 
1363     bytes_sent = save_page_header(rs, f, block, offset |
1364                                   RAM_SAVE_FLAG_COMPRESS_PAGE);
1365 
1366     /*
1367      * copy it to a internal buffer to avoid it being modified by VM
1368      * so that we can catch up the error during compression and
1369      * decompression
1370      */
1371     memcpy(source_buf, p, TARGET_PAGE_SIZE);
1372     blen = qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_SIZE);
1373     if (blen < 0) {
1374         bytes_sent = 0;
1375         qemu_file_set_error(migrate_get_current()->to_dst_file, blen);
1376         error_report("compressed data failed!");
1377     } else {
1378         bytes_sent += blen;
1379         ram_release_pages(block->idstr, offset & TARGET_PAGE_MASK, 1);
1380     }
1381 
1382     return bytes_sent;
1383 }
1384 
1385 static void flush_compressed_data(RAMState *rs)
1386 {
1387     int idx, len, thread_count;
1388 
1389     if (!migrate_use_compression()) {
1390         return;
1391     }
1392     thread_count = migrate_compress_threads();
1393 
1394     qemu_mutex_lock(&comp_done_lock);
1395     for (idx = 0; idx < thread_count; idx++) {
1396         while (!comp_param[idx].done) {
1397             qemu_cond_wait(&comp_done_cond, &comp_done_lock);
1398         }
1399     }
1400     qemu_mutex_unlock(&comp_done_lock);
1401 
1402     for (idx = 0; idx < thread_count; idx++) {
1403         qemu_mutex_lock(&comp_param[idx].mutex);
1404         if (!comp_param[idx].quit) {
1405             len = qemu_put_qemu_file(rs->f, comp_param[idx].file);
1406             ram_counters.transferred += len;
1407         }
1408         qemu_mutex_unlock(&comp_param[idx].mutex);
1409     }
1410 }
1411 
1412 static inline void set_compress_params(CompressParam *param, RAMBlock *block,
1413                                        ram_addr_t offset)
1414 {
1415     param->block = block;
1416     param->offset = offset;
1417 }
1418 
1419 static int compress_page_with_multi_thread(RAMState *rs, RAMBlock *block,
1420                                            ram_addr_t offset)
1421 {
1422     int idx, thread_count, bytes_xmit = -1, pages = -1;
1423 
1424     thread_count = migrate_compress_threads();
1425     qemu_mutex_lock(&comp_done_lock);
1426     while (true) {
1427         for (idx = 0; idx < thread_count; idx++) {
1428             if (comp_param[idx].done) {
1429                 comp_param[idx].done = false;
1430                 bytes_xmit = qemu_put_qemu_file(rs->f, comp_param[idx].file);
1431                 qemu_mutex_lock(&comp_param[idx].mutex);
1432                 set_compress_params(&comp_param[idx], block, offset);
1433                 qemu_cond_signal(&comp_param[idx].cond);
1434                 qemu_mutex_unlock(&comp_param[idx].mutex);
1435                 pages = 1;
1436                 ram_counters.normal++;
1437                 ram_counters.transferred += bytes_xmit;
1438                 break;
1439             }
1440         }
1441         if (pages > 0) {
1442             break;
1443         } else {
1444             qemu_cond_wait(&comp_done_cond, &comp_done_lock);
1445         }
1446     }
1447     qemu_mutex_unlock(&comp_done_lock);
1448 
1449     return pages;
1450 }
1451 
1452 /**
1453  * find_dirty_block: find the next dirty page and update any state
1454  * associated with the search process.
1455  *
1456  * Returns if a page is found
1457  *
1458  * @rs: current RAM state
1459  * @pss: data about the state of the current dirty page scan
1460  * @again: set to false if the search has scanned the whole of RAM
1461  */
1462 static bool find_dirty_block(RAMState *rs, PageSearchStatus *pss, bool *again)
1463 {
1464     pss->page = migration_bitmap_find_dirty(rs, pss->block, pss->page);
1465     if (pss->complete_round && pss->block == rs->last_seen_block &&
1466         pss->page >= rs->last_page) {
1467         /*
1468          * We've been once around the RAM and haven't found anything.
1469          * Give up.
1470          */
1471         *again = false;
1472         return false;
1473     }
1474     if ((pss->page << TARGET_PAGE_BITS) >= pss->block->used_length) {
1475         /* Didn't find anything in this RAM Block */
1476         pss->page = 0;
1477         pss->block = QLIST_NEXT_RCU(pss->block, next);
1478         if (!pss->block) {
1479             /* Hit the end of the list */
1480             pss->block = QLIST_FIRST_RCU(&ram_list.blocks);
1481             /* Flag that we've looped */
1482             pss->complete_round = true;
1483             rs->ram_bulk_stage = false;
1484             if (migrate_use_xbzrle()) {
1485                 /* If xbzrle is on, stop using the data compression at this
1486                  * point. In theory, xbzrle can do better than compression.
1487                  */
1488                 flush_compressed_data(rs);
1489             }
1490         }
1491         /* Didn't find anything this time, but try again on the new block */
1492         *again = true;
1493         return false;
1494     } else {
1495         /* Can go around again, but... */
1496         *again = true;
1497         /* We've found something so probably don't need to */
1498         return true;
1499     }
1500 }
1501 
1502 /**
1503  * unqueue_page: gets a page of the queue
1504  *
1505  * Helper for 'get_queued_page' - gets a page off the queue
1506  *
1507  * Returns the block of the page (or NULL if none available)
1508  *
1509  * @rs: current RAM state
1510  * @offset: used to return the offset within the RAMBlock
1511  */
1512 static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset)
1513 {
1514     RAMBlock *block = NULL;
1515 
1516     qemu_mutex_lock(&rs->src_page_req_mutex);
1517     if (!QSIMPLEQ_EMPTY(&rs->src_page_requests)) {
1518         struct RAMSrcPageRequest *entry =
1519                                 QSIMPLEQ_FIRST(&rs->src_page_requests);
1520         block = entry->rb;
1521         *offset = entry->offset;
1522 
1523         if (entry->len > TARGET_PAGE_SIZE) {
1524             entry->len -= TARGET_PAGE_SIZE;
1525             entry->offset += TARGET_PAGE_SIZE;
1526         } else {
1527             memory_region_unref(block->mr);
1528             QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
1529             g_free(entry);
1530         }
1531     }
1532     qemu_mutex_unlock(&rs->src_page_req_mutex);
1533 
1534     return block;
1535 }
1536 
1537 /**
1538  * get_queued_page: unqueue a page from the postocpy requests
1539  *
1540  * Skips pages that are already sent (!dirty)
1541  *
1542  * Returns if a queued page is found
1543  *
1544  * @rs: current RAM state
1545  * @pss: data about the state of the current dirty page scan
1546  */
1547 static bool get_queued_page(RAMState *rs, PageSearchStatus *pss)
1548 {
1549     RAMBlock  *block;
1550     ram_addr_t offset;
1551     bool dirty;
1552 
1553     do {
1554         block = unqueue_page(rs, &offset);
1555         /*
1556          * We're sending this page, and since it's postcopy nothing else
1557          * will dirty it, and we must make sure it doesn't get sent again
1558          * even if this queue request was received after the background
1559          * search already sent it.
1560          */
1561         if (block) {
1562             unsigned long page;
1563 
1564             page = offset >> TARGET_PAGE_BITS;
1565             dirty = test_bit(page, block->bmap);
1566             if (!dirty) {
1567                 trace_get_queued_page_not_dirty(block->idstr, (uint64_t)offset,
1568                        page, test_bit(page, block->unsentmap));
1569             } else {
1570                 trace_get_queued_page(block->idstr, (uint64_t)offset, page);
1571             }
1572         }
1573 
1574     } while (block && !dirty);
1575 
1576     if (block) {
1577         /*
1578          * As soon as we start servicing pages out of order, then we have
1579          * to kill the bulk stage, since the bulk stage assumes
1580          * in (migration_bitmap_find_and_reset_dirty) that every page is
1581          * dirty, that's no longer true.
1582          */
1583         rs->ram_bulk_stage = false;
1584 
1585         /*
1586          * We want the background search to continue from the queued page
1587          * since the guest is likely to want other pages near to the page
1588          * it just requested.
1589          */
1590         pss->block = block;
1591         pss->page = offset >> TARGET_PAGE_BITS;
1592     }
1593 
1594     return !!block;
1595 }
1596 
1597 /**
1598  * migration_page_queue_free: drop any remaining pages in the ram
1599  * request queue
1600  *
1601  * It should be empty at the end anyway, but in error cases there may
1602  * be some left.  in case that there is any page left, we drop it.
1603  *
1604  */
1605 static void migration_page_queue_free(RAMState *rs)
1606 {
1607     struct RAMSrcPageRequest *mspr, *next_mspr;
1608     /* This queue generally should be empty - but in the case of a failed
1609      * migration might have some droppings in.
1610      */
1611     rcu_read_lock();
1612     QSIMPLEQ_FOREACH_SAFE(mspr, &rs->src_page_requests, next_req, next_mspr) {
1613         memory_region_unref(mspr->rb->mr);
1614         QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
1615         g_free(mspr);
1616     }
1617     rcu_read_unlock();
1618 }
1619 
1620 /**
1621  * ram_save_queue_pages: queue the page for transmission
1622  *
1623  * A request from postcopy destination for example.
1624  *
1625  * Returns zero on success or negative on error
1626  *
1627  * @rbname: Name of the RAMBLock of the request. NULL means the
1628  *          same that last one.
1629  * @start: starting address from the start of the RAMBlock
1630  * @len: length (in bytes) to send
1631  */
1632 int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len)
1633 {
1634     RAMBlock *ramblock;
1635     RAMState *rs = ram_state;
1636 
1637     ram_counters.postcopy_requests++;
1638     rcu_read_lock();
1639     if (!rbname) {
1640         /* Reuse last RAMBlock */
1641         ramblock = rs->last_req_rb;
1642 
1643         if (!ramblock) {
1644             /*
1645              * Shouldn't happen, we can't reuse the last RAMBlock if
1646              * it's the 1st request.
1647              */
1648             error_report("ram_save_queue_pages no previous block");
1649             goto err;
1650         }
1651     } else {
1652         ramblock = qemu_ram_block_by_name(rbname);
1653 
1654         if (!ramblock) {
1655             /* We shouldn't be asked for a non-existent RAMBlock */
1656             error_report("ram_save_queue_pages no block '%s'", rbname);
1657             goto err;
1658         }
1659         rs->last_req_rb = ramblock;
1660     }
1661     trace_ram_save_queue_pages(ramblock->idstr, start, len);
1662     if (start+len > ramblock->used_length) {
1663         error_report("%s request overrun start=" RAM_ADDR_FMT " len="
1664                      RAM_ADDR_FMT " blocklen=" RAM_ADDR_FMT,
1665                      __func__, start, len, ramblock->used_length);
1666         goto err;
1667     }
1668 
1669     struct RAMSrcPageRequest *new_entry =
1670         g_malloc0(sizeof(struct RAMSrcPageRequest));
1671     new_entry->rb = ramblock;
1672     new_entry->offset = start;
1673     new_entry->len = len;
1674 
1675     memory_region_ref(ramblock->mr);
1676     qemu_mutex_lock(&rs->src_page_req_mutex);
1677     QSIMPLEQ_INSERT_TAIL(&rs->src_page_requests, new_entry, next_req);
1678     qemu_mutex_unlock(&rs->src_page_req_mutex);
1679     rcu_read_unlock();
1680 
1681     return 0;
1682 
1683 err:
1684     rcu_read_unlock();
1685     return -1;
1686 }
1687 
1688 static bool save_page_use_compression(RAMState *rs)
1689 {
1690     if (!migrate_use_compression()) {
1691         return false;
1692     }
1693 
1694     /*
1695      * If xbzrle is on, stop using the data compression after first
1696      * round of migration even if compression is enabled. In theory,
1697      * xbzrle can do better than compression.
1698      */
1699     if (rs->ram_bulk_stage || !migrate_use_xbzrle()) {
1700         return true;
1701     }
1702 
1703     return false;
1704 }
1705 
1706 /**
1707  * ram_save_target_page: save one target page
1708  *
1709  * Returns the number of pages written
1710  *
1711  * @rs: current RAM state
1712  * @pss: data about the page we want to send
1713  * @last_stage: if we are at the completion stage
1714  */
1715 static int ram_save_target_page(RAMState *rs, PageSearchStatus *pss,
1716                                 bool last_stage)
1717 {
1718     RAMBlock *block = pss->block;
1719     ram_addr_t offset = pss->page << TARGET_PAGE_BITS;
1720     int res;
1721 
1722     if (control_save_page(rs, block, offset, &res)) {
1723         return res;
1724     }
1725 
1726     /*
1727      * When starting the process of a new block, the first page of
1728      * the block should be sent out before other pages in the same
1729      * block, and all the pages in last block should have been sent
1730      * out, keeping this order is important, because the 'cont' flag
1731      * is used to avoid resending the block name.
1732      */
1733     if (block != rs->last_sent_block && save_page_use_compression(rs)) {
1734             flush_compressed_data(rs);
1735     }
1736 
1737     res = save_zero_page(rs, block, offset);
1738     if (res > 0) {
1739         /* Must let xbzrle know, otherwise a previous (now 0'd) cached
1740          * page would be stale
1741          */
1742         if (!save_page_use_compression(rs)) {
1743             XBZRLE_cache_lock();
1744             xbzrle_cache_zero_page(rs, block->offset + offset);
1745             XBZRLE_cache_unlock();
1746         }
1747         ram_release_pages(block->idstr, offset, res);
1748         return res;
1749     }
1750 
1751     /*
1752      * Make sure the first page is sent out before other pages.
1753      *
1754      * we post it as normal page as compression will take much
1755      * CPU resource.
1756      */
1757     if (block == rs->last_sent_block && save_page_use_compression(rs)) {
1758         return compress_page_with_multi_thread(rs, block, offset);
1759     }
1760 
1761     return ram_save_page(rs, pss, last_stage);
1762 }
1763 
1764 /**
1765  * ram_save_host_page: save a whole host page
1766  *
1767  * Starting at *offset send pages up to the end of the current host
1768  * page. It's valid for the initial offset to point into the middle of
1769  * a host page in which case the remainder of the hostpage is sent.
1770  * Only dirty target pages are sent. Note that the host page size may
1771  * be a huge page for this block.
1772  * The saving stops at the boundary of the used_length of the block
1773  * if the RAMBlock isn't a multiple of the host page size.
1774  *
1775  * Returns the number of pages written or negative on error
1776  *
1777  * @rs: current RAM state
1778  * @ms: current migration state
1779  * @pss: data about the page we want to send
1780  * @last_stage: if we are at the completion stage
1781  */
1782 static int ram_save_host_page(RAMState *rs, PageSearchStatus *pss,
1783                               bool last_stage)
1784 {
1785     int tmppages, pages = 0;
1786     size_t pagesize_bits =
1787         qemu_ram_pagesize(pss->block) >> TARGET_PAGE_BITS;
1788 
1789     do {
1790         /* Check the pages is dirty and if it is send it */
1791         if (!migration_bitmap_clear_dirty(rs, pss->block, pss->page)) {
1792             pss->page++;
1793             continue;
1794         }
1795 
1796         tmppages = ram_save_target_page(rs, pss, last_stage);
1797         if (tmppages < 0) {
1798             return tmppages;
1799         }
1800 
1801         pages += tmppages;
1802         if (pss->block->unsentmap) {
1803             clear_bit(pss->page, pss->block->unsentmap);
1804         }
1805 
1806         pss->page++;
1807     } while ((pss->page & (pagesize_bits - 1)) &&
1808              offset_in_ramblock(pss->block, pss->page << TARGET_PAGE_BITS));
1809 
1810     /* The offset we leave with is the last one we looked at */
1811     pss->page--;
1812     return pages;
1813 }
1814 
1815 /**
1816  * ram_find_and_save_block: finds a dirty page and sends it to f
1817  *
1818  * Called within an RCU critical section.
1819  *
1820  * Returns the number of pages written where zero means no dirty pages
1821  *
1822  * @rs: current RAM state
1823  * @last_stage: if we are at the completion stage
1824  *
1825  * On systems where host-page-size > target-page-size it will send all the
1826  * pages in a host page that are dirty.
1827  */
1828 
1829 static int ram_find_and_save_block(RAMState *rs, bool last_stage)
1830 {
1831     PageSearchStatus pss;
1832     int pages = 0;
1833     bool again, found;
1834 
1835     /* No dirty page as there is zero RAM */
1836     if (!ram_bytes_total()) {
1837         return pages;
1838     }
1839 
1840     pss.block = rs->last_seen_block;
1841     pss.page = rs->last_page;
1842     pss.complete_round = false;
1843 
1844     if (!pss.block) {
1845         pss.block = QLIST_FIRST_RCU(&ram_list.blocks);
1846     }
1847 
1848     do {
1849         again = true;
1850         found = get_queued_page(rs, &pss);
1851 
1852         if (!found) {
1853             /* priority queue empty, so just search for something dirty */
1854             found = find_dirty_block(rs, &pss, &again);
1855         }
1856 
1857         if (found) {
1858             pages = ram_save_host_page(rs, &pss, last_stage);
1859         }
1860     } while (!pages && again);
1861 
1862     rs->last_seen_block = pss.block;
1863     rs->last_page = pss.page;
1864 
1865     return pages;
1866 }
1867 
1868 void acct_update_position(QEMUFile *f, size_t size, bool zero)
1869 {
1870     uint64_t pages = size / TARGET_PAGE_SIZE;
1871 
1872     if (zero) {
1873         ram_counters.duplicate += pages;
1874     } else {
1875         ram_counters.normal += pages;
1876         ram_counters.transferred += size;
1877         qemu_update_position(f, size);
1878     }
1879 }
1880 
1881 uint64_t ram_bytes_total(void)
1882 {
1883     RAMBlock *block;
1884     uint64_t total = 0;
1885 
1886     rcu_read_lock();
1887     RAMBLOCK_FOREACH(block) {
1888         total += block->used_length;
1889     }
1890     rcu_read_unlock();
1891     return total;
1892 }
1893 
1894 static void xbzrle_load_setup(void)
1895 {
1896     XBZRLE.decoded_buf = g_malloc(TARGET_PAGE_SIZE);
1897 }
1898 
1899 static void xbzrle_load_cleanup(void)
1900 {
1901     g_free(XBZRLE.decoded_buf);
1902     XBZRLE.decoded_buf = NULL;
1903 }
1904 
1905 static void ram_state_cleanup(RAMState **rsp)
1906 {
1907     if (*rsp) {
1908         migration_page_queue_free(*rsp);
1909         qemu_mutex_destroy(&(*rsp)->bitmap_mutex);
1910         qemu_mutex_destroy(&(*rsp)->src_page_req_mutex);
1911         g_free(*rsp);
1912         *rsp = NULL;
1913     }
1914 }
1915 
1916 static void xbzrle_cleanup(void)
1917 {
1918     XBZRLE_cache_lock();
1919     if (XBZRLE.cache) {
1920         cache_fini(XBZRLE.cache);
1921         g_free(XBZRLE.encoded_buf);
1922         g_free(XBZRLE.current_buf);
1923         g_free(XBZRLE.zero_target_page);
1924         XBZRLE.cache = NULL;
1925         XBZRLE.encoded_buf = NULL;
1926         XBZRLE.current_buf = NULL;
1927         XBZRLE.zero_target_page = NULL;
1928     }
1929     XBZRLE_cache_unlock();
1930 }
1931 
1932 static void ram_save_cleanup(void *opaque)
1933 {
1934     RAMState **rsp = opaque;
1935     RAMBlock *block;
1936 
1937     /* caller have hold iothread lock or is in a bh, so there is
1938      * no writing race against this migration_bitmap
1939      */
1940     memory_global_dirty_log_stop();
1941 
1942     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
1943         g_free(block->bmap);
1944         block->bmap = NULL;
1945         g_free(block->unsentmap);
1946         block->unsentmap = NULL;
1947     }
1948 
1949     xbzrle_cleanup();
1950     compress_threads_save_cleanup();
1951     ram_state_cleanup(rsp);
1952 }
1953 
1954 static void ram_state_reset(RAMState *rs)
1955 {
1956     rs->last_seen_block = NULL;
1957     rs->last_sent_block = NULL;
1958     rs->last_page = 0;
1959     rs->last_version = ram_list.version;
1960     rs->ram_bulk_stage = true;
1961 }
1962 
1963 #define MAX_WAIT 50 /* ms, half buffered_file limit */
1964 
1965 /*
1966  * 'expected' is the value you expect the bitmap mostly to be full
1967  * of; it won't bother printing lines that are all this value.
1968  * If 'todump' is null the migration bitmap is dumped.
1969  */
1970 void ram_debug_dump_bitmap(unsigned long *todump, bool expected,
1971                            unsigned long pages)
1972 {
1973     int64_t cur;
1974     int64_t linelen = 128;
1975     char linebuf[129];
1976 
1977     for (cur = 0; cur < pages; cur += linelen) {
1978         int64_t curb;
1979         bool found = false;
1980         /*
1981          * Last line; catch the case where the line length
1982          * is longer than remaining ram
1983          */
1984         if (cur + linelen > pages) {
1985             linelen = pages - cur;
1986         }
1987         for (curb = 0; curb < linelen; curb++) {
1988             bool thisbit = test_bit(cur + curb, todump);
1989             linebuf[curb] = thisbit ? '1' : '.';
1990             found = found || (thisbit != expected);
1991         }
1992         if (found) {
1993             linebuf[curb] = '\0';
1994             fprintf(stderr,  "0x%08" PRIx64 " : %s\n", cur, linebuf);
1995         }
1996     }
1997 }
1998 
1999 /* **** functions for postcopy ***** */
2000 
2001 void ram_postcopy_migrated_memory_release(MigrationState *ms)
2002 {
2003     struct RAMBlock *block;
2004 
2005     RAMBLOCK_FOREACH(block) {
2006         unsigned long *bitmap = block->bmap;
2007         unsigned long range = block->used_length >> TARGET_PAGE_BITS;
2008         unsigned long run_start = find_next_zero_bit(bitmap, range, 0);
2009 
2010         while (run_start < range) {
2011             unsigned long run_end = find_next_bit(bitmap, range, run_start + 1);
2012             ram_discard_range(block->idstr, run_start << TARGET_PAGE_BITS,
2013                               (run_end - run_start) << TARGET_PAGE_BITS);
2014             run_start = find_next_zero_bit(bitmap, range, run_end + 1);
2015         }
2016     }
2017 }
2018 
2019 /**
2020  * postcopy_send_discard_bm_ram: discard a RAMBlock
2021  *
2022  * Returns zero on success
2023  *
2024  * Callback from postcopy_each_ram_send_discard for each RAMBlock
2025  * Note: At this point the 'unsentmap' is the processed bitmap combined
2026  *       with the dirtymap; so a '1' means it's either dirty or unsent.
2027  *
2028  * @ms: current migration state
2029  * @pds: state for postcopy
2030  * @start: RAMBlock starting page
2031  * @length: RAMBlock size
2032  */
2033 static int postcopy_send_discard_bm_ram(MigrationState *ms,
2034                                         PostcopyDiscardState *pds,
2035                                         RAMBlock *block)
2036 {
2037     unsigned long end = block->used_length >> TARGET_PAGE_BITS;
2038     unsigned long current;
2039     unsigned long *unsentmap = block->unsentmap;
2040 
2041     for (current = 0; current < end; ) {
2042         unsigned long one = find_next_bit(unsentmap, end, current);
2043 
2044         if (one <= end) {
2045             unsigned long zero = find_next_zero_bit(unsentmap, end, one + 1);
2046             unsigned long discard_length;
2047 
2048             if (zero >= end) {
2049                 discard_length = end - one;
2050             } else {
2051                 discard_length = zero - one;
2052             }
2053             if (discard_length) {
2054                 postcopy_discard_send_range(ms, pds, one, discard_length);
2055             }
2056             current = one + discard_length;
2057         } else {
2058             current = one;
2059         }
2060     }
2061 
2062     return 0;
2063 }
2064 
2065 /**
2066  * postcopy_each_ram_send_discard: discard all RAMBlocks
2067  *
2068  * Returns 0 for success or negative for error
2069  *
2070  * Utility for the outgoing postcopy code.
2071  *   Calls postcopy_send_discard_bm_ram for each RAMBlock
2072  *   passing it bitmap indexes and name.
2073  * (qemu_ram_foreach_block ends up passing unscaled lengths
2074  *  which would mean postcopy code would have to deal with target page)
2075  *
2076  * @ms: current migration state
2077  */
2078 static int postcopy_each_ram_send_discard(MigrationState *ms)
2079 {
2080     struct RAMBlock *block;
2081     int ret;
2082 
2083     RAMBLOCK_FOREACH(block) {
2084         PostcopyDiscardState *pds =
2085             postcopy_discard_send_init(ms, block->idstr);
2086 
2087         /*
2088          * Postcopy sends chunks of bitmap over the wire, but it
2089          * just needs indexes at this point, avoids it having
2090          * target page specific code.
2091          */
2092         ret = postcopy_send_discard_bm_ram(ms, pds, block);
2093         postcopy_discard_send_finish(ms, pds);
2094         if (ret) {
2095             return ret;
2096         }
2097     }
2098 
2099     return 0;
2100 }
2101 
2102 /**
2103  * postcopy_chunk_hostpages_pass: canocalize bitmap in hostpages
2104  *
2105  * Helper for postcopy_chunk_hostpages; it's called twice to
2106  * canonicalize the two bitmaps, that are similar, but one is
2107  * inverted.
2108  *
2109  * Postcopy requires that all target pages in a hostpage are dirty or
2110  * clean, not a mix.  This function canonicalizes the bitmaps.
2111  *
2112  * @ms: current migration state
2113  * @unsent_pass: if true we need to canonicalize partially unsent host pages
2114  *               otherwise we need to canonicalize partially dirty host pages
2115  * @block: block that contains the page we want to canonicalize
2116  * @pds: state for postcopy
2117  */
2118 static void postcopy_chunk_hostpages_pass(MigrationState *ms, bool unsent_pass,
2119                                           RAMBlock *block,
2120                                           PostcopyDiscardState *pds)
2121 {
2122     RAMState *rs = ram_state;
2123     unsigned long *bitmap = block->bmap;
2124     unsigned long *unsentmap = block->unsentmap;
2125     unsigned int host_ratio = block->page_size / TARGET_PAGE_SIZE;
2126     unsigned long pages = block->used_length >> TARGET_PAGE_BITS;
2127     unsigned long run_start;
2128 
2129     if (block->page_size == TARGET_PAGE_SIZE) {
2130         /* Easy case - TPS==HPS for a non-huge page RAMBlock */
2131         return;
2132     }
2133 
2134     if (unsent_pass) {
2135         /* Find a sent page */
2136         run_start = find_next_zero_bit(unsentmap, pages, 0);
2137     } else {
2138         /* Find a dirty page */
2139         run_start = find_next_bit(bitmap, pages, 0);
2140     }
2141 
2142     while (run_start < pages) {
2143         bool do_fixup = false;
2144         unsigned long fixup_start_addr;
2145         unsigned long host_offset;
2146 
2147         /*
2148          * If the start of this run of pages is in the middle of a host
2149          * page, then we need to fixup this host page.
2150          */
2151         host_offset = run_start % host_ratio;
2152         if (host_offset) {
2153             do_fixup = true;
2154             run_start -= host_offset;
2155             fixup_start_addr = run_start;
2156             /* For the next pass */
2157             run_start = run_start + host_ratio;
2158         } else {
2159             /* Find the end of this run */
2160             unsigned long run_end;
2161             if (unsent_pass) {
2162                 run_end = find_next_bit(unsentmap, pages, run_start + 1);
2163             } else {
2164                 run_end = find_next_zero_bit(bitmap, pages, run_start + 1);
2165             }
2166             /*
2167              * If the end isn't at the start of a host page, then the
2168              * run doesn't finish at the end of a host page
2169              * and we need to discard.
2170              */
2171             host_offset = run_end % host_ratio;
2172             if (host_offset) {
2173                 do_fixup = true;
2174                 fixup_start_addr = run_end - host_offset;
2175                 /*
2176                  * This host page has gone, the next loop iteration starts
2177                  * from after the fixup
2178                  */
2179                 run_start = fixup_start_addr + host_ratio;
2180             } else {
2181                 /*
2182                  * No discards on this iteration, next loop starts from
2183                  * next sent/dirty page
2184                  */
2185                 run_start = run_end + 1;
2186             }
2187         }
2188 
2189         if (do_fixup) {
2190             unsigned long page;
2191 
2192             /* Tell the destination to discard this page */
2193             if (unsent_pass || !test_bit(fixup_start_addr, unsentmap)) {
2194                 /* For the unsent_pass we:
2195                  *     discard partially sent pages
2196                  * For the !unsent_pass (dirty) we:
2197                  *     discard partially dirty pages that were sent
2198                  *     (any partially sent pages were already discarded
2199                  *     by the previous unsent_pass)
2200                  */
2201                 postcopy_discard_send_range(ms, pds, fixup_start_addr,
2202                                             host_ratio);
2203             }
2204 
2205             /* Clean up the bitmap */
2206             for (page = fixup_start_addr;
2207                  page < fixup_start_addr + host_ratio; page++) {
2208                 /* All pages in this host page are now not sent */
2209                 set_bit(page, unsentmap);
2210 
2211                 /*
2212                  * Remark them as dirty, updating the count for any pages
2213                  * that weren't previously dirty.
2214                  */
2215                 rs->migration_dirty_pages += !test_and_set_bit(page, bitmap);
2216             }
2217         }
2218 
2219         if (unsent_pass) {
2220             /* Find the next sent page for the next iteration */
2221             run_start = find_next_zero_bit(unsentmap, pages, run_start);
2222         } else {
2223             /* Find the next dirty page for the next iteration */
2224             run_start = find_next_bit(bitmap, pages, run_start);
2225         }
2226     }
2227 }
2228 
2229 /**
2230  * postcopy_chuck_hostpages: discrad any partially sent host page
2231  *
2232  * Utility for the outgoing postcopy code.
2233  *
2234  * Discard any partially sent host-page size chunks, mark any partially
2235  * dirty host-page size chunks as all dirty.  In this case the host-page
2236  * is the host-page for the particular RAMBlock, i.e. it might be a huge page
2237  *
2238  * Returns zero on success
2239  *
2240  * @ms: current migration state
2241  * @block: block we want to work with
2242  */
2243 static int postcopy_chunk_hostpages(MigrationState *ms, RAMBlock *block)
2244 {
2245     PostcopyDiscardState *pds =
2246         postcopy_discard_send_init(ms, block->idstr);
2247 
2248     /* First pass: Discard all partially sent host pages */
2249     postcopy_chunk_hostpages_pass(ms, true, block, pds);
2250     /*
2251      * Second pass: Ensure that all partially dirty host pages are made
2252      * fully dirty.
2253      */
2254     postcopy_chunk_hostpages_pass(ms, false, block, pds);
2255 
2256     postcopy_discard_send_finish(ms, pds);
2257     return 0;
2258 }
2259 
2260 /**
2261  * ram_postcopy_send_discard_bitmap: transmit the discard bitmap
2262  *
2263  * Returns zero on success
2264  *
2265  * Transmit the set of pages to be discarded after precopy to the target
2266  * these are pages that:
2267  *     a) Have been previously transmitted but are now dirty again
2268  *     b) Pages that have never been transmitted, this ensures that
2269  *        any pages on the destination that have been mapped by background
2270  *        tasks get discarded (transparent huge pages is the specific concern)
2271  * Hopefully this is pretty sparse
2272  *
2273  * @ms: current migration state
2274  */
2275 int ram_postcopy_send_discard_bitmap(MigrationState *ms)
2276 {
2277     RAMState *rs = ram_state;
2278     RAMBlock *block;
2279     int ret;
2280 
2281     rcu_read_lock();
2282 
2283     /* This should be our last sync, the src is now paused */
2284     migration_bitmap_sync(rs);
2285 
2286     /* Easiest way to make sure we don't resume in the middle of a host-page */
2287     rs->last_seen_block = NULL;
2288     rs->last_sent_block = NULL;
2289     rs->last_page = 0;
2290 
2291     QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
2292         unsigned long pages = block->used_length >> TARGET_PAGE_BITS;
2293         unsigned long *bitmap = block->bmap;
2294         unsigned long *unsentmap = block->unsentmap;
2295 
2296         if (!unsentmap) {
2297             /* We don't have a safe way to resize the sentmap, so
2298              * if the bitmap was resized it will be NULL at this
2299              * point.
2300              */
2301             error_report("migration ram resized during precopy phase");
2302             rcu_read_unlock();
2303             return -EINVAL;
2304         }
2305         /* Deal with TPS != HPS and huge pages */
2306         ret = postcopy_chunk_hostpages(ms, block);
2307         if (ret) {
2308             rcu_read_unlock();
2309             return ret;
2310         }
2311 
2312         /*
2313          * Update the unsentmap to be unsentmap = unsentmap | dirty
2314          */
2315         bitmap_or(unsentmap, unsentmap, bitmap, pages);
2316 #ifdef DEBUG_POSTCOPY
2317         ram_debug_dump_bitmap(unsentmap, true, pages);
2318 #endif
2319     }
2320     trace_ram_postcopy_send_discard_bitmap();
2321 
2322     ret = postcopy_each_ram_send_discard(ms);
2323     rcu_read_unlock();
2324 
2325     return ret;
2326 }
2327 
2328 /**
2329  * ram_discard_range: discard dirtied pages at the beginning of postcopy
2330  *
2331  * Returns zero on success
2332  *
2333  * @rbname: name of the RAMBlock of the request. NULL means the
2334  *          same that last one.
2335  * @start: RAMBlock starting page
2336  * @length: RAMBlock size
2337  */
2338 int ram_discard_range(const char *rbname, uint64_t start, size_t length)
2339 {
2340     int ret = -1;
2341 
2342     trace_ram_discard_range(rbname, start, length);
2343 
2344     rcu_read_lock();
2345     RAMBlock *rb = qemu_ram_block_by_name(rbname);
2346 
2347     if (!rb) {
2348         error_report("ram_discard_range: Failed to find block '%s'", rbname);
2349         goto err;
2350     }
2351 
2352     bitmap_clear(rb->receivedmap, start >> qemu_target_page_bits(),
2353                  length >> qemu_target_page_bits());
2354     ret = ram_block_discard_range(rb, start, length);
2355 
2356 err:
2357     rcu_read_unlock();
2358 
2359     return ret;
2360 }
2361 
2362 /*
2363  * For every allocation, we will try not to crash the VM if the
2364  * allocation failed.
2365  */
2366 static int xbzrle_init(void)
2367 {
2368     Error *local_err = NULL;
2369 
2370     if (!migrate_use_xbzrle()) {
2371         return 0;
2372     }
2373 
2374     XBZRLE_cache_lock();
2375 
2376     XBZRLE.zero_target_page = g_try_malloc0(TARGET_PAGE_SIZE);
2377     if (!XBZRLE.zero_target_page) {
2378         error_report("%s: Error allocating zero page", __func__);
2379         goto err_out;
2380     }
2381 
2382     XBZRLE.cache = cache_init(migrate_xbzrle_cache_size(),
2383                               TARGET_PAGE_SIZE, &local_err);
2384     if (!XBZRLE.cache) {
2385         error_report_err(local_err);
2386         goto free_zero_page;
2387     }
2388 
2389     XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE);
2390     if (!XBZRLE.encoded_buf) {
2391         error_report("%s: Error allocating encoded_buf", __func__);
2392         goto free_cache;
2393     }
2394 
2395     XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE);
2396     if (!XBZRLE.current_buf) {
2397         error_report("%s: Error allocating current_buf", __func__);
2398         goto free_encoded_buf;
2399     }
2400 
2401     /* We are all good */
2402     XBZRLE_cache_unlock();
2403     return 0;
2404 
2405 free_encoded_buf:
2406     g_free(XBZRLE.encoded_buf);
2407     XBZRLE.encoded_buf = NULL;
2408 free_cache:
2409     cache_fini(XBZRLE.cache);
2410     XBZRLE.cache = NULL;
2411 free_zero_page:
2412     g_free(XBZRLE.zero_target_page);
2413     XBZRLE.zero_target_page = NULL;
2414 err_out:
2415     XBZRLE_cache_unlock();
2416     return -ENOMEM;
2417 }
2418 
2419 static int ram_state_init(RAMState **rsp)
2420 {
2421     *rsp = g_try_new0(RAMState, 1);
2422 
2423     if (!*rsp) {
2424         error_report("%s: Init ramstate fail", __func__);
2425         return -1;
2426     }
2427 
2428     qemu_mutex_init(&(*rsp)->bitmap_mutex);
2429     qemu_mutex_init(&(*rsp)->src_page_req_mutex);
2430     QSIMPLEQ_INIT(&(*rsp)->src_page_requests);
2431 
2432     /*
2433      * Count the total number of pages used by ram blocks not including any
2434      * gaps due to alignment or unplugs.
2435      */
2436     (*rsp)->migration_dirty_pages = ram_bytes_total() >> TARGET_PAGE_BITS;
2437 
2438     ram_state_reset(*rsp);
2439 
2440     return 0;
2441 }
2442 
2443 static void ram_list_init_bitmaps(void)
2444 {
2445     RAMBlock *block;
2446     unsigned long pages;
2447 
2448     /* Skip setting bitmap if there is no RAM */
2449     if (ram_bytes_total()) {
2450         QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
2451             pages = block->max_length >> TARGET_PAGE_BITS;
2452             block->bmap = bitmap_new(pages);
2453             bitmap_set(block->bmap, 0, pages);
2454             if (migrate_postcopy_ram()) {
2455                 block->unsentmap = bitmap_new(pages);
2456                 bitmap_set(block->unsentmap, 0, pages);
2457             }
2458         }
2459     }
2460 }
2461 
2462 static void ram_init_bitmaps(RAMState *rs)
2463 {
2464     /* For memory_global_dirty_log_start below.  */
2465     qemu_mutex_lock_iothread();
2466     qemu_mutex_lock_ramlist();
2467     rcu_read_lock();
2468 
2469     ram_list_init_bitmaps();
2470     memory_global_dirty_log_start();
2471     migration_bitmap_sync(rs);
2472 
2473     rcu_read_unlock();
2474     qemu_mutex_unlock_ramlist();
2475     qemu_mutex_unlock_iothread();
2476 }
2477 
2478 static int ram_init_all(RAMState **rsp)
2479 {
2480     if (ram_state_init(rsp)) {
2481         return -1;
2482     }
2483 
2484     if (xbzrle_init()) {
2485         ram_state_cleanup(rsp);
2486         return -1;
2487     }
2488 
2489     ram_init_bitmaps(*rsp);
2490 
2491     return 0;
2492 }
2493 
2494 static void ram_state_resume_prepare(RAMState *rs, QEMUFile *out)
2495 {
2496     RAMBlock *block;
2497     uint64_t pages = 0;
2498 
2499     /*
2500      * Postcopy is not using xbzrle/compression, so no need for that.
2501      * Also, since source are already halted, we don't need to care
2502      * about dirty page logging as well.
2503      */
2504 
2505     RAMBLOCK_FOREACH(block) {
2506         pages += bitmap_count_one(block->bmap,
2507                                   block->used_length >> TARGET_PAGE_BITS);
2508     }
2509 
2510     /* This may not be aligned with current bitmaps. Recalculate. */
2511     rs->migration_dirty_pages = pages;
2512 
2513     rs->last_seen_block = NULL;
2514     rs->last_sent_block = NULL;
2515     rs->last_page = 0;
2516     rs->last_version = ram_list.version;
2517     /*
2518      * Disable the bulk stage, otherwise we'll resend the whole RAM no
2519      * matter what we have sent.
2520      */
2521     rs->ram_bulk_stage = false;
2522 
2523     /* Update RAMState cache of output QEMUFile */
2524     rs->f = out;
2525 
2526     trace_ram_state_resume_prepare(pages);
2527 }
2528 
2529 /*
2530  * Each of ram_save_setup, ram_save_iterate and ram_save_complete has
2531  * long-running RCU critical section.  When rcu-reclaims in the code
2532  * start to become numerous it will be necessary to reduce the
2533  * granularity of these critical sections.
2534  */
2535 
2536 /**
2537  * ram_save_setup: Setup RAM for migration
2538  *
2539  * Returns zero to indicate success and negative for error
2540  *
2541  * @f: QEMUFile where to send the data
2542  * @opaque: RAMState pointer
2543  */
2544 static int ram_save_setup(QEMUFile *f, void *opaque)
2545 {
2546     RAMState **rsp = opaque;
2547     RAMBlock *block;
2548 
2549     if (compress_threads_save_setup()) {
2550         return -1;
2551     }
2552 
2553     /* migration has already setup the bitmap, reuse it. */
2554     if (!migration_in_colo_state()) {
2555         if (ram_init_all(rsp) != 0) {
2556             compress_threads_save_cleanup();
2557             return -1;
2558         }
2559     }
2560     (*rsp)->f = f;
2561 
2562     rcu_read_lock();
2563 
2564     qemu_put_be64(f, ram_bytes_total() | RAM_SAVE_FLAG_MEM_SIZE);
2565 
2566     RAMBLOCK_FOREACH(block) {
2567         qemu_put_byte(f, strlen(block->idstr));
2568         qemu_put_buffer(f, (uint8_t *)block->idstr, strlen(block->idstr));
2569         qemu_put_be64(f, block->used_length);
2570         if (migrate_postcopy_ram() && block->page_size != qemu_host_page_size) {
2571             qemu_put_be64(f, block->page_size);
2572         }
2573     }
2574 
2575     rcu_read_unlock();
2576 
2577     ram_control_before_iterate(f, RAM_CONTROL_SETUP);
2578     ram_control_after_iterate(f, RAM_CONTROL_SETUP);
2579 
2580     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2581 
2582     return 0;
2583 }
2584 
2585 /**
2586  * ram_save_iterate: iterative stage for migration
2587  *
2588  * Returns zero to indicate success and negative for error
2589  *
2590  * @f: QEMUFile where to send the data
2591  * @opaque: RAMState pointer
2592  */
2593 static int ram_save_iterate(QEMUFile *f, void *opaque)
2594 {
2595     RAMState **temp = opaque;
2596     RAMState *rs = *temp;
2597     int ret;
2598     int i;
2599     int64_t t0;
2600     int done = 0;
2601 
2602     if (blk_mig_bulk_active()) {
2603         /* Avoid transferring ram during bulk phase of block migration as
2604          * the bulk phase will usually take a long time and transferring
2605          * ram updates during that time is pointless. */
2606         goto out;
2607     }
2608 
2609     rcu_read_lock();
2610     if (ram_list.version != rs->last_version) {
2611         ram_state_reset(rs);
2612     }
2613 
2614     /* Read version before ram_list.blocks */
2615     smp_rmb();
2616 
2617     ram_control_before_iterate(f, RAM_CONTROL_ROUND);
2618 
2619     t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
2620     i = 0;
2621     while ((ret = qemu_file_rate_limit(f)) == 0) {
2622         int pages;
2623 
2624         pages = ram_find_and_save_block(rs, false);
2625         /* no more pages to sent */
2626         if (pages == 0) {
2627             done = 1;
2628             break;
2629         }
2630         rs->iterations++;
2631 
2632         /* we want to check in the 1st loop, just in case it was the 1st time
2633            and we had to sync the dirty bitmap.
2634            qemu_get_clock_ns() is a bit expensive, so we only check each some
2635            iterations
2636         */
2637         if ((i & 63) == 0) {
2638             uint64_t t1 = (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - t0) / 1000000;
2639             if (t1 > MAX_WAIT) {
2640                 trace_ram_save_iterate_big_wait(t1, i);
2641                 break;
2642             }
2643         }
2644         i++;
2645     }
2646     flush_compressed_data(rs);
2647     rcu_read_unlock();
2648 
2649     /*
2650      * Must occur before EOS (or any QEMUFile operation)
2651      * because of RDMA protocol.
2652      */
2653     ram_control_after_iterate(f, RAM_CONTROL_ROUND);
2654 
2655 out:
2656     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2657     ram_counters.transferred += 8;
2658 
2659     ret = qemu_file_get_error(f);
2660     if (ret < 0) {
2661         return ret;
2662     }
2663 
2664     return done;
2665 }
2666 
2667 /**
2668  * ram_save_complete: function called to send the remaining amount of ram
2669  *
2670  * Returns zero to indicate success
2671  *
2672  * Called with iothread lock
2673  *
2674  * @f: QEMUFile where to send the data
2675  * @opaque: RAMState pointer
2676  */
2677 static int ram_save_complete(QEMUFile *f, void *opaque)
2678 {
2679     RAMState **temp = opaque;
2680     RAMState *rs = *temp;
2681 
2682     rcu_read_lock();
2683 
2684     if (!migration_in_postcopy()) {
2685         migration_bitmap_sync(rs);
2686     }
2687 
2688     ram_control_before_iterate(f, RAM_CONTROL_FINISH);
2689 
2690     /* try transferring iterative blocks of memory */
2691 
2692     /* flush all remaining blocks regardless of rate limiting */
2693     while (true) {
2694         int pages;
2695 
2696         pages = ram_find_and_save_block(rs, !migration_in_colo_state());
2697         /* no more blocks to sent */
2698         if (pages == 0) {
2699             break;
2700         }
2701     }
2702 
2703     flush_compressed_data(rs);
2704     ram_control_after_iterate(f, RAM_CONTROL_FINISH);
2705 
2706     rcu_read_unlock();
2707 
2708     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
2709 
2710     return 0;
2711 }
2712 
2713 static void ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size,
2714                              uint64_t *res_precopy_only,
2715                              uint64_t *res_compatible,
2716                              uint64_t *res_postcopy_only)
2717 {
2718     RAMState **temp = opaque;
2719     RAMState *rs = *temp;
2720     uint64_t remaining_size;
2721 
2722     remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
2723 
2724     if (!migration_in_postcopy() &&
2725         remaining_size < max_size) {
2726         qemu_mutex_lock_iothread();
2727         rcu_read_lock();
2728         migration_bitmap_sync(rs);
2729         rcu_read_unlock();
2730         qemu_mutex_unlock_iothread();
2731         remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
2732     }
2733 
2734     if (migrate_postcopy_ram()) {
2735         /* We can do postcopy, and all the data is postcopiable */
2736         *res_compatible += remaining_size;
2737     } else {
2738         *res_precopy_only += remaining_size;
2739     }
2740 }
2741 
2742 static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
2743 {
2744     unsigned int xh_len;
2745     int xh_flags;
2746     uint8_t *loaded_data;
2747 
2748     /* extract RLE header */
2749     xh_flags = qemu_get_byte(f);
2750     xh_len = qemu_get_be16(f);
2751 
2752     if (xh_flags != ENCODING_FLAG_XBZRLE) {
2753         error_report("Failed to load XBZRLE page - wrong compression!");
2754         return -1;
2755     }
2756 
2757     if (xh_len > TARGET_PAGE_SIZE) {
2758         error_report("Failed to load XBZRLE page - len overflow!");
2759         return -1;
2760     }
2761     loaded_data = XBZRLE.decoded_buf;
2762     /* load data and decode */
2763     /* it can change loaded_data to point to an internal buffer */
2764     qemu_get_buffer_in_place(f, &loaded_data, xh_len);
2765 
2766     /* decode RLE */
2767     if (xbzrle_decode_buffer(loaded_data, xh_len, host,
2768                              TARGET_PAGE_SIZE) == -1) {
2769         error_report("Failed to load XBZRLE page - decode error!");
2770         return -1;
2771     }
2772 
2773     return 0;
2774 }
2775 
2776 /**
2777  * ram_block_from_stream: read a RAMBlock id from the migration stream
2778  *
2779  * Must be called from within a rcu critical section.
2780  *
2781  * Returns a pointer from within the RCU-protected ram_list.
2782  *
2783  * @f: QEMUFile where to read the data from
2784  * @flags: Page flags (mostly to see if it's a continuation of previous block)
2785  */
2786 static inline RAMBlock *ram_block_from_stream(QEMUFile *f, int flags)
2787 {
2788     static RAMBlock *block = NULL;
2789     char id[256];
2790     uint8_t len;
2791 
2792     if (flags & RAM_SAVE_FLAG_CONTINUE) {
2793         if (!block) {
2794             error_report("Ack, bad migration stream!");
2795             return NULL;
2796         }
2797         return block;
2798     }
2799 
2800     len = qemu_get_byte(f);
2801     qemu_get_buffer(f, (uint8_t *)id, len);
2802     id[len] = 0;
2803 
2804     block = qemu_ram_block_by_name(id);
2805     if (!block) {
2806         error_report("Can't find block %s", id);
2807         return NULL;
2808     }
2809 
2810     return block;
2811 }
2812 
2813 static inline void *host_from_ram_block_offset(RAMBlock *block,
2814                                                ram_addr_t offset)
2815 {
2816     if (!offset_in_ramblock(block, offset)) {
2817         return NULL;
2818     }
2819 
2820     return block->host + offset;
2821 }
2822 
2823 /**
2824  * ram_handle_compressed: handle the zero page case
2825  *
2826  * If a page (or a whole RDMA chunk) has been
2827  * determined to be zero, then zap it.
2828  *
2829  * @host: host address for the zero page
2830  * @ch: what the page is filled from.  We only support zero
2831  * @size: size of the zero page
2832  */
2833 void ram_handle_compressed(void *host, uint8_t ch, uint64_t size)
2834 {
2835     if (ch != 0 || !is_zero_range(host, size)) {
2836         memset(host, ch, size);
2837     }
2838 }
2839 
2840 /* return the size after decompression, or negative value on error */
2841 static int
2842 qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len,
2843                      const uint8_t *source, size_t source_len)
2844 {
2845     int err;
2846 
2847     err = inflateReset(stream);
2848     if (err != Z_OK) {
2849         return -1;
2850     }
2851 
2852     stream->avail_in = source_len;
2853     stream->next_in = (uint8_t *)source;
2854     stream->avail_out = dest_len;
2855     stream->next_out = dest;
2856 
2857     err = inflate(stream, Z_NO_FLUSH);
2858     if (err != Z_STREAM_END) {
2859         return -1;
2860     }
2861 
2862     return stream->total_out;
2863 }
2864 
2865 static void *do_data_decompress(void *opaque)
2866 {
2867     DecompressParam *param = opaque;
2868     unsigned long pagesize;
2869     uint8_t *des;
2870     int len, ret;
2871 
2872     qemu_mutex_lock(&param->mutex);
2873     while (!param->quit) {
2874         if (param->des) {
2875             des = param->des;
2876             len = param->len;
2877             param->des = 0;
2878             qemu_mutex_unlock(&param->mutex);
2879 
2880             pagesize = TARGET_PAGE_SIZE;
2881 
2882             ret = qemu_uncompress_data(&param->stream, des, pagesize,
2883                                        param->compbuf, len);
2884             if (ret < 0) {
2885                 error_report("decompress data failed");
2886                 qemu_file_set_error(decomp_file, ret);
2887             }
2888 
2889             qemu_mutex_lock(&decomp_done_lock);
2890             param->done = true;
2891             qemu_cond_signal(&decomp_done_cond);
2892             qemu_mutex_unlock(&decomp_done_lock);
2893 
2894             qemu_mutex_lock(&param->mutex);
2895         } else {
2896             qemu_cond_wait(&param->cond, &param->mutex);
2897         }
2898     }
2899     qemu_mutex_unlock(&param->mutex);
2900 
2901     return NULL;
2902 }
2903 
2904 static int wait_for_decompress_done(void)
2905 {
2906     int idx, thread_count;
2907 
2908     if (!migrate_use_compression()) {
2909         return 0;
2910     }
2911 
2912     thread_count = migrate_decompress_threads();
2913     qemu_mutex_lock(&decomp_done_lock);
2914     for (idx = 0; idx < thread_count; idx++) {
2915         while (!decomp_param[idx].done) {
2916             qemu_cond_wait(&decomp_done_cond, &decomp_done_lock);
2917         }
2918     }
2919     qemu_mutex_unlock(&decomp_done_lock);
2920     return qemu_file_get_error(decomp_file);
2921 }
2922 
2923 static void compress_threads_load_cleanup(void)
2924 {
2925     int i, thread_count;
2926 
2927     if (!migrate_use_compression()) {
2928         return;
2929     }
2930     thread_count = migrate_decompress_threads();
2931     for (i = 0; i < thread_count; i++) {
2932         /*
2933          * we use it as a indicator which shows if the thread is
2934          * properly init'd or not
2935          */
2936         if (!decomp_param[i].compbuf) {
2937             break;
2938         }
2939 
2940         qemu_mutex_lock(&decomp_param[i].mutex);
2941         decomp_param[i].quit = true;
2942         qemu_cond_signal(&decomp_param[i].cond);
2943         qemu_mutex_unlock(&decomp_param[i].mutex);
2944     }
2945     for (i = 0; i < thread_count; i++) {
2946         if (!decomp_param[i].compbuf) {
2947             break;
2948         }
2949 
2950         qemu_thread_join(decompress_threads + i);
2951         qemu_mutex_destroy(&decomp_param[i].mutex);
2952         qemu_cond_destroy(&decomp_param[i].cond);
2953         inflateEnd(&decomp_param[i].stream);
2954         g_free(decomp_param[i].compbuf);
2955         decomp_param[i].compbuf = NULL;
2956     }
2957     g_free(decompress_threads);
2958     g_free(decomp_param);
2959     decompress_threads = NULL;
2960     decomp_param = NULL;
2961     decomp_file = NULL;
2962 }
2963 
2964 static int compress_threads_load_setup(QEMUFile *f)
2965 {
2966     int i, thread_count;
2967 
2968     if (!migrate_use_compression()) {
2969         return 0;
2970     }
2971 
2972     thread_count = migrate_decompress_threads();
2973     decompress_threads = g_new0(QemuThread, thread_count);
2974     decomp_param = g_new0(DecompressParam, thread_count);
2975     qemu_mutex_init(&decomp_done_lock);
2976     qemu_cond_init(&decomp_done_cond);
2977     decomp_file = f;
2978     for (i = 0; i < thread_count; i++) {
2979         if (inflateInit(&decomp_param[i].stream) != Z_OK) {
2980             goto exit;
2981         }
2982 
2983         decomp_param[i].compbuf = g_malloc0(compressBound(TARGET_PAGE_SIZE));
2984         qemu_mutex_init(&decomp_param[i].mutex);
2985         qemu_cond_init(&decomp_param[i].cond);
2986         decomp_param[i].done = true;
2987         decomp_param[i].quit = false;
2988         qemu_thread_create(decompress_threads + i, "decompress",
2989                            do_data_decompress, decomp_param + i,
2990                            QEMU_THREAD_JOINABLE);
2991     }
2992     return 0;
2993 exit:
2994     compress_threads_load_cleanup();
2995     return -1;
2996 }
2997 
2998 static void decompress_data_with_multi_threads(QEMUFile *f,
2999                                                void *host, int len)
3000 {
3001     int idx, thread_count;
3002 
3003     thread_count = migrate_decompress_threads();
3004     qemu_mutex_lock(&decomp_done_lock);
3005     while (true) {
3006         for (idx = 0; idx < thread_count; idx++) {
3007             if (decomp_param[idx].done) {
3008                 decomp_param[idx].done = false;
3009                 qemu_mutex_lock(&decomp_param[idx].mutex);
3010                 qemu_get_buffer(f, decomp_param[idx].compbuf, len);
3011                 decomp_param[idx].des = host;
3012                 decomp_param[idx].len = len;
3013                 qemu_cond_signal(&decomp_param[idx].cond);
3014                 qemu_mutex_unlock(&decomp_param[idx].mutex);
3015                 break;
3016             }
3017         }
3018         if (idx < thread_count) {
3019             break;
3020         } else {
3021             qemu_cond_wait(&decomp_done_cond, &decomp_done_lock);
3022         }
3023     }
3024     qemu_mutex_unlock(&decomp_done_lock);
3025 }
3026 
3027 /**
3028  * ram_load_setup: Setup RAM for migration incoming side
3029  *
3030  * Returns zero to indicate success and negative for error
3031  *
3032  * @f: QEMUFile where to receive the data
3033  * @opaque: RAMState pointer
3034  */
3035 static int ram_load_setup(QEMUFile *f, void *opaque)
3036 {
3037     if (compress_threads_load_setup(f)) {
3038         return -1;
3039     }
3040 
3041     xbzrle_load_setup();
3042     ramblock_recv_map_init();
3043     return 0;
3044 }
3045 
3046 static int ram_load_cleanup(void *opaque)
3047 {
3048     RAMBlock *rb;
3049     xbzrle_load_cleanup();
3050     compress_threads_load_cleanup();
3051 
3052     RAMBLOCK_FOREACH(rb) {
3053         g_free(rb->receivedmap);
3054         rb->receivedmap = NULL;
3055     }
3056     return 0;
3057 }
3058 
3059 /**
3060  * ram_postcopy_incoming_init: allocate postcopy data structures
3061  *
3062  * Returns 0 for success and negative if there was one error
3063  *
3064  * @mis: current migration incoming state
3065  *
3066  * Allocate data structures etc needed by incoming migration with
3067  * postcopy-ram. postcopy-ram's similarly names
3068  * postcopy_ram_incoming_init does the work.
3069  */
3070 int ram_postcopy_incoming_init(MigrationIncomingState *mis)
3071 {
3072     unsigned long ram_pages = last_ram_page();
3073 
3074     return postcopy_ram_incoming_init(mis, ram_pages);
3075 }
3076 
3077 /**
3078  * ram_load_postcopy: load a page in postcopy case
3079  *
3080  * Returns 0 for success or -errno in case of error
3081  *
3082  * Called in postcopy mode by ram_load().
3083  * rcu_read_lock is taken prior to this being called.
3084  *
3085  * @f: QEMUFile where to send the data
3086  */
3087 static int ram_load_postcopy(QEMUFile *f)
3088 {
3089     int flags = 0, ret = 0;
3090     bool place_needed = false;
3091     bool matching_page_sizes = false;
3092     MigrationIncomingState *mis = migration_incoming_get_current();
3093     /* Temporary page that is later 'placed' */
3094     void *postcopy_host_page = postcopy_get_tmp_page(mis);
3095     void *last_host = NULL;
3096     bool all_zero = false;
3097 
3098     while (!ret && !(flags & RAM_SAVE_FLAG_EOS)) {
3099         ram_addr_t addr;
3100         void *host = NULL;
3101         void *page_buffer = NULL;
3102         void *place_source = NULL;
3103         RAMBlock *block = NULL;
3104         uint8_t ch;
3105 
3106         addr = qemu_get_be64(f);
3107 
3108         /*
3109          * If qemu file error, we should stop here, and then "addr"
3110          * may be invalid
3111          */
3112         ret = qemu_file_get_error(f);
3113         if (ret) {
3114             break;
3115         }
3116 
3117         flags = addr & ~TARGET_PAGE_MASK;
3118         addr &= TARGET_PAGE_MASK;
3119 
3120         trace_ram_load_postcopy_loop((uint64_t)addr, flags);
3121         place_needed = false;
3122         if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE)) {
3123             block = ram_block_from_stream(f, flags);
3124 
3125             host = host_from_ram_block_offset(block, addr);
3126             if (!host) {
3127                 error_report("Illegal RAM offset " RAM_ADDR_FMT, addr);
3128                 ret = -EINVAL;
3129                 break;
3130             }
3131             matching_page_sizes = block->page_size == TARGET_PAGE_SIZE;
3132             /*
3133              * Postcopy requires that we place whole host pages atomically;
3134              * these may be huge pages for RAMBlocks that are backed by
3135              * hugetlbfs.
3136              * To make it atomic, the data is read into a temporary page
3137              * that's moved into place later.
3138              * The migration protocol uses,  possibly smaller, target-pages
3139              * however the source ensures it always sends all the components
3140              * of a host page in order.
3141              */
3142             page_buffer = postcopy_host_page +
3143                           ((uintptr_t)host & (block->page_size - 1));
3144             /* If all TP are zero then we can optimise the place */
3145             if (!((uintptr_t)host & (block->page_size - 1))) {
3146                 all_zero = true;
3147             } else {
3148                 /* not the 1st TP within the HP */
3149                 if (host != (last_host + TARGET_PAGE_SIZE)) {
3150                     error_report("Non-sequential target page %p/%p",
3151                                   host, last_host);
3152                     ret = -EINVAL;
3153                     break;
3154                 }
3155             }
3156 
3157 
3158             /*
3159              * If it's the last part of a host page then we place the host
3160              * page
3161              */
3162             place_needed = (((uintptr_t)host + TARGET_PAGE_SIZE) &
3163                                      (block->page_size - 1)) == 0;
3164             place_source = postcopy_host_page;
3165         }
3166         last_host = host;
3167 
3168         switch (flags & ~RAM_SAVE_FLAG_CONTINUE) {
3169         case RAM_SAVE_FLAG_ZERO:
3170             ch = qemu_get_byte(f);
3171             memset(page_buffer, ch, TARGET_PAGE_SIZE);
3172             if (ch) {
3173                 all_zero = false;
3174             }
3175             break;
3176 
3177         case RAM_SAVE_FLAG_PAGE:
3178             all_zero = false;
3179             if (!place_needed || !matching_page_sizes) {
3180                 qemu_get_buffer(f, page_buffer, TARGET_PAGE_SIZE);
3181             } else {
3182                 /* Avoids the qemu_file copy during postcopy, which is
3183                  * going to do a copy later; can only do it when we
3184                  * do this read in one go (matching page sizes)
3185                  */
3186                 qemu_get_buffer_in_place(f, (uint8_t **)&place_source,
3187                                          TARGET_PAGE_SIZE);
3188             }
3189             break;
3190         case RAM_SAVE_FLAG_EOS:
3191             /* normal exit */
3192             break;
3193         default:
3194             error_report("Unknown combination of migration flags: %#x"
3195                          " (postcopy mode)", flags);
3196             ret = -EINVAL;
3197             break;
3198         }
3199 
3200         /* Detect for any possible file errors */
3201         if (!ret && qemu_file_get_error(f)) {
3202             ret = qemu_file_get_error(f);
3203         }
3204 
3205         if (!ret && place_needed) {
3206             /* This gets called at the last target page in the host page */
3207             void *place_dest = host + TARGET_PAGE_SIZE - block->page_size;
3208 
3209             if (all_zero) {
3210                 ret = postcopy_place_page_zero(mis, place_dest,
3211                                                block);
3212             } else {
3213                 ret = postcopy_place_page(mis, place_dest,
3214                                           place_source, block);
3215             }
3216         }
3217     }
3218 
3219     return ret;
3220 }
3221 
3222 static bool postcopy_is_advised(void)
3223 {
3224     PostcopyState ps = postcopy_state_get();
3225     return ps >= POSTCOPY_INCOMING_ADVISE && ps < POSTCOPY_INCOMING_END;
3226 }
3227 
3228 static bool postcopy_is_running(void)
3229 {
3230     PostcopyState ps = postcopy_state_get();
3231     return ps >= POSTCOPY_INCOMING_LISTENING && ps < POSTCOPY_INCOMING_END;
3232 }
3233 
3234 static int ram_load(QEMUFile *f, void *opaque, int version_id)
3235 {
3236     int flags = 0, ret = 0, invalid_flags = 0;
3237     static uint64_t seq_iter;
3238     int len = 0;
3239     /*
3240      * If system is running in postcopy mode, page inserts to host memory must
3241      * be atomic
3242      */
3243     bool postcopy_running = postcopy_is_running();
3244     /* ADVISE is earlier, it shows the source has the postcopy capability on */
3245     bool postcopy_advised = postcopy_is_advised();
3246 
3247     seq_iter++;
3248 
3249     if (version_id != 4) {
3250         ret = -EINVAL;
3251     }
3252 
3253     if (!migrate_use_compression()) {
3254         invalid_flags |= RAM_SAVE_FLAG_COMPRESS_PAGE;
3255     }
3256     /* This RCU critical section can be very long running.
3257      * When RCU reclaims in the code start to become numerous,
3258      * it will be necessary to reduce the granularity of this
3259      * critical section.
3260      */
3261     rcu_read_lock();
3262 
3263     if (postcopy_running) {
3264         ret = ram_load_postcopy(f);
3265     }
3266 
3267     while (!postcopy_running && !ret && !(flags & RAM_SAVE_FLAG_EOS)) {
3268         ram_addr_t addr, total_ram_bytes;
3269         void *host = NULL;
3270         uint8_t ch;
3271 
3272         addr = qemu_get_be64(f);
3273         flags = addr & ~TARGET_PAGE_MASK;
3274         addr &= TARGET_PAGE_MASK;
3275 
3276         if (flags & invalid_flags) {
3277             if (flags & invalid_flags & RAM_SAVE_FLAG_COMPRESS_PAGE) {
3278                 error_report("Received an unexpected compressed page");
3279             }
3280 
3281             ret = -EINVAL;
3282             break;
3283         }
3284 
3285         if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE |
3286                      RAM_SAVE_FLAG_COMPRESS_PAGE | RAM_SAVE_FLAG_XBZRLE)) {
3287             RAMBlock *block = ram_block_from_stream(f, flags);
3288 
3289             host = host_from_ram_block_offset(block, addr);
3290             if (!host) {
3291                 error_report("Illegal RAM offset " RAM_ADDR_FMT, addr);
3292                 ret = -EINVAL;
3293                 break;
3294             }
3295             ramblock_recv_bitmap_set(block, host);
3296             trace_ram_load_loop(block->idstr, (uint64_t)addr, flags, host);
3297         }
3298 
3299         switch (flags & ~RAM_SAVE_FLAG_CONTINUE) {
3300         case RAM_SAVE_FLAG_MEM_SIZE:
3301             /* Synchronize RAM block list */
3302             total_ram_bytes = addr;
3303             while (!ret && total_ram_bytes) {
3304                 RAMBlock *block;
3305                 char id[256];
3306                 ram_addr_t length;
3307 
3308                 len = qemu_get_byte(f);
3309                 qemu_get_buffer(f, (uint8_t *)id, len);
3310                 id[len] = 0;
3311                 length = qemu_get_be64(f);
3312 
3313                 block = qemu_ram_block_by_name(id);
3314                 if (block) {
3315                     if (length != block->used_length) {
3316                         Error *local_err = NULL;
3317 
3318                         ret = qemu_ram_resize(block, length,
3319                                               &local_err);
3320                         if (local_err) {
3321                             error_report_err(local_err);
3322                         }
3323                     }
3324                     /* For postcopy we need to check hugepage sizes match */
3325                     if (postcopy_advised &&
3326                         block->page_size != qemu_host_page_size) {
3327                         uint64_t remote_page_size = qemu_get_be64(f);
3328                         if (remote_page_size != block->page_size) {
3329                             error_report("Mismatched RAM page size %s "
3330                                          "(local) %zd != %" PRId64,
3331                                          id, block->page_size,
3332                                          remote_page_size);
3333                             ret = -EINVAL;
3334                         }
3335                     }
3336                     ram_control_load_hook(f, RAM_CONTROL_BLOCK_REG,
3337                                           block->idstr);
3338                 } else {
3339                     error_report("Unknown ramblock \"%s\", cannot "
3340                                  "accept migration", id);
3341                     ret = -EINVAL;
3342                 }
3343 
3344                 total_ram_bytes -= length;
3345             }
3346             break;
3347 
3348         case RAM_SAVE_FLAG_ZERO:
3349             ch = qemu_get_byte(f);
3350             ram_handle_compressed(host, ch, TARGET_PAGE_SIZE);
3351             break;
3352 
3353         case RAM_SAVE_FLAG_PAGE:
3354             qemu_get_buffer(f, host, TARGET_PAGE_SIZE);
3355             break;
3356 
3357         case RAM_SAVE_FLAG_COMPRESS_PAGE:
3358             len = qemu_get_be32(f);
3359             if (len < 0 || len > compressBound(TARGET_PAGE_SIZE)) {
3360                 error_report("Invalid compressed data length: %d", len);
3361                 ret = -EINVAL;
3362                 break;
3363             }
3364             decompress_data_with_multi_threads(f, host, len);
3365             break;
3366 
3367         case RAM_SAVE_FLAG_XBZRLE:
3368             if (load_xbzrle(f, addr, host) < 0) {
3369                 error_report("Failed to decompress XBZRLE page at "
3370                              RAM_ADDR_FMT, addr);
3371                 ret = -EINVAL;
3372                 break;
3373             }
3374             break;
3375         case RAM_SAVE_FLAG_EOS:
3376             /* normal exit */
3377             break;
3378         default:
3379             if (flags & RAM_SAVE_FLAG_HOOK) {
3380                 ram_control_load_hook(f, RAM_CONTROL_HOOK, NULL);
3381             } else {
3382                 error_report("Unknown combination of migration flags: %#x",
3383                              flags);
3384                 ret = -EINVAL;
3385             }
3386         }
3387         if (!ret) {
3388             ret = qemu_file_get_error(f);
3389         }
3390     }
3391 
3392     ret |= wait_for_decompress_done();
3393     rcu_read_unlock();
3394     trace_ram_load_complete(ret, seq_iter);
3395     return ret;
3396 }
3397 
3398 static bool ram_has_postcopy(void *opaque)
3399 {
3400     return migrate_postcopy_ram();
3401 }
3402 
3403 /* Sync all the dirty bitmap with destination VM.  */
3404 static int ram_dirty_bitmap_sync_all(MigrationState *s, RAMState *rs)
3405 {
3406     RAMBlock *block;
3407     QEMUFile *file = s->to_dst_file;
3408     int ramblock_count = 0;
3409 
3410     trace_ram_dirty_bitmap_sync_start();
3411 
3412     RAMBLOCK_FOREACH(block) {
3413         qemu_savevm_send_recv_bitmap(file, block->idstr);
3414         trace_ram_dirty_bitmap_request(block->idstr);
3415         ramblock_count++;
3416     }
3417 
3418     trace_ram_dirty_bitmap_sync_wait();
3419 
3420     /* Wait until all the ramblocks' dirty bitmap synced */
3421     while (ramblock_count--) {
3422         qemu_sem_wait(&s->rp_state.rp_sem);
3423     }
3424 
3425     trace_ram_dirty_bitmap_sync_complete();
3426 
3427     return 0;
3428 }
3429 
3430 static void ram_dirty_bitmap_reload_notify(MigrationState *s)
3431 {
3432     qemu_sem_post(&s->rp_state.rp_sem);
3433 }
3434 
3435 /*
3436  * Read the received bitmap, revert it as the initial dirty bitmap.
3437  * This is only used when the postcopy migration is paused but wants
3438  * to resume from a middle point.
3439  */
3440 int ram_dirty_bitmap_reload(MigrationState *s, RAMBlock *block)
3441 {
3442     int ret = -EINVAL;
3443     QEMUFile *file = s->rp_state.from_dst_file;
3444     unsigned long *le_bitmap, nbits = block->used_length >> TARGET_PAGE_BITS;
3445     uint64_t local_size = nbits / 8;
3446     uint64_t size, end_mark;
3447 
3448     trace_ram_dirty_bitmap_reload_begin(block->idstr);
3449 
3450     if (s->state != MIGRATION_STATUS_POSTCOPY_RECOVER) {
3451         error_report("%s: incorrect state %s", __func__,
3452                      MigrationStatus_str(s->state));
3453         return -EINVAL;
3454     }
3455 
3456     /*
3457      * Note: see comments in ramblock_recv_bitmap_send() on why we
3458      * need the endianess convertion, and the paddings.
3459      */
3460     local_size = ROUND_UP(local_size, 8);
3461 
3462     /* Add paddings */
3463     le_bitmap = bitmap_new(nbits + BITS_PER_LONG);
3464 
3465     size = qemu_get_be64(file);
3466 
3467     /* The size of the bitmap should match with our ramblock */
3468     if (size != local_size) {
3469         error_report("%s: ramblock '%s' bitmap size mismatch "
3470                      "(0x%"PRIx64" != 0x%"PRIx64")", __func__,
3471                      block->idstr, size, local_size);
3472         ret = -EINVAL;
3473         goto out;
3474     }
3475 
3476     size = qemu_get_buffer(file, (uint8_t *)le_bitmap, local_size);
3477     end_mark = qemu_get_be64(file);
3478 
3479     ret = qemu_file_get_error(file);
3480     if (ret || size != local_size) {
3481         error_report("%s: read bitmap failed for ramblock '%s': %d"
3482                      " (size 0x%"PRIx64", got: 0x%"PRIx64")",
3483                      __func__, block->idstr, ret, local_size, size);
3484         ret = -EIO;
3485         goto out;
3486     }
3487 
3488     if (end_mark != RAMBLOCK_RECV_BITMAP_ENDING) {
3489         error_report("%s: ramblock '%s' end mark incorrect: 0x%"PRIu64,
3490                      __func__, block->idstr, end_mark);
3491         ret = -EINVAL;
3492         goto out;
3493     }
3494 
3495     /*
3496      * Endianess convertion. We are during postcopy (though paused).
3497      * The dirty bitmap won't change. We can directly modify it.
3498      */
3499     bitmap_from_le(block->bmap, le_bitmap, nbits);
3500 
3501     /*
3502      * What we received is "received bitmap". Revert it as the initial
3503      * dirty bitmap for this ramblock.
3504      */
3505     bitmap_complement(block->bmap, block->bmap, nbits);
3506 
3507     trace_ram_dirty_bitmap_reload_complete(block->idstr);
3508 
3509     /*
3510      * We succeeded to sync bitmap for current ramblock. If this is
3511      * the last one to sync, we need to notify the main send thread.
3512      */
3513     ram_dirty_bitmap_reload_notify(s);
3514 
3515     ret = 0;
3516 out:
3517     free(le_bitmap);
3518     return ret;
3519 }
3520 
3521 static int ram_resume_prepare(MigrationState *s, void *opaque)
3522 {
3523     RAMState *rs = *(RAMState **)opaque;
3524     int ret;
3525 
3526     ret = ram_dirty_bitmap_sync_all(s, rs);
3527     if (ret) {
3528         return ret;
3529     }
3530 
3531     ram_state_resume_prepare(rs, s->to_dst_file);
3532 
3533     return 0;
3534 }
3535 
3536 static SaveVMHandlers savevm_ram_handlers = {
3537     .save_setup = ram_save_setup,
3538     .save_live_iterate = ram_save_iterate,
3539     .save_live_complete_postcopy = ram_save_complete,
3540     .save_live_complete_precopy = ram_save_complete,
3541     .has_postcopy = ram_has_postcopy,
3542     .save_live_pending = ram_save_pending,
3543     .load_state = ram_load,
3544     .save_cleanup = ram_save_cleanup,
3545     .load_setup = ram_load_setup,
3546     .load_cleanup = ram_load_cleanup,
3547     .resume_prepare = ram_resume_prepare,
3548 };
3549 
3550 void ram_mig_init(void)
3551 {
3552     qemu_mutex_init(&XBZRLE.lock);
3553     register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, &ram_state);
3554 }
3555