OSDN Git Service

AVX512 support for xbzrle_encode_buffer
[qmiga/qemu.git] / migration / ram.c
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 "qemu/cutils.h"
31 #include "qemu/bitops.h"
32 #include "qemu/bitmap.h"
33 #include "qemu/madvise.h"
34 #include "qemu/main-loop.h"
35 #include "io/channel-null.h"
36 #include "xbzrle.h"
37 #include "ram.h"
38 #include "migration.h"
39 #include "migration/register.h"
40 #include "migration/misc.h"
41 #include "qemu-file.h"
42 #include "postcopy-ram.h"
43 #include "page_cache.h"
44 #include "qemu/error-report.h"
45 #include "qapi/error.h"
46 #include "qapi/qapi-types-migration.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 "block.h"
55 #include "sysemu/cpu-throttle.h"
56 #include "savevm.h"
57 #include "qemu/iov.h"
58 #include "multifd.h"
59 #include "sysemu/runstate.h"
60
61 #include "hw/boards.h" /* for machine_dump_guest_core() */
62
63 #if defined(__linux__)
64 #include "qemu/userfaultfd.h"
65 #endif /* defined(__linux__) */
66
67 /***********************************************************/
68 /* ram save/restore */
69
70 /* RAM_SAVE_FLAG_ZERO used to be named RAM_SAVE_FLAG_COMPRESS, it
71  * worked for pages that where filled with the same char.  We switched
72  * it to only search for the zero value.  And to avoid confusion with
73  * RAM_SSAVE_FLAG_COMPRESS_PAGE just rename it.
74  */
75
76 #define RAM_SAVE_FLAG_FULL     0x01 /* Obsolete, not used anymore */
77 #define RAM_SAVE_FLAG_ZERO     0x02
78 #define RAM_SAVE_FLAG_MEM_SIZE 0x04
79 #define RAM_SAVE_FLAG_PAGE     0x08
80 #define RAM_SAVE_FLAG_EOS      0x10
81 #define RAM_SAVE_FLAG_CONTINUE 0x20
82 #define RAM_SAVE_FLAG_XBZRLE   0x40
83 /* 0x80 is reserved in migration.h start with 0x100 next */
84 #define RAM_SAVE_FLAG_COMPRESS_PAGE    0x100
85
86 int (*xbzrle_encode_buffer_func)(uint8_t *, uint8_t *, int,
87      uint8_t *, int) = xbzrle_encode_buffer;
88 #if defined(CONFIG_AVX512BW_OPT)
89 #include "qemu/cpuid.h"
90 static void __attribute__((constructor)) init_cpu_flag(void)
91 {
92     unsigned max = __get_cpuid_max(0, NULL);
93     int a, b, c, d;
94     if (max >= 1) {
95         __cpuid(1, a, b, c, d);
96          /* We must check that AVX is not just available, but usable.  */
97         if ((c & bit_OSXSAVE) && (c & bit_AVX) && max >= 7) {
98             int bv;
99             __asm("xgetbv" : "=a"(bv), "=d"(d) : "c"(0));
100             __cpuid_count(7, 0, a, b, c, d);
101            /* 0xe6:
102             *  XCR0[7:5] = 111b (OPMASK state, upper 256-bit of ZMM0-ZMM15
103             *                    and ZMM16-ZMM31 state are enabled by OS)
104             *  XCR0[2:1] = 11b (XMM state and YMM state are enabled by OS)
105             */
106             if ((bv & 0xe6) == 0xe6 && (b & bit_AVX512BW)) {
107                 xbzrle_encode_buffer_func = xbzrle_encode_buffer_avx512;
108             }
109         }
110     }
111 }
112 #endif
113
114 XBZRLECacheStats xbzrle_counters;
115
116 /* used by the search for pages to send */
117 struct PageSearchStatus {
118     /* The migration channel used for a specific host page */
119     QEMUFile    *pss_channel;
120     /* Last block from where we have sent data */
121     RAMBlock *last_sent_block;
122     /* Current block being searched */
123     RAMBlock    *block;
124     /* Current page to search from */
125     unsigned long page;
126     /* Set once we wrap around */
127     bool         complete_round;
128     /* Whether we're sending a host page */
129     bool          host_page_sending;
130     /* The start/end of current host page.  Invalid if host_page_sending==false */
131     unsigned long host_page_start;
132     unsigned long host_page_end;
133 };
134 typedef struct PageSearchStatus PageSearchStatus;
135
136 /* struct contains XBZRLE cache and a static page
137    used by the compression */
138 static struct {
139     /* buffer used for XBZRLE encoding */
140     uint8_t *encoded_buf;
141     /* buffer for storing page content */
142     uint8_t *current_buf;
143     /* Cache for XBZRLE, Protected by lock. */
144     PageCache *cache;
145     QemuMutex lock;
146     /* it will store a page full of zeros */
147     uint8_t *zero_target_page;
148     /* buffer used for XBZRLE decoding */
149     uint8_t *decoded_buf;
150 } XBZRLE;
151
152 static void XBZRLE_cache_lock(void)
153 {
154     if (migrate_use_xbzrle()) {
155         qemu_mutex_lock(&XBZRLE.lock);
156     }
157 }
158
159 static void XBZRLE_cache_unlock(void)
160 {
161     if (migrate_use_xbzrle()) {
162         qemu_mutex_unlock(&XBZRLE.lock);
163     }
164 }
165
166 /**
167  * xbzrle_cache_resize: resize the xbzrle cache
168  *
169  * This function is called from migrate_params_apply in main
170  * thread, possibly while a migration is in progress.  A running
171  * migration may be using the cache and might finish during this call,
172  * hence changes to the cache are protected by XBZRLE.lock().
173  *
174  * Returns 0 for success or -1 for error
175  *
176  * @new_size: new cache size
177  * @errp: set *errp if the check failed, with reason
178  */
179 int xbzrle_cache_resize(uint64_t new_size, Error **errp)
180 {
181     PageCache *new_cache;
182     int64_t ret = 0;
183
184     /* Check for truncation */
185     if (new_size != (size_t)new_size) {
186         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cache size",
187                    "exceeding address space");
188         return -1;
189     }
190
191     if (new_size == migrate_xbzrle_cache_size()) {
192         /* nothing to do */
193         return 0;
194     }
195
196     XBZRLE_cache_lock();
197
198     if (XBZRLE.cache != NULL) {
199         new_cache = cache_init(new_size, TARGET_PAGE_SIZE, errp);
200         if (!new_cache) {
201             ret = -1;
202             goto out;
203         }
204
205         cache_fini(XBZRLE.cache);
206         XBZRLE.cache = new_cache;
207     }
208 out:
209     XBZRLE_cache_unlock();
210     return ret;
211 }
212
213 static bool postcopy_preempt_active(void)
214 {
215     return migrate_postcopy_preempt() && migration_in_postcopy();
216 }
217
218 bool ramblock_is_ignored(RAMBlock *block)
219 {
220     return !qemu_ram_is_migratable(block) ||
221            (migrate_ignore_shared() && qemu_ram_is_shared(block));
222 }
223
224 #undef RAMBLOCK_FOREACH
225
226 int foreach_not_ignored_block(RAMBlockIterFunc func, void *opaque)
227 {
228     RAMBlock *block;
229     int ret = 0;
230
231     RCU_READ_LOCK_GUARD();
232
233     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
234         ret = func(block, opaque);
235         if (ret) {
236             break;
237         }
238     }
239     return ret;
240 }
241
242 static void ramblock_recv_map_init(void)
243 {
244     RAMBlock *rb;
245
246     RAMBLOCK_FOREACH_NOT_IGNORED(rb) {
247         assert(!rb->receivedmap);
248         rb->receivedmap = bitmap_new(rb->max_length >> qemu_target_page_bits());
249     }
250 }
251
252 int ramblock_recv_bitmap_test(RAMBlock *rb, void *host_addr)
253 {
254     return test_bit(ramblock_recv_bitmap_offset(host_addr, rb),
255                     rb->receivedmap);
256 }
257
258 bool ramblock_recv_bitmap_test_byte_offset(RAMBlock *rb, uint64_t byte_offset)
259 {
260     return test_bit(byte_offset >> TARGET_PAGE_BITS, rb->receivedmap);
261 }
262
263 void ramblock_recv_bitmap_set(RAMBlock *rb, void *host_addr)
264 {
265     set_bit_atomic(ramblock_recv_bitmap_offset(host_addr, rb), rb->receivedmap);
266 }
267
268 void ramblock_recv_bitmap_set_range(RAMBlock *rb, void *host_addr,
269                                     size_t nr)
270 {
271     bitmap_set_atomic(rb->receivedmap,
272                       ramblock_recv_bitmap_offset(host_addr, rb),
273                       nr);
274 }
275
276 #define  RAMBLOCK_RECV_BITMAP_ENDING  (0x0123456789abcdefULL)
277
278 /*
279  * Format: bitmap_size (8 bytes) + whole_bitmap (N bytes).
280  *
281  * Returns >0 if success with sent bytes, or <0 if error.
282  */
283 int64_t ramblock_recv_bitmap_send(QEMUFile *file,
284                                   const char *block_name)
285 {
286     RAMBlock *block = qemu_ram_block_by_name(block_name);
287     unsigned long *le_bitmap, nbits;
288     uint64_t size;
289
290     if (!block) {
291         error_report("%s: invalid block name: %s", __func__, block_name);
292         return -1;
293     }
294
295     nbits = block->postcopy_length >> TARGET_PAGE_BITS;
296
297     /*
298      * Make sure the tmp bitmap buffer is big enough, e.g., on 32bit
299      * machines we may need 4 more bytes for padding (see below
300      * comment). So extend it a bit before hand.
301      */
302     le_bitmap = bitmap_new(nbits + BITS_PER_LONG);
303
304     /*
305      * Always use little endian when sending the bitmap. This is
306      * required that when source and destination VMs are not using the
307      * same endianness. (Note: big endian won't work.)
308      */
309     bitmap_to_le(le_bitmap, block->receivedmap, nbits);
310
311     /* Size of the bitmap, in bytes */
312     size = DIV_ROUND_UP(nbits, 8);
313
314     /*
315      * size is always aligned to 8 bytes for 64bit machines, but it
316      * may not be true for 32bit machines. We need this padding to
317      * make sure the migration can survive even between 32bit and
318      * 64bit machines.
319      */
320     size = ROUND_UP(size, 8);
321
322     qemu_put_be64(file, size);
323     qemu_put_buffer(file, (const uint8_t *)le_bitmap, size);
324     /*
325      * Mark as an end, in case the middle part is screwed up due to
326      * some "mysterious" reason.
327      */
328     qemu_put_be64(file, RAMBLOCK_RECV_BITMAP_ENDING);
329     qemu_fflush(file);
330
331     g_free(le_bitmap);
332
333     if (qemu_file_get_error(file)) {
334         return qemu_file_get_error(file);
335     }
336
337     return size + sizeof(size);
338 }
339
340 /*
341  * An outstanding page request, on the source, having been received
342  * and queued
343  */
344 struct RAMSrcPageRequest {
345     RAMBlock *rb;
346     hwaddr    offset;
347     hwaddr    len;
348
349     QSIMPLEQ_ENTRY(RAMSrcPageRequest) next_req;
350 };
351
352 /* State of RAM for migration */
353 struct RAMState {
354     /*
355      * PageSearchStatus structures for the channels when send pages.
356      * Protected by the bitmap_mutex.
357      */
358     PageSearchStatus pss[RAM_CHANNEL_MAX];
359     /* UFFD file descriptor, used in 'write-tracking' migration */
360     int uffdio_fd;
361     /* total ram size in bytes */
362     uint64_t ram_bytes_total;
363     /* Last block that we have visited searching for dirty pages */
364     RAMBlock *last_seen_block;
365     /* Last dirty target page we have sent */
366     ram_addr_t last_page;
367     /* last ram version we have seen */
368     uint32_t last_version;
369     /* How many times we have dirty too many pages */
370     int dirty_rate_high_cnt;
371     /* these variables are used for bitmap sync */
372     /* last time we did a full bitmap_sync */
373     int64_t time_last_bitmap_sync;
374     /* bytes transferred at start_time */
375     uint64_t bytes_xfer_prev;
376     /* number of dirty pages since start_time */
377     uint64_t num_dirty_pages_period;
378     /* xbzrle misses since the beginning of the period */
379     uint64_t xbzrle_cache_miss_prev;
380     /* Amount of xbzrle pages since the beginning of the period */
381     uint64_t xbzrle_pages_prev;
382     /* Amount of xbzrle encoded bytes since the beginning of the period */
383     uint64_t xbzrle_bytes_prev;
384     /* Start using XBZRLE (e.g., after the first round). */
385     bool xbzrle_enabled;
386     /* Are we on the last stage of migration */
387     bool last_stage;
388     /* compression statistics since the beginning of the period */
389     /* amount of count that no free thread to compress data */
390     uint64_t compress_thread_busy_prev;
391     /* amount bytes after compression */
392     uint64_t compressed_size_prev;
393     /* amount of compressed pages */
394     uint64_t compress_pages_prev;
395
396     /* total handled target pages at the beginning of period */
397     uint64_t target_page_count_prev;
398     /* total handled target pages since start */
399     uint64_t target_page_count;
400     /* number of dirty bits in the bitmap */
401     uint64_t migration_dirty_pages;
402     /*
403      * Protects:
404      * - dirty/clear bitmap
405      * - migration_dirty_pages
406      * - pss structures
407      */
408     QemuMutex bitmap_mutex;
409     /* The RAMBlock used in the last src_page_requests */
410     RAMBlock *last_req_rb;
411     /* Queue of outstanding page requests from the destination */
412     QemuMutex src_page_req_mutex;
413     QSIMPLEQ_HEAD(, RAMSrcPageRequest) src_page_requests;
414 };
415 typedef struct RAMState RAMState;
416
417 static RAMState *ram_state;
418
419 static NotifierWithReturnList precopy_notifier_list;
420
421 /* Whether postcopy has queued requests? */
422 static bool postcopy_has_request(RAMState *rs)
423 {
424     return !QSIMPLEQ_EMPTY_ATOMIC(&rs->src_page_requests);
425 }
426
427 void precopy_infrastructure_init(void)
428 {
429     notifier_with_return_list_init(&precopy_notifier_list);
430 }
431
432 void precopy_add_notifier(NotifierWithReturn *n)
433 {
434     notifier_with_return_list_add(&precopy_notifier_list, n);
435 }
436
437 void precopy_remove_notifier(NotifierWithReturn *n)
438 {
439     notifier_with_return_remove(n);
440 }
441
442 int precopy_notify(PrecopyNotifyReason reason, Error **errp)
443 {
444     PrecopyNotifyData pnd;
445     pnd.reason = reason;
446     pnd.errp = errp;
447
448     return notifier_with_return_list_notify(&precopy_notifier_list, &pnd);
449 }
450
451 uint64_t ram_bytes_remaining(void)
452 {
453     return ram_state ? (ram_state->migration_dirty_pages * TARGET_PAGE_SIZE) :
454                        0;
455 }
456
457 /*
458  * NOTE: not all stats in ram_counters are used in reality.  See comments
459  * for struct MigrationAtomicStats.  The ultimate result of ram migration
460  * counters will be a merged version with both ram_counters and the atomic
461  * fields in ram_atomic_counters.
462  */
463 MigrationStats ram_counters;
464 MigrationAtomicStats ram_atomic_counters;
465
466 void ram_transferred_add(uint64_t bytes)
467 {
468     if (runstate_is_running()) {
469         ram_counters.precopy_bytes += bytes;
470     } else if (migration_in_postcopy()) {
471         stat64_add(&ram_atomic_counters.postcopy_bytes, bytes);
472     } else {
473         ram_counters.downtime_bytes += bytes;
474     }
475     stat64_add(&ram_atomic_counters.transferred, bytes);
476 }
477
478 void dirty_sync_missed_zero_copy(void)
479 {
480     ram_counters.dirty_sync_missed_zero_copy++;
481 }
482
483 struct MigrationOps {
484     int (*ram_save_target_page)(RAMState *rs, PageSearchStatus *pss);
485 };
486 typedef struct MigrationOps MigrationOps;
487
488 MigrationOps *migration_ops;
489
490 CompressionStats compression_counters;
491
492 struct CompressParam {
493     bool done;
494     bool quit;
495     bool zero_page;
496     QEMUFile *file;
497     QemuMutex mutex;
498     QemuCond cond;
499     RAMBlock *block;
500     ram_addr_t offset;
501
502     /* internally used fields */
503     z_stream stream;
504     uint8_t *originbuf;
505 };
506 typedef struct CompressParam CompressParam;
507
508 struct DecompressParam {
509     bool done;
510     bool quit;
511     QemuMutex mutex;
512     QemuCond cond;
513     void *des;
514     uint8_t *compbuf;
515     int len;
516     z_stream stream;
517 };
518 typedef struct DecompressParam DecompressParam;
519
520 static CompressParam *comp_param;
521 static QemuThread *compress_threads;
522 /* comp_done_cond is used to wake up the migration thread when
523  * one of the compression threads has finished the compression.
524  * comp_done_lock is used to co-work with comp_done_cond.
525  */
526 static QemuMutex comp_done_lock;
527 static QemuCond comp_done_cond;
528
529 static QEMUFile *decomp_file;
530 static DecompressParam *decomp_param;
531 static QemuThread *decompress_threads;
532 static QemuMutex decomp_done_lock;
533 static QemuCond decomp_done_cond;
534
535 static int ram_save_host_page_urgent(PageSearchStatus *pss);
536
537 static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block,
538                                  ram_addr_t offset, uint8_t *source_buf);
539
540 /* NOTE: page is the PFN not real ram_addr_t. */
541 static void pss_init(PageSearchStatus *pss, RAMBlock *rb, ram_addr_t page)
542 {
543     pss->block = rb;
544     pss->page = page;
545     pss->complete_round = false;
546 }
547
548 /*
549  * Check whether two PSSs are actively sending the same page.  Return true
550  * if it is, false otherwise.
551  */
552 static bool pss_overlap(PageSearchStatus *pss1, PageSearchStatus *pss2)
553 {
554     return pss1->host_page_sending && pss2->host_page_sending &&
555         (pss1->host_page_start == pss2->host_page_start);
556 }
557
558 static void *do_data_compress(void *opaque)
559 {
560     CompressParam *param = opaque;
561     RAMBlock *block;
562     ram_addr_t offset;
563     bool zero_page;
564
565     qemu_mutex_lock(&param->mutex);
566     while (!param->quit) {
567         if (param->block) {
568             block = param->block;
569             offset = param->offset;
570             param->block = NULL;
571             qemu_mutex_unlock(&param->mutex);
572
573             zero_page = do_compress_ram_page(param->file, &param->stream,
574                                              block, offset, param->originbuf);
575
576             qemu_mutex_lock(&comp_done_lock);
577             param->done = true;
578             param->zero_page = zero_page;
579             qemu_cond_signal(&comp_done_cond);
580             qemu_mutex_unlock(&comp_done_lock);
581
582             qemu_mutex_lock(&param->mutex);
583         } else {
584             qemu_cond_wait(&param->cond, &param->mutex);
585         }
586     }
587     qemu_mutex_unlock(&param->mutex);
588
589     return NULL;
590 }
591
592 static void compress_threads_save_cleanup(void)
593 {
594     int i, thread_count;
595
596     if (!migrate_use_compression() || !comp_param) {
597         return;
598     }
599
600     thread_count = migrate_compress_threads();
601     for (i = 0; i < thread_count; i++) {
602         /*
603          * we use it as a indicator which shows if the thread is
604          * properly init'd or not
605          */
606         if (!comp_param[i].file) {
607             break;
608         }
609
610         qemu_mutex_lock(&comp_param[i].mutex);
611         comp_param[i].quit = true;
612         qemu_cond_signal(&comp_param[i].cond);
613         qemu_mutex_unlock(&comp_param[i].mutex);
614
615         qemu_thread_join(compress_threads + i);
616         qemu_mutex_destroy(&comp_param[i].mutex);
617         qemu_cond_destroy(&comp_param[i].cond);
618         deflateEnd(&comp_param[i].stream);
619         g_free(comp_param[i].originbuf);
620         qemu_fclose(comp_param[i].file);
621         comp_param[i].file = NULL;
622     }
623     qemu_mutex_destroy(&comp_done_lock);
624     qemu_cond_destroy(&comp_done_cond);
625     g_free(compress_threads);
626     g_free(comp_param);
627     compress_threads = NULL;
628     comp_param = NULL;
629 }
630
631 static int compress_threads_save_setup(void)
632 {
633     int i, thread_count;
634
635     if (!migrate_use_compression()) {
636         return 0;
637     }
638     thread_count = migrate_compress_threads();
639     compress_threads = g_new0(QemuThread, thread_count);
640     comp_param = g_new0(CompressParam, thread_count);
641     qemu_cond_init(&comp_done_cond);
642     qemu_mutex_init(&comp_done_lock);
643     for (i = 0; i < thread_count; i++) {
644         comp_param[i].originbuf = g_try_malloc(TARGET_PAGE_SIZE);
645         if (!comp_param[i].originbuf) {
646             goto exit;
647         }
648
649         if (deflateInit(&comp_param[i].stream,
650                         migrate_compress_level()) != Z_OK) {
651             g_free(comp_param[i].originbuf);
652             goto exit;
653         }
654
655         /* comp_param[i].file is just used as a dummy buffer to save data,
656          * set its ops to empty.
657          */
658         comp_param[i].file = qemu_file_new_output(
659             QIO_CHANNEL(qio_channel_null_new()));
660         comp_param[i].done = true;
661         comp_param[i].quit = false;
662         qemu_mutex_init(&comp_param[i].mutex);
663         qemu_cond_init(&comp_param[i].cond);
664         qemu_thread_create(compress_threads + i, "compress",
665                            do_data_compress, comp_param + i,
666                            QEMU_THREAD_JOINABLE);
667     }
668     return 0;
669
670 exit:
671     compress_threads_save_cleanup();
672     return -1;
673 }
674
675 /**
676  * save_page_header: write page header to wire
677  *
678  * If this is the 1st block, it also writes the block identification
679  *
680  * Returns the number of bytes written
681  *
682  * @pss: current PSS channel status
683  * @block: block that contains the page we want to send
684  * @offset: offset inside the block for the page
685  *          in the lower bits, it contains flags
686  */
687 static size_t save_page_header(PageSearchStatus *pss, RAMBlock *block,
688                                ram_addr_t offset)
689 {
690     size_t size, len;
691     bool same_block = (block == pss->last_sent_block);
692     QEMUFile *f = pss->pss_channel;
693
694     if (same_block) {
695         offset |= RAM_SAVE_FLAG_CONTINUE;
696     }
697     qemu_put_be64(f, offset);
698     size = 8;
699
700     if (!same_block) {
701         len = strlen(block->idstr);
702         qemu_put_byte(f, len);
703         qemu_put_buffer(f, (uint8_t *)block->idstr, len);
704         size += 1 + len;
705         pss->last_sent_block = block;
706     }
707     return size;
708 }
709
710 /**
711  * mig_throttle_guest_down: throttle down the guest
712  *
713  * Reduce amount of guest cpu execution to hopefully slow down memory
714  * writes. If guest dirty memory rate is reduced below the rate at
715  * which we can transfer pages to the destination then we should be
716  * able to complete migration. Some workloads dirty memory way too
717  * fast and will not effectively converge, even with auto-converge.
718  */
719 static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
720                                     uint64_t bytes_dirty_threshold)
721 {
722     MigrationState *s = migrate_get_current();
723     uint64_t pct_initial = s->parameters.cpu_throttle_initial;
724     uint64_t pct_increment = s->parameters.cpu_throttle_increment;
725     bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
726     int pct_max = s->parameters.max_cpu_throttle;
727
728     uint64_t throttle_now = cpu_throttle_get_percentage();
729     uint64_t cpu_now, cpu_ideal, throttle_inc;
730
731     /* We have not started throttling yet. Let's start it. */
732     if (!cpu_throttle_active()) {
733         cpu_throttle_set(pct_initial);
734     } else {
735         /* Throttling already on, just increase the rate */
736         if (!pct_tailslow) {
737             throttle_inc = pct_increment;
738         } else {
739             /* Compute the ideal CPU percentage used by Guest, which may
740              * make the dirty rate match the dirty rate threshold. */
741             cpu_now = 100 - throttle_now;
742             cpu_ideal = cpu_now * (bytes_dirty_threshold * 1.0 /
743                         bytes_dirty_period);
744             throttle_inc = MIN(cpu_now - cpu_ideal, pct_increment);
745         }
746         cpu_throttle_set(MIN(throttle_now + throttle_inc, pct_max));
747     }
748 }
749
750 void mig_throttle_counter_reset(void)
751 {
752     RAMState *rs = ram_state;
753
754     rs->time_last_bitmap_sync = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
755     rs->num_dirty_pages_period = 0;
756     rs->bytes_xfer_prev = stat64_get(&ram_atomic_counters.transferred);
757 }
758
759 /**
760  * xbzrle_cache_zero_page: insert a zero page in the XBZRLE cache
761  *
762  * @rs: current RAM state
763  * @current_addr: address for the zero page
764  *
765  * Update the xbzrle cache to reflect a page that's been sent as all 0.
766  * The important thing is that a stale (not-yet-0'd) page be replaced
767  * by the new data.
768  * As a bonus, if the page wasn't in the cache it gets added so that
769  * when a small write is made into the 0'd page it gets XBZRLE sent.
770  */
771 static void xbzrle_cache_zero_page(RAMState *rs, ram_addr_t current_addr)
772 {
773     /* We don't care if this fails to allocate a new cache page
774      * as long as it updated an old one */
775     cache_insert(XBZRLE.cache, current_addr, XBZRLE.zero_target_page,
776                  ram_counters.dirty_sync_count);
777 }
778
779 #define ENCODING_FLAG_XBZRLE 0x1
780
781 /**
782  * save_xbzrle_page: compress and send current page
783  *
784  * Returns: 1 means that we wrote the page
785  *          0 means that page is identical to the one already sent
786  *          -1 means that xbzrle would be longer than normal
787  *
788  * @rs: current RAM state
789  * @pss: current PSS channel
790  * @current_data: pointer to the address of the page contents
791  * @current_addr: addr of the page
792  * @block: block that contains the page we want to send
793  * @offset: offset inside the block for the page
794  */
795 static int save_xbzrle_page(RAMState *rs, PageSearchStatus *pss,
796                             uint8_t **current_data, ram_addr_t current_addr,
797                             RAMBlock *block, ram_addr_t offset)
798 {
799     int encoded_len = 0, bytes_xbzrle;
800     uint8_t *prev_cached_page;
801     QEMUFile *file = pss->pss_channel;
802
803     if (!cache_is_cached(XBZRLE.cache, current_addr,
804                          ram_counters.dirty_sync_count)) {
805         xbzrle_counters.cache_miss++;
806         if (!rs->last_stage) {
807             if (cache_insert(XBZRLE.cache, current_addr, *current_data,
808                              ram_counters.dirty_sync_count) == -1) {
809                 return -1;
810             } else {
811                 /* update *current_data when the page has been
812                    inserted into cache */
813                 *current_data = get_cached_data(XBZRLE.cache, current_addr);
814             }
815         }
816         return -1;
817     }
818
819     /*
820      * Reaching here means the page has hit the xbzrle cache, no matter what
821      * encoding result it is (normal encoding, overflow or skipping the page),
822      * count the page as encoded. This is used to calculate the encoding rate.
823      *
824      * Example: 2 pages (8KB) being encoded, first page encoding generates 2KB,
825      * 2nd page turns out to be skipped (i.e. no new bytes written to the
826      * page), the overall encoding rate will be 8KB / 2KB = 4, which has the
827      * skipped page included. In this way, the encoding rate can tell if the
828      * guest page is good for xbzrle encoding.
829      */
830     xbzrle_counters.pages++;
831     prev_cached_page = get_cached_data(XBZRLE.cache, current_addr);
832
833     /* save current buffer into memory */
834     memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE);
835
836     /* XBZRLE encoding (if there is no overflow) */
837     encoded_len = xbzrle_encode_buffer_func(prev_cached_page, XBZRLE.current_buf,
838                                             TARGET_PAGE_SIZE, XBZRLE.encoded_buf,
839                                             TARGET_PAGE_SIZE);
840
841     /*
842      * Update the cache contents, so that it corresponds to the data
843      * sent, in all cases except where we skip the page.
844      */
845     if (!rs->last_stage && encoded_len != 0) {
846         memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
847         /*
848          * In the case where we couldn't compress, ensure that the caller
849          * sends the data from the cache, since the guest might have
850          * changed the RAM since we copied it.
851          */
852         *current_data = prev_cached_page;
853     }
854
855     if (encoded_len == 0) {
856         trace_save_xbzrle_page_skipping();
857         return 0;
858     } else if (encoded_len == -1) {
859         trace_save_xbzrle_page_overflow();
860         xbzrle_counters.overflow++;
861         xbzrle_counters.bytes += TARGET_PAGE_SIZE;
862         return -1;
863     }
864
865     /* Send XBZRLE based compressed page */
866     bytes_xbzrle = save_page_header(pss, block,
867                                     offset | RAM_SAVE_FLAG_XBZRLE);
868     qemu_put_byte(file, ENCODING_FLAG_XBZRLE);
869     qemu_put_be16(file, encoded_len);
870     qemu_put_buffer(file, XBZRLE.encoded_buf, encoded_len);
871     bytes_xbzrle += encoded_len + 1 + 2;
872     /*
873      * Like compressed_size (please see update_compress_thread_counts),
874      * the xbzrle encoded bytes don't count the 8 byte header with
875      * RAM_SAVE_FLAG_CONTINUE.
876      */
877     xbzrle_counters.bytes += bytes_xbzrle - 8;
878     ram_transferred_add(bytes_xbzrle);
879
880     return 1;
881 }
882
883 /**
884  * pss_find_next_dirty: find the next dirty page of current ramblock
885  *
886  * This function updates pss->page to point to the next dirty page index
887  * within the ramblock to migrate, or the end of ramblock when nothing
888  * found.  Note that when pss->host_page_sending==true it means we're
889  * during sending a host page, so we won't look for dirty page that is
890  * outside the host page boundary.
891  *
892  * @pss: the current page search status
893  */
894 static void pss_find_next_dirty(PageSearchStatus *pss)
895 {
896     RAMBlock *rb = pss->block;
897     unsigned long size = rb->used_length >> TARGET_PAGE_BITS;
898     unsigned long *bitmap = rb->bmap;
899
900     if (ramblock_is_ignored(rb)) {
901         /* Points directly to the end, so we know no dirty page */
902         pss->page = size;
903         return;
904     }
905
906     /*
907      * If during sending a host page, only look for dirty pages within the
908      * current host page being send.
909      */
910     if (pss->host_page_sending) {
911         assert(pss->host_page_end);
912         size = MIN(size, pss->host_page_end);
913     }
914
915     pss->page = find_next_bit(bitmap, size, pss->page);
916 }
917
918 static void migration_clear_memory_region_dirty_bitmap(RAMBlock *rb,
919                                                        unsigned long page)
920 {
921     uint8_t shift;
922     hwaddr size, start;
923
924     if (!rb->clear_bmap || !clear_bmap_test_and_clear(rb, page)) {
925         return;
926     }
927
928     shift = rb->clear_bmap_shift;
929     /*
930      * CLEAR_BITMAP_SHIFT_MIN should always guarantee this... this
931      * can make things easier sometimes since then start address
932      * of the small chunk will always be 64 pages aligned so the
933      * bitmap will always be aligned to unsigned long. We should
934      * even be able to remove this restriction but I'm simply
935      * keeping it.
936      */
937     assert(shift >= 6);
938
939     size = 1ULL << (TARGET_PAGE_BITS + shift);
940     start = QEMU_ALIGN_DOWN((ram_addr_t)page << TARGET_PAGE_BITS, size);
941     trace_migration_bitmap_clear_dirty(rb->idstr, start, size, page);
942     memory_region_clear_dirty_bitmap(rb->mr, start, size);
943 }
944
945 static void
946 migration_clear_memory_region_dirty_bitmap_range(RAMBlock *rb,
947                                                  unsigned long start,
948                                                  unsigned long npages)
949 {
950     unsigned long i, chunk_pages = 1UL << rb->clear_bmap_shift;
951     unsigned long chunk_start = QEMU_ALIGN_DOWN(start, chunk_pages);
952     unsigned long chunk_end = QEMU_ALIGN_UP(start + npages, chunk_pages);
953
954     /*
955      * Clear pages from start to start + npages - 1, so the end boundary is
956      * exclusive.
957      */
958     for (i = chunk_start; i < chunk_end; i += chunk_pages) {
959         migration_clear_memory_region_dirty_bitmap(rb, i);
960     }
961 }
962
963 /*
964  * colo_bitmap_find_diry:find contiguous dirty pages from start
965  *
966  * Returns the page offset within memory region of the start of the contiguout
967  * dirty page
968  *
969  * @rs: current RAM state
970  * @rb: RAMBlock where to search for dirty pages
971  * @start: page where we start the search
972  * @num: the number of contiguous dirty pages
973  */
974 static inline
975 unsigned long colo_bitmap_find_dirty(RAMState *rs, RAMBlock *rb,
976                                      unsigned long start, unsigned long *num)
977 {
978     unsigned long size = rb->used_length >> TARGET_PAGE_BITS;
979     unsigned long *bitmap = rb->bmap;
980     unsigned long first, next;
981
982     *num = 0;
983
984     if (ramblock_is_ignored(rb)) {
985         return size;
986     }
987
988     first = find_next_bit(bitmap, size, start);
989     if (first >= size) {
990         return first;
991     }
992     next = find_next_zero_bit(bitmap, size, first + 1);
993     assert(next >= first);
994     *num = next - first;
995     return first;
996 }
997
998 static inline bool migration_bitmap_clear_dirty(RAMState *rs,
999                                                 RAMBlock *rb,
1000                                                 unsigned long page)
1001 {
1002     bool ret;
1003
1004     /*
1005      * Clear dirty bitmap if needed.  This _must_ be called before we
1006      * send any of the page in the chunk because we need to make sure
1007      * we can capture further page content changes when we sync dirty
1008      * log the next time.  So as long as we are going to send any of
1009      * the page in the chunk we clear the remote dirty bitmap for all.
1010      * Clearing it earlier won't be a problem, but too late will.
1011      */
1012     migration_clear_memory_region_dirty_bitmap(rb, page);
1013
1014     ret = test_and_clear_bit(page, rb->bmap);
1015     if (ret) {
1016         rs->migration_dirty_pages--;
1017     }
1018
1019     return ret;
1020 }
1021
1022 static void dirty_bitmap_clear_section(MemoryRegionSection *section,
1023                                        void *opaque)
1024 {
1025     const hwaddr offset = section->offset_within_region;
1026     const hwaddr size = int128_get64(section->size);
1027     const unsigned long start = offset >> TARGET_PAGE_BITS;
1028     const unsigned long npages = size >> TARGET_PAGE_BITS;
1029     RAMBlock *rb = section->mr->ram_block;
1030     uint64_t *cleared_bits = opaque;
1031
1032     /*
1033      * We don't grab ram_state->bitmap_mutex because we expect to run
1034      * only when starting migration or during postcopy recovery where
1035      * we don't have concurrent access.
1036      */
1037     if (!migration_in_postcopy() && !migrate_background_snapshot()) {
1038         migration_clear_memory_region_dirty_bitmap_range(rb, start, npages);
1039     }
1040     *cleared_bits += bitmap_count_one_with_offset(rb->bmap, start, npages);
1041     bitmap_clear(rb->bmap, start, npages);
1042 }
1043
1044 /*
1045  * Exclude all dirty pages from migration that fall into a discarded range as
1046  * managed by a RamDiscardManager responsible for the mapped memory region of
1047  * the RAMBlock. Clear the corresponding bits in the dirty bitmaps.
1048  *
1049  * Discarded pages ("logically unplugged") have undefined content and must
1050  * not get migrated, because even reading these pages for migration might
1051  * result in undesired behavior.
1052  *
1053  * Returns the number of cleared bits in the RAMBlock dirty bitmap.
1054  *
1055  * Note: The result is only stable while migrating (precopy/postcopy).
1056  */
1057 static uint64_t ramblock_dirty_bitmap_clear_discarded_pages(RAMBlock *rb)
1058 {
1059     uint64_t cleared_bits = 0;
1060
1061     if (rb->mr && rb->bmap && memory_region_has_ram_discard_manager(rb->mr)) {
1062         RamDiscardManager *rdm = memory_region_get_ram_discard_manager(rb->mr);
1063         MemoryRegionSection section = {
1064             .mr = rb->mr,
1065             .offset_within_region = 0,
1066             .size = int128_make64(qemu_ram_get_used_length(rb)),
1067         };
1068
1069         ram_discard_manager_replay_discarded(rdm, &section,
1070                                              dirty_bitmap_clear_section,
1071                                              &cleared_bits);
1072     }
1073     return cleared_bits;
1074 }
1075
1076 /*
1077  * Check if a host-page aligned page falls into a discarded range as managed by
1078  * a RamDiscardManager responsible for the mapped memory region of the RAMBlock.
1079  *
1080  * Note: The result is only stable while migrating (precopy/postcopy).
1081  */
1082 bool ramblock_page_is_discarded(RAMBlock *rb, ram_addr_t start)
1083 {
1084     if (rb->mr && memory_region_has_ram_discard_manager(rb->mr)) {
1085         RamDiscardManager *rdm = memory_region_get_ram_discard_manager(rb->mr);
1086         MemoryRegionSection section = {
1087             .mr = rb->mr,
1088             .offset_within_region = start,
1089             .size = int128_make64(qemu_ram_pagesize(rb)),
1090         };
1091
1092         return !ram_discard_manager_is_populated(rdm, &section);
1093     }
1094     return false;
1095 }
1096
1097 /* Called with RCU critical section */
1098 static void ramblock_sync_dirty_bitmap(RAMState *rs, RAMBlock *rb)
1099 {
1100     uint64_t new_dirty_pages =
1101         cpu_physical_memory_sync_dirty_bitmap(rb, 0, rb->used_length);
1102
1103     rs->migration_dirty_pages += new_dirty_pages;
1104     rs->num_dirty_pages_period += new_dirty_pages;
1105 }
1106
1107 /**
1108  * ram_pagesize_summary: calculate all the pagesizes of a VM
1109  *
1110  * Returns a summary bitmap of the page sizes of all RAMBlocks
1111  *
1112  * For VMs with just normal pages this is equivalent to the host page
1113  * size. If it's got some huge pages then it's the OR of all the
1114  * different page sizes.
1115  */
1116 uint64_t ram_pagesize_summary(void)
1117 {
1118     RAMBlock *block;
1119     uint64_t summary = 0;
1120
1121     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
1122         summary |= block->page_size;
1123     }
1124
1125     return summary;
1126 }
1127
1128 uint64_t ram_get_total_transferred_pages(void)
1129 {
1130     return  stat64_get(&ram_atomic_counters.normal) +
1131         stat64_get(&ram_atomic_counters.duplicate) +
1132         compression_counters.pages + xbzrle_counters.pages;
1133 }
1134
1135 static void migration_update_rates(RAMState *rs, int64_t end_time)
1136 {
1137     uint64_t page_count = rs->target_page_count - rs->target_page_count_prev;
1138     double compressed_size;
1139
1140     /* calculate period counters */
1141     ram_counters.dirty_pages_rate = rs->num_dirty_pages_period * 1000
1142                 / (end_time - rs->time_last_bitmap_sync);
1143
1144     if (!page_count) {
1145         return;
1146     }
1147
1148     if (migrate_use_xbzrle()) {
1149         double encoded_size, unencoded_size;
1150
1151         xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
1152             rs->xbzrle_cache_miss_prev) / page_count;
1153         rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss;
1154         unencoded_size = (xbzrle_counters.pages - rs->xbzrle_pages_prev) *
1155                          TARGET_PAGE_SIZE;
1156         encoded_size = xbzrle_counters.bytes - rs->xbzrle_bytes_prev;
1157         if (xbzrle_counters.pages == rs->xbzrle_pages_prev || !encoded_size) {
1158             xbzrle_counters.encoding_rate = 0;
1159         } else {
1160             xbzrle_counters.encoding_rate = unencoded_size / encoded_size;
1161         }
1162         rs->xbzrle_pages_prev = xbzrle_counters.pages;
1163         rs->xbzrle_bytes_prev = xbzrle_counters.bytes;
1164     }
1165
1166     if (migrate_use_compression()) {
1167         compression_counters.busy_rate = (double)(compression_counters.busy -
1168             rs->compress_thread_busy_prev) / page_count;
1169         rs->compress_thread_busy_prev = compression_counters.busy;
1170
1171         compressed_size = compression_counters.compressed_size -
1172                           rs->compressed_size_prev;
1173         if (compressed_size) {
1174             double uncompressed_size = (compression_counters.pages -
1175                                     rs->compress_pages_prev) * TARGET_PAGE_SIZE;
1176
1177             /* Compression-Ratio = Uncompressed-size / Compressed-size */
1178             compression_counters.compression_rate =
1179                                         uncompressed_size / compressed_size;
1180
1181             rs->compress_pages_prev = compression_counters.pages;
1182             rs->compressed_size_prev = compression_counters.compressed_size;
1183         }
1184     }
1185 }
1186
1187 static void migration_trigger_throttle(RAMState *rs)
1188 {
1189     MigrationState *s = migrate_get_current();
1190     uint64_t threshold = s->parameters.throttle_trigger_threshold;
1191     uint64_t bytes_xfer_period =
1192         stat64_get(&ram_atomic_counters.transferred) - rs->bytes_xfer_prev;
1193     uint64_t bytes_dirty_period = rs->num_dirty_pages_period * TARGET_PAGE_SIZE;
1194     uint64_t bytes_dirty_threshold = bytes_xfer_period * threshold / 100;
1195
1196     /* During block migration the auto-converge logic incorrectly detects
1197      * that ram migration makes no progress. Avoid this by disabling the
1198      * throttling logic during the bulk phase of block migration. */
1199     if (migrate_auto_converge() && !blk_mig_bulk_active()) {
1200         /* The following detection logic can be refined later. For now:
1201            Check to see if the ratio between dirtied bytes and the approx.
1202            amount of bytes that just got transferred since the last time
1203            we were in this routine reaches the threshold. If that happens
1204            twice, start or increase throttling. */
1205
1206         if ((bytes_dirty_period > bytes_dirty_threshold) &&
1207             (++rs->dirty_rate_high_cnt >= 2)) {
1208             trace_migration_throttle();
1209             rs->dirty_rate_high_cnt = 0;
1210             mig_throttle_guest_down(bytes_dirty_period,
1211                                     bytes_dirty_threshold);
1212         }
1213     }
1214 }
1215
1216 static void migration_bitmap_sync(RAMState *rs)
1217 {
1218     RAMBlock *block;
1219     int64_t end_time;
1220
1221     ram_counters.dirty_sync_count++;
1222
1223     if (!rs->time_last_bitmap_sync) {
1224         rs->time_last_bitmap_sync = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1225     }
1226
1227     trace_migration_bitmap_sync_start();
1228     memory_global_dirty_log_sync();
1229
1230     qemu_mutex_lock(&rs->bitmap_mutex);
1231     WITH_RCU_READ_LOCK_GUARD() {
1232         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
1233             ramblock_sync_dirty_bitmap(rs, block);
1234         }
1235         ram_counters.remaining = ram_bytes_remaining();
1236     }
1237     qemu_mutex_unlock(&rs->bitmap_mutex);
1238
1239     memory_global_after_dirty_log_sync();
1240     trace_migration_bitmap_sync_end(rs->num_dirty_pages_period);
1241
1242     end_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
1243
1244     /* more than 1 second = 1000 millisecons */
1245     if (end_time > rs->time_last_bitmap_sync + 1000) {
1246         migration_trigger_throttle(rs);
1247
1248         migration_update_rates(rs, end_time);
1249
1250         rs->target_page_count_prev = rs->target_page_count;
1251
1252         /* reset period counters */
1253         rs->time_last_bitmap_sync = end_time;
1254         rs->num_dirty_pages_period = 0;
1255         rs->bytes_xfer_prev = stat64_get(&ram_atomic_counters.transferred);
1256     }
1257     if (migrate_use_events()) {
1258         qapi_event_send_migration_pass(ram_counters.dirty_sync_count);
1259     }
1260 }
1261
1262 static void migration_bitmap_sync_precopy(RAMState *rs)
1263 {
1264     Error *local_err = NULL;
1265
1266     /*
1267      * The current notifier usage is just an optimization to migration, so we
1268      * don't stop the normal migration process in the error case.
1269      */
1270     if (precopy_notify(PRECOPY_NOTIFY_BEFORE_BITMAP_SYNC, &local_err)) {
1271         error_report_err(local_err);
1272         local_err = NULL;
1273     }
1274
1275     migration_bitmap_sync(rs);
1276
1277     if (precopy_notify(PRECOPY_NOTIFY_AFTER_BITMAP_SYNC, &local_err)) {
1278         error_report_err(local_err);
1279     }
1280 }
1281
1282 void ram_release_page(const char *rbname, uint64_t offset)
1283 {
1284     if (!migrate_release_ram() || !migration_in_postcopy()) {
1285         return;
1286     }
1287
1288     ram_discard_range(rbname, offset, TARGET_PAGE_SIZE);
1289 }
1290
1291 /**
1292  * save_zero_page_to_file: send the zero page to the file
1293  *
1294  * Returns the size of data written to the file, 0 means the page is not
1295  * a zero page
1296  *
1297  * @pss: current PSS channel
1298  * @block: block that contains the page we want to send
1299  * @offset: offset inside the block for the page
1300  */
1301 static int save_zero_page_to_file(PageSearchStatus *pss,
1302                                   RAMBlock *block, ram_addr_t offset)
1303 {
1304     uint8_t *p = block->host + offset;
1305     QEMUFile *file = pss->pss_channel;
1306     int len = 0;
1307
1308     if (buffer_is_zero(p, TARGET_PAGE_SIZE)) {
1309         len += save_page_header(pss, block, offset | RAM_SAVE_FLAG_ZERO);
1310         qemu_put_byte(file, 0);
1311         len += 1;
1312         ram_release_page(block->idstr, offset);
1313     }
1314     return len;
1315 }
1316
1317 /**
1318  * save_zero_page: send the zero page to the stream
1319  *
1320  * Returns the number of pages written.
1321  *
1322  * @pss: current PSS channel
1323  * @block: block that contains the page we want to send
1324  * @offset: offset inside the block for the page
1325  */
1326 static int save_zero_page(PageSearchStatus *pss, RAMBlock *block,
1327                           ram_addr_t offset)
1328 {
1329     int len = save_zero_page_to_file(pss, block, offset);
1330
1331     if (len) {
1332         stat64_add(&ram_atomic_counters.duplicate, 1);
1333         ram_transferred_add(len);
1334         return 1;
1335     }
1336     return -1;
1337 }
1338
1339 /*
1340  * @pages: the number of pages written by the control path,
1341  *        < 0 - error
1342  *        > 0 - number of pages written
1343  *
1344  * Return true if the pages has been saved, otherwise false is returned.
1345  */
1346 static bool control_save_page(PageSearchStatus *pss, RAMBlock *block,
1347                               ram_addr_t offset, int *pages)
1348 {
1349     uint64_t bytes_xmit = 0;
1350     int ret;
1351
1352     *pages = -1;
1353     ret = ram_control_save_page(pss->pss_channel, block->offset, offset,
1354                                 TARGET_PAGE_SIZE, &bytes_xmit);
1355     if (ret == RAM_SAVE_CONTROL_NOT_SUPP) {
1356         return false;
1357     }
1358
1359     if (bytes_xmit) {
1360         ram_transferred_add(bytes_xmit);
1361         *pages = 1;
1362     }
1363
1364     if (ret == RAM_SAVE_CONTROL_DELAYED) {
1365         return true;
1366     }
1367
1368     if (bytes_xmit > 0) {
1369         stat64_add(&ram_atomic_counters.normal, 1);
1370     } else if (bytes_xmit == 0) {
1371         stat64_add(&ram_atomic_counters.duplicate, 1);
1372     }
1373
1374     return true;
1375 }
1376
1377 /*
1378  * directly send the page to the stream
1379  *
1380  * Returns the number of pages written.
1381  *
1382  * @pss: current PSS channel
1383  * @block: block that contains the page we want to send
1384  * @offset: offset inside the block for the page
1385  * @buf: the page to be sent
1386  * @async: send to page asyncly
1387  */
1388 static int save_normal_page(PageSearchStatus *pss, RAMBlock *block,
1389                             ram_addr_t offset, uint8_t *buf, bool async)
1390 {
1391     QEMUFile *file = pss->pss_channel;
1392
1393     ram_transferred_add(save_page_header(pss, block,
1394                                          offset | RAM_SAVE_FLAG_PAGE));
1395     if (async) {
1396         qemu_put_buffer_async(file, buf, TARGET_PAGE_SIZE,
1397                               migrate_release_ram() &&
1398                               migration_in_postcopy());
1399     } else {
1400         qemu_put_buffer(file, buf, TARGET_PAGE_SIZE);
1401     }
1402     ram_transferred_add(TARGET_PAGE_SIZE);
1403     stat64_add(&ram_atomic_counters.normal, 1);
1404     return 1;
1405 }
1406
1407 /**
1408  * ram_save_page: send the given page to the stream
1409  *
1410  * Returns the number of pages written.
1411  *          < 0 - error
1412  *          >=0 - Number of pages written - this might legally be 0
1413  *                if xbzrle noticed the page was the same.
1414  *
1415  * @rs: current RAM state
1416  * @block: block that contains the page we want to send
1417  * @offset: offset inside the block for the page
1418  */
1419 static int ram_save_page(RAMState *rs, PageSearchStatus *pss)
1420 {
1421     int pages = -1;
1422     uint8_t *p;
1423     bool send_async = true;
1424     RAMBlock *block = pss->block;
1425     ram_addr_t offset = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS;
1426     ram_addr_t current_addr = block->offset + offset;
1427
1428     p = block->host + offset;
1429     trace_ram_save_page(block->idstr, (uint64_t)offset, p);
1430
1431     XBZRLE_cache_lock();
1432     if (rs->xbzrle_enabled && !migration_in_postcopy()) {
1433         pages = save_xbzrle_page(rs, pss, &p, current_addr,
1434                                  block, offset);
1435         if (!rs->last_stage) {
1436             /* Can't send this cached data async, since the cache page
1437              * might get updated before it gets to the wire
1438              */
1439             send_async = false;
1440         }
1441     }
1442
1443     /* XBZRLE overflow or normal page */
1444     if (pages == -1) {
1445         pages = save_normal_page(pss, block, offset, p, send_async);
1446     }
1447
1448     XBZRLE_cache_unlock();
1449
1450     return pages;
1451 }
1452
1453 static int ram_save_multifd_page(QEMUFile *file, RAMBlock *block,
1454                                  ram_addr_t offset)
1455 {
1456     if (multifd_queue_page(file, block, offset) < 0) {
1457         return -1;
1458     }
1459     stat64_add(&ram_atomic_counters.normal, 1);
1460
1461     return 1;
1462 }
1463
1464 static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block,
1465                                  ram_addr_t offset, uint8_t *source_buf)
1466 {
1467     RAMState *rs = ram_state;
1468     PageSearchStatus *pss = &rs->pss[RAM_CHANNEL_PRECOPY];
1469     uint8_t *p = block->host + offset;
1470     int ret;
1471
1472     if (save_zero_page_to_file(pss, block, offset)) {
1473         return true;
1474     }
1475
1476     save_page_header(pss, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE);
1477
1478     /*
1479      * copy it to a internal buffer to avoid it being modified by VM
1480      * so that we can catch up the error during compression and
1481      * decompression
1482      */
1483     memcpy(source_buf, p, TARGET_PAGE_SIZE);
1484     ret = qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_SIZE);
1485     if (ret < 0) {
1486         qemu_file_set_error(migrate_get_current()->to_dst_file, ret);
1487         error_report("compressed data failed!");
1488     }
1489     return false;
1490 }
1491
1492 static void
1493 update_compress_thread_counts(const CompressParam *param, int bytes_xmit)
1494 {
1495     ram_transferred_add(bytes_xmit);
1496
1497     if (param->zero_page) {
1498         stat64_add(&ram_atomic_counters.duplicate, 1);
1499         return;
1500     }
1501
1502     /* 8 means a header with RAM_SAVE_FLAG_CONTINUE. */
1503     compression_counters.compressed_size += bytes_xmit - 8;
1504     compression_counters.pages++;
1505 }
1506
1507 static bool save_page_use_compression(RAMState *rs);
1508
1509 static void flush_compressed_data(RAMState *rs)
1510 {
1511     MigrationState *ms = migrate_get_current();
1512     int idx, len, thread_count;
1513
1514     if (!save_page_use_compression(rs)) {
1515         return;
1516     }
1517     thread_count = migrate_compress_threads();
1518
1519     qemu_mutex_lock(&comp_done_lock);
1520     for (idx = 0; idx < thread_count; idx++) {
1521         while (!comp_param[idx].done) {
1522             qemu_cond_wait(&comp_done_cond, &comp_done_lock);
1523         }
1524     }
1525     qemu_mutex_unlock(&comp_done_lock);
1526
1527     for (idx = 0; idx < thread_count; idx++) {
1528         qemu_mutex_lock(&comp_param[idx].mutex);
1529         if (!comp_param[idx].quit) {
1530             len = qemu_put_qemu_file(ms->to_dst_file, comp_param[idx].file);
1531             /*
1532              * it's safe to fetch zero_page without holding comp_done_lock
1533              * as there is no further request submitted to the thread,
1534              * i.e, the thread should be waiting for a request at this point.
1535              */
1536             update_compress_thread_counts(&comp_param[idx], len);
1537         }
1538         qemu_mutex_unlock(&comp_param[idx].mutex);
1539     }
1540 }
1541
1542 static inline void set_compress_params(CompressParam *param, RAMBlock *block,
1543                                        ram_addr_t offset)
1544 {
1545     param->block = block;
1546     param->offset = offset;
1547 }
1548
1549 static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset)
1550 {
1551     int idx, thread_count, bytes_xmit = -1, pages = -1;
1552     bool wait = migrate_compress_wait_thread();
1553     MigrationState *ms = migrate_get_current();
1554
1555     thread_count = migrate_compress_threads();
1556     qemu_mutex_lock(&comp_done_lock);
1557 retry:
1558     for (idx = 0; idx < thread_count; idx++) {
1559         if (comp_param[idx].done) {
1560             comp_param[idx].done = false;
1561             bytes_xmit = qemu_put_qemu_file(ms->to_dst_file,
1562                                             comp_param[idx].file);
1563             qemu_mutex_lock(&comp_param[idx].mutex);
1564             set_compress_params(&comp_param[idx], block, offset);
1565             qemu_cond_signal(&comp_param[idx].cond);
1566             qemu_mutex_unlock(&comp_param[idx].mutex);
1567             pages = 1;
1568             update_compress_thread_counts(&comp_param[idx], bytes_xmit);
1569             break;
1570         }
1571     }
1572
1573     /*
1574      * wait for the free thread if the user specifies 'compress-wait-thread',
1575      * otherwise we will post the page out in the main thread as normal page.
1576      */
1577     if (pages < 0 && wait) {
1578         qemu_cond_wait(&comp_done_cond, &comp_done_lock);
1579         goto retry;
1580     }
1581     qemu_mutex_unlock(&comp_done_lock);
1582
1583     return pages;
1584 }
1585
1586 #define PAGE_ALL_CLEAN 0
1587 #define PAGE_TRY_AGAIN 1
1588 #define PAGE_DIRTY_FOUND 2
1589 /**
1590  * find_dirty_block: find the next dirty page and update any state
1591  * associated with the search process.
1592  *
1593  * Returns:
1594  *         PAGE_ALL_CLEAN: no dirty page found, give up
1595  *         PAGE_TRY_AGAIN: no dirty page found, retry for next block
1596  *         PAGE_DIRTY_FOUND: dirty page found
1597  *
1598  * @rs: current RAM state
1599  * @pss: data about the state of the current dirty page scan
1600  * @again: set to false if the search has scanned the whole of RAM
1601  */
1602 static int find_dirty_block(RAMState *rs, PageSearchStatus *pss)
1603 {
1604     /* Update pss->page for the next dirty bit in ramblock */
1605     pss_find_next_dirty(pss);
1606
1607     if (pss->complete_round && pss->block == rs->last_seen_block &&
1608         pss->page >= rs->last_page) {
1609         /*
1610          * We've been once around the RAM and haven't found anything.
1611          * Give up.
1612          */
1613         return PAGE_ALL_CLEAN;
1614     }
1615     if (!offset_in_ramblock(pss->block,
1616                             ((ram_addr_t)pss->page) << TARGET_PAGE_BITS)) {
1617         /* Didn't find anything in this RAM Block */
1618         pss->page = 0;
1619         pss->block = QLIST_NEXT_RCU(pss->block, next);
1620         if (!pss->block) {
1621             /*
1622              * If memory migration starts over, we will meet a dirtied page
1623              * which may still exists in compression threads's ring, so we
1624              * should flush the compressed data to make sure the new page
1625              * is not overwritten by the old one in the destination.
1626              *
1627              * Also If xbzrle is on, stop using the data compression at this
1628              * point. In theory, xbzrle can do better than compression.
1629              */
1630             flush_compressed_data(rs);
1631
1632             /* Hit the end of the list */
1633             pss->block = QLIST_FIRST_RCU(&ram_list.blocks);
1634             /* Flag that we've looped */
1635             pss->complete_round = true;
1636             /* After the first round, enable XBZRLE. */
1637             if (migrate_use_xbzrle()) {
1638                 rs->xbzrle_enabled = true;
1639             }
1640         }
1641         /* Didn't find anything this time, but try again on the new block */
1642         return PAGE_TRY_AGAIN;
1643     } else {
1644         /* We've found something */
1645         return PAGE_DIRTY_FOUND;
1646     }
1647 }
1648
1649 /**
1650  * unqueue_page: gets a page of the queue
1651  *
1652  * Helper for 'get_queued_page' - gets a page off the queue
1653  *
1654  * Returns the block of the page (or NULL if none available)
1655  *
1656  * @rs: current RAM state
1657  * @offset: used to return the offset within the RAMBlock
1658  */
1659 static RAMBlock *unqueue_page(RAMState *rs, ram_addr_t *offset)
1660 {
1661     struct RAMSrcPageRequest *entry;
1662     RAMBlock *block = NULL;
1663
1664     if (!postcopy_has_request(rs)) {
1665         return NULL;
1666     }
1667
1668     QEMU_LOCK_GUARD(&rs->src_page_req_mutex);
1669
1670     /*
1671      * This should _never_ change even after we take the lock, because no one
1672      * should be taking anything off the request list other than us.
1673      */
1674     assert(postcopy_has_request(rs));
1675
1676     entry = QSIMPLEQ_FIRST(&rs->src_page_requests);
1677     block = entry->rb;
1678     *offset = entry->offset;
1679
1680     if (entry->len > TARGET_PAGE_SIZE) {
1681         entry->len -= TARGET_PAGE_SIZE;
1682         entry->offset += TARGET_PAGE_SIZE;
1683     } else {
1684         memory_region_unref(block->mr);
1685         QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
1686         g_free(entry);
1687         migration_consume_urgent_request();
1688     }
1689
1690     return block;
1691 }
1692
1693 #if defined(__linux__)
1694 /**
1695  * poll_fault_page: try to get next UFFD write fault page and, if pending fault
1696  *   is found, return RAM block pointer and page offset
1697  *
1698  * Returns pointer to the RAMBlock containing faulting page,
1699  *   NULL if no write faults are pending
1700  *
1701  * @rs: current RAM state
1702  * @offset: page offset from the beginning of the block
1703  */
1704 static RAMBlock *poll_fault_page(RAMState *rs, ram_addr_t *offset)
1705 {
1706     struct uffd_msg uffd_msg;
1707     void *page_address;
1708     RAMBlock *block;
1709     int res;
1710
1711     if (!migrate_background_snapshot()) {
1712         return NULL;
1713     }
1714
1715     res = uffd_read_events(rs->uffdio_fd, &uffd_msg, 1);
1716     if (res <= 0) {
1717         return NULL;
1718     }
1719
1720     page_address = (void *)(uintptr_t) uffd_msg.arg.pagefault.address;
1721     block = qemu_ram_block_from_host(page_address, false, offset);
1722     assert(block && (block->flags & RAM_UF_WRITEPROTECT) != 0);
1723     return block;
1724 }
1725
1726 /**
1727  * ram_save_release_protection: release UFFD write protection after
1728  *   a range of pages has been saved
1729  *
1730  * @rs: current RAM state
1731  * @pss: page-search-status structure
1732  * @start_page: index of the first page in the range relative to pss->block
1733  *
1734  * Returns 0 on success, negative value in case of an error
1735 */
1736 static int ram_save_release_protection(RAMState *rs, PageSearchStatus *pss,
1737         unsigned long start_page)
1738 {
1739     int res = 0;
1740
1741     /* Check if page is from UFFD-managed region. */
1742     if (pss->block->flags & RAM_UF_WRITEPROTECT) {
1743         void *page_address = pss->block->host + (start_page << TARGET_PAGE_BITS);
1744         uint64_t run_length = (pss->page - start_page) << TARGET_PAGE_BITS;
1745
1746         /* Flush async buffers before un-protect. */
1747         qemu_fflush(pss->pss_channel);
1748         /* Un-protect memory range. */
1749         res = uffd_change_protection(rs->uffdio_fd, page_address, run_length,
1750                 false, false);
1751     }
1752
1753     return res;
1754 }
1755
1756 /* ram_write_tracking_available: check if kernel supports required UFFD features
1757  *
1758  * Returns true if supports, false otherwise
1759  */
1760 bool ram_write_tracking_available(void)
1761 {
1762     uint64_t uffd_features;
1763     int res;
1764
1765     res = uffd_query_features(&uffd_features);
1766     return (res == 0 &&
1767             (uffd_features & UFFD_FEATURE_PAGEFAULT_FLAG_WP) != 0);
1768 }
1769
1770 /* ram_write_tracking_compatible: check if guest configuration is
1771  *   compatible with 'write-tracking'
1772  *
1773  * Returns true if compatible, false otherwise
1774  */
1775 bool ram_write_tracking_compatible(void)
1776 {
1777     const uint64_t uffd_ioctls_mask = BIT(_UFFDIO_WRITEPROTECT);
1778     int uffd_fd;
1779     RAMBlock *block;
1780     bool ret = false;
1781
1782     /* Open UFFD file descriptor */
1783     uffd_fd = uffd_create_fd(UFFD_FEATURE_PAGEFAULT_FLAG_WP, false);
1784     if (uffd_fd < 0) {
1785         return false;
1786     }
1787
1788     RCU_READ_LOCK_GUARD();
1789
1790     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
1791         uint64_t uffd_ioctls;
1792
1793         /* Nothing to do with read-only and MMIO-writable regions */
1794         if (block->mr->readonly || block->mr->rom_device) {
1795             continue;
1796         }
1797         /* Try to register block memory via UFFD-IO to track writes */
1798         if (uffd_register_memory(uffd_fd, block->host, block->max_length,
1799                 UFFDIO_REGISTER_MODE_WP, &uffd_ioctls)) {
1800             goto out;
1801         }
1802         if ((uffd_ioctls & uffd_ioctls_mask) != uffd_ioctls_mask) {
1803             goto out;
1804         }
1805     }
1806     ret = true;
1807
1808 out:
1809     uffd_close_fd(uffd_fd);
1810     return ret;
1811 }
1812
1813 static inline void populate_read_range(RAMBlock *block, ram_addr_t offset,
1814                                        ram_addr_t size)
1815 {
1816     const ram_addr_t end = offset + size;
1817
1818     /*
1819      * We read one byte of each page; this will preallocate page tables if
1820      * required and populate the shared zeropage on MAP_PRIVATE anonymous memory
1821      * where no page was populated yet. This might require adaption when
1822      * supporting other mappings, like shmem.
1823      */
1824     for (; offset < end; offset += block->page_size) {
1825         char tmp = *((char *)block->host + offset);
1826
1827         /* Don't optimize the read out */
1828         asm volatile("" : "+r" (tmp));
1829     }
1830 }
1831
1832 static inline int populate_read_section(MemoryRegionSection *section,
1833                                         void *opaque)
1834 {
1835     const hwaddr size = int128_get64(section->size);
1836     hwaddr offset = section->offset_within_region;
1837     RAMBlock *block = section->mr->ram_block;
1838
1839     populate_read_range(block, offset, size);
1840     return 0;
1841 }
1842
1843 /*
1844  * ram_block_populate_read: preallocate page tables and populate pages in the
1845  *   RAM block by reading a byte of each page.
1846  *
1847  * Since it's solely used for userfault_fd WP feature, here we just
1848  *   hardcode page size to qemu_real_host_page_size.
1849  *
1850  * @block: RAM block to populate
1851  */
1852 static void ram_block_populate_read(RAMBlock *rb)
1853 {
1854     /*
1855      * Skip populating all pages that fall into a discarded range as managed by
1856      * a RamDiscardManager responsible for the mapped memory region of the
1857      * RAMBlock. Such discarded ("logically unplugged") parts of a RAMBlock
1858      * must not get populated automatically. We don't have to track
1859      * modifications via userfaultfd WP reliably, because these pages will
1860      * not be part of the migration stream either way -- see
1861      * ramblock_dirty_bitmap_exclude_discarded_pages().
1862      *
1863      * Note: The result is only stable while migrating (precopy/postcopy).
1864      */
1865     if (rb->mr && memory_region_has_ram_discard_manager(rb->mr)) {
1866         RamDiscardManager *rdm = memory_region_get_ram_discard_manager(rb->mr);
1867         MemoryRegionSection section = {
1868             .mr = rb->mr,
1869             .offset_within_region = 0,
1870             .size = rb->mr->size,
1871         };
1872
1873         ram_discard_manager_replay_populated(rdm, &section,
1874                                              populate_read_section, NULL);
1875     } else {
1876         populate_read_range(rb, 0, rb->used_length);
1877     }
1878 }
1879
1880 /*
1881  * ram_write_tracking_prepare: prepare for UFFD-WP memory tracking
1882  */
1883 void ram_write_tracking_prepare(void)
1884 {
1885     RAMBlock *block;
1886
1887     RCU_READ_LOCK_GUARD();
1888
1889     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
1890         /* Nothing to do with read-only and MMIO-writable regions */
1891         if (block->mr->readonly || block->mr->rom_device) {
1892             continue;
1893         }
1894
1895         /*
1896          * Populate pages of the RAM block before enabling userfault_fd
1897          * write protection.
1898          *
1899          * This stage is required since ioctl(UFFDIO_WRITEPROTECT) with
1900          * UFFDIO_WRITEPROTECT_MODE_WP mode setting would silently skip
1901          * pages with pte_none() entries in page table.
1902          */
1903         ram_block_populate_read(block);
1904     }
1905 }
1906
1907 static inline int uffd_protect_section(MemoryRegionSection *section,
1908                                        void *opaque)
1909 {
1910     const hwaddr size = int128_get64(section->size);
1911     const hwaddr offset = section->offset_within_region;
1912     RAMBlock *rb = section->mr->ram_block;
1913     int uffd_fd = (uintptr_t)opaque;
1914
1915     return uffd_change_protection(uffd_fd, rb->host + offset, size, true,
1916                                   false);
1917 }
1918
1919 static int ram_block_uffd_protect(RAMBlock *rb, int uffd_fd)
1920 {
1921     assert(rb->flags & RAM_UF_WRITEPROTECT);
1922
1923     /* See ram_block_populate_read() */
1924     if (rb->mr && memory_region_has_ram_discard_manager(rb->mr)) {
1925         RamDiscardManager *rdm = memory_region_get_ram_discard_manager(rb->mr);
1926         MemoryRegionSection section = {
1927             .mr = rb->mr,
1928             .offset_within_region = 0,
1929             .size = rb->mr->size,
1930         };
1931
1932         return ram_discard_manager_replay_populated(rdm, &section,
1933                                                     uffd_protect_section,
1934                                                     (void *)(uintptr_t)uffd_fd);
1935     }
1936     return uffd_change_protection(uffd_fd, rb->host,
1937                                   rb->used_length, true, false);
1938 }
1939
1940 /*
1941  * ram_write_tracking_start: start UFFD-WP memory tracking
1942  *
1943  * Returns 0 for success or negative value in case of error
1944  */
1945 int ram_write_tracking_start(void)
1946 {
1947     int uffd_fd;
1948     RAMState *rs = ram_state;
1949     RAMBlock *block;
1950
1951     /* Open UFFD file descriptor */
1952     uffd_fd = uffd_create_fd(UFFD_FEATURE_PAGEFAULT_FLAG_WP, true);
1953     if (uffd_fd < 0) {
1954         return uffd_fd;
1955     }
1956     rs->uffdio_fd = uffd_fd;
1957
1958     RCU_READ_LOCK_GUARD();
1959
1960     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
1961         /* Nothing to do with read-only and MMIO-writable regions */
1962         if (block->mr->readonly || block->mr->rom_device) {
1963             continue;
1964         }
1965
1966         /* Register block memory with UFFD to track writes */
1967         if (uffd_register_memory(rs->uffdio_fd, block->host,
1968                 block->max_length, UFFDIO_REGISTER_MODE_WP, NULL)) {
1969             goto fail;
1970         }
1971         block->flags |= RAM_UF_WRITEPROTECT;
1972         memory_region_ref(block->mr);
1973
1974         /* Apply UFFD write protection to the block memory range */
1975         if (ram_block_uffd_protect(block, uffd_fd)) {
1976             goto fail;
1977         }
1978
1979         trace_ram_write_tracking_ramblock_start(block->idstr, block->page_size,
1980                 block->host, block->max_length);
1981     }
1982
1983     return 0;
1984
1985 fail:
1986     error_report("ram_write_tracking_start() failed: restoring initial memory state");
1987
1988     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
1989         if ((block->flags & RAM_UF_WRITEPROTECT) == 0) {
1990             continue;
1991         }
1992         uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length);
1993         /* Cleanup flags and remove reference */
1994         block->flags &= ~RAM_UF_WRITEPROTECT;
1995         memory_region_unref(block->mr);
1996     }
1997
1998     uffd_close_fd(uffd_fd);
1999     rs->uffdio_fd = -1;
2000     return -1;
2001 }
2002
2003 /**
2004  * ram_write_tracking_stop: stop UFFD-WP memory tracking and remove protection
2005  */
2006 void ram_write_tracking_stop(void)
2007 {
2008     RAMState *rs = ram_state;
2009     RAMBlock *block;
2010
2011     RCU_READ_LOCK_GUARD();
2012
2013     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
2014         if ((block->flags & RAM_UF_WRITEPROTECT) == 0) {
2015             continue;
2016         }
2017         uffd_unregister_memory(rs->uffdio_fd, block->host, block->max_length);
2018
2019         trace_ram_write_tracking_ramblock_stop(block->idstr, block->page_size,
2020                 block->host, block->max_length);
2021
2022         /* Cleanup flags and remove reference */
2023         block->flags &= ~RAM_UF_WRITEPROTECT;
2024         memory_region_unref(block->mr);
2025     }
2026
2027     /* Finally close UFFD file descriptor */
2028     uffd_close_fd(rs->uffdio_fd);
2029     rs->uffdio_fd = -1;
2030 }
2031
2032 #else
2033 /* No target OS support, stubs just fail or ignore */
2034
2035 static RAMBlock *poll_fault_page(RAMState *rs, ram_addr_t *offset)
2036 {
2037     (void) rs;
2038     (void) offset;
2039
2040     return NULL;
2041 }
2042
2043 static int ram_save_release_protection(RAMState *rs, PageSearchStatus *pss,
2044         unsigned long start_page)
2045 {
2046     (void) rs;
2047     (void) pss;
2048     (void) start_page;
2049
2050     return 0;
2051 }
2052
2053 bool ram_write_tracking_available(void)
2054 {
2055     return false;
2056 }
2057
2058 bool ram_write_tracking_compatible(void)
2059 {
2060     assert(0);
2061     return false;
2062 }
2063
2064 int ram_write_tracking_start(void)
2065 {
2066     assert(0);
2067     return -1;
2068 }
2069
2070 void ram_write_tracking_stop(void)
2071 {
2072     assert(0);
2073 }
2074 #endif /* defined(__linux__) */
2075
2076 /**
2077  * get_queued_page: unqueue a page from the postcopy requests
2078  *
2079  * Skips pages that are already sent (!dirty)
2080  *
2081  * Returns true if a queued page is found
2082  *
2083  * @rs: current RAM state
2084  * @pss: data about the state of the current dirty page scan
2085  */
2086 static bool get_queued_page(RAMState *rs, PageSearchStatus *pss)
2087 {
2088     RAMBlock  *block;
2089     ram_addr_t offset;
2090     bool dirty;
2091
2092     do {
2093         block = unqueue_page(rs, &offset);
2094         /*
2095          * We're sending this page, and since it's postcopy nothing else
2096          * will dirty it, and we must make sure it doesn't get sent again
2097          * even if this queue request was received after the background
2098          * search already sent it.
2099          */
2100         if (block) {
2101             unsigned long page;
2102
2103             page = offset >> TARGET_PAGE_BITS;
2104             dirty = test_bit(page, block->bmap);
2105             if (!dirty) {
2106                 trace_get_queued_page_not_dirty(block->idstr, (uint64_t)offset,
2107                                                 page);
2108             } else {
2109                 trace_get_queued_page(block->idstr, (uint64_t)offset, page);
2110             }
2111         }
2112
2113     } while (block && !dirty);
2114
2115     if (!block) {
2116         /*
2117          * Poll write faults too if background snapshot is enabled; that's
2118          * when we have vcpus got blocked by the write protected pages.
2119          */
2120         block = poll_fault_page(rs, &offset);
2121     }
2122
2123     if (block) {
2124         /*
2125          * We want the background search to continue from the queued page
2126          * since the guest is likely to want other pages near to the page
2127          * it just requested.
2128          */
2129         pss->block = block;
2130         pss->page = offset >> TARGET_PAGE_BITS;
2131
2132         /*
2133          * This unqueued page would break the "one round" check, even is
2134          * really rare.
2135          */
2136         pss->complete_round = false;
2137     }
2138
2139     return !!block;
2140 }
2141
2142 /**
2143  * migration_page_queue_free: drop any remaining pages in the ram
2144  * request queue
2145  *
2146  * It should be empty at the end anyway, but in error cases there may
2147  * be some left.  in case that there is any page left, we drop it.
2148  *
2149  */
2150 static void migration_page_queue_free(RAMState *rs)
2151 {
2152     struct RAMSrcPageRequest *mspr, *next_mspr;
2153     /* This queue generally should be empty - but in the case of a failed
2154      * migration might have some droppings in.
2155      */
2156     RCU_READ_LOCK_GUARD();
2157     QSIMPLEQ_FOREACH_SAFE(mspr, &rs->src_page_requests, next_req, next_mspr) {
2158         memory_region_unref(mspr->rb->mr);
2159         QSIMPLEQ_REMOVE_HEAD(&rs->src_page_requests, next_req);
2160         g_free(mspr);
2161     }
2162 }
2163
2164 /**
2165  * ram_save_queue_pages: queue the page for transmission
2166  *
2167  * A request from postcopy destination for example.
2168  *
2169  * Returns zero on success or negative on error
2170  *
2171  * @rbname: Name of the RAMBLock of the request. NULL means the
2172  *          same that last one.
2173  * @start: starting address from the start of the RAMBlock
2174  * @len: length (in bytes) to send
2175  */
2176 int ram_save_queue_pages(const char *rbname, ram_addr_t start, ram_addr_t len)
2177 {
2178     RAMBlock *ramblock;
2179     RAMState *rs = ram_state;
2180
2181     ram_counters.postcopy_requests++;
2182     RCU_READ_LOCK_GUARD();
2183
2184     if (!rbname) {
2185         /* Reuse last RAMBlock */
2186         ramblock = rs->last_req_rb;
2187
2188         if (!ramblock) {
2189             /*
2190              * Shouldn't happen, we can't reuse the last RAMBlock if
2191              * it's the 1st request.
2192              */
2193             error_report("ram_save_queue_pages no previous block");
2194             return -1;
2195         }
2196     } else {
2197         ramblock = qemu_ram_block_by_name(rbname);
2198
2199         if (!ramblock) {
2200             /* We shouldn't be asked for a non-existent RAMBlock */
2201             error_report("ram_save_queue_pages no block '%s'", rbname);
2202             return -1;
2203         }
2204         rs->last_req_rb = ramblock;
2205     }
2206     trace_ram_save_queue_pages(ramblock->idstr, start, len);
2207     if (!offset_in_ramblock(ramblock, start + len - 1)) {
2208         error_report("%s request overrun start=" RAM_ADDR_FMT " len="
2209                      RAM_ADDR_FMT " blocklen=" RAM_ADDR_FMT,
2210                      __func__, start, len, ramblock->used_length);
2211         return -1;
2212     }
2213
2214     /*
2215      * When with postcopy preempt, we send back the page directly in the
2216      * rp-return thread.
2217      */
2218     if (postcopy_preempt_active()) {
2219         ram_addr_t page_start = start >> TARGET_PAGE_BITS;
2220         size_t page_size = qemu_ram_pagesize(ramblock);
2221         PageSearchStatus *pss = &ram_state->pss[RAM_CHANNEL_POSTCOPY];
2222         int ret = 0;
2223
2224         qemu_mutex_lock(&rs->bitmap_mutex);
2225
2226         pss_init(pss, ramblock, page_start);
2227         /*
2228          * Always use the preempt channel, and make sure it's there.  It's
2229          * safe to access without lock, because when rp-thread is running
2230          * we should be the only one who operates on the qemufile
2231          */
2232         pss->pss_channel = migrate_get_current()->postcopy_qemufile_src;
2233         assert(pss->pss_channel);
2234
2235         /*
2236          * It must be either one or multiple of host page size.  Just
2237          * assert; if something wrong we're mostly split brain anyway.
2238          */
2239         assert(len % page_size == 0);
2240         while (len) {
2241             if (ram_save_host_page_urgent(pss)) {
2242                 error_report("%s: ram_save_host_page_urgent() failed: "
2243                              "ramblock=%s, start_addr=0x"RAM_ADDR_FMT,
2244                              __func__, ramblock->idstr, start);
2245                 ret = -1;
2246                 break;
2247             }
2248             /*
2249              * NOTE: after ram_save_host_page_urgent() succeeded, pss->page
2250              * will automatically be moved and point to the next host page
2251              * we're going to send, so no need to update here.
2252              *
2253              * Normally QEMU never sends >1 host page in requests, so
2254              * logically we don't even need that as the loop should only
2255              * run once, but just to be consistent.
2256              */
2257             len -= page_size;
2258         };
2259         qemu_mutex_unlock(&rs->bitmap_mutex);
2260
2261         return ret;
2262     }
2263
2264     struct RAMSrcPageRequest *new_entry =
2265         g_new0(struct RAMSrcPageRequest, 1);
2266     new_entry->rb = ramblock;
2267     new_entry->offset = start;
2268     new_entry->len = len;
2269
2270     memory_region_ref(ramblock->mr);
2271     qemu_mutex_lock(&rs->src_page_req_mutex);
2272     QSIMPLEQ_INSERT_TAIL(&rs->src_page_requests, new_entry, next_req);
2273     migration_make_urgent_request();
2274     qemu_mutex_unlock(&rs->src_page_req_mutex);
2275
2276     return 0;
2277 }
2278
2279 static bool save_page_use_compression(RAMState *rs)
2280 {
2281     if (!migrate_use_compression()) {
2282         return false;
2283     }
2284
2285     /*
2286      * If xbzrle is enabled (e.g., after first round of migration), stop
2287      * using the data compression. In theory, xbzrle can do better than
2288      * compression.
2289      */
2290     if (rs->xbzrle_enabled) {
2291         return false;
2292     }
2293
2294     return true;
2295 }
2296
2297 /*
2298  * try to compress the page before posting it out, return true if the page
2299  * has been properly handled by compression, otherwise needs other
2300  * paths to handle it
2301  */
2302 static bool save_compress_page(RAMState *rs, PageSearchStatus *pss,
2303                                RAMBlock *block, ram_addr_t offset)
2304 {
2305     if (!save_page_use_compression(rs)) {
2306         return false;
2307     }
2308
2309     /*
2310      * When starting the process of a new block, the first page of
2311      * the block should be sent out before other pages in the same
2312      * block, and all the pages in last block should have been sent
2313      * out, keeping this order is important, because the 'cont' flag
2314      * is used to avoid resending the block name.
2315      *
2316      * We post the fist page as normal page as compression will take
2317      * much CPU resource.
2318      */
2319     if (block != pss->last_sent_block) {
2320         flush_compressed_data(rs);
2321         return false;
2322     }
2323
2324     if (compress_page_with_multi_thread(block, offset) > 0) {
2325         return true;
2326     }
2327
2328     compression_counters.busy++;
2329     return false;
2330 }
2331
2332 /**
2333  * ram_save_target_page_legacy: save one target page
2334  *
2335  * Returns the number of pages written
2336  *
2337  * @rs: current RAM state
2338  * @pss: data about the page we want to send
2339  */
2340 static int ram_save_target_page_legacy(RAMState *rs, PageSearchStatus *pss)
2341 {
2342     RAMBlock *block = pss->block;
2343     ram_addr_t offset = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS;
2344     int res;
2345
2346     if (control_save_page(pss, block, offset, &res)) {
2347         return res;
2348     }
2349
2350     if (save_compress_page(rs, pss, block, offset)) {
2351         return 1;
2352     }
2353
2354     res = save_zero_page(pss, block, offset);
2355     if (res > 0) {
2356         /* Must let xbzrle know, otherwise a previous (now 0'd) cached
2357          * page would be stale
2358          */
2359         if (rs->xbzrle_enabled) {
2360             XBZRLE_cache_lock();
2361             xbzrle_cache_zero_page(rs, block->offset + offset);
2362             XBZRLE_cache_unlock();
2363         }
2364         return res;
2365     }
2366
2367     /*
2368      * Do not use multifd in postcopy as one whole host page should be
2369      * placed.  Meanwhile postcopy requires atomic update of pages, so even
2370      * if host page size == guest page size the dest guest during run may
2371      * still see partially copied pages which is data corruption.
2372      */
2373     if (migrate_use_multifd() && !migration_in_postcopy()) {
2374         return ram_save_multifd_page(pss->pss_channel, block, offset);
2375     }
2376
2377     return ram_save_page(rs, pss);
2378 }
2379
2380 /* Should be called before sending a host page */
2381 static void pss_host_page_prepare(PageSearchStatus *pss)
2382 {
2383     /* How many guest pages are there in one host page? */
2384     size_t guest_pfns = qemu_ram_pagesize(pss->block) >> TARGET_PAGE_BITS;
2385
2386     pss->host_page_sending = true;
2387     if (guest_pfns <= 1) {
2388         /*
2389          * This covers both when guest psize == host psize, or when guest
2390          * has larger psize than the host (guest_pfns==0).
2391          *
2392          * For the latter, we always send one whole guest page per
2393          * iteration of the host page (example: an Alpha VM on x86 host
2394          * will have guest psize 8K while host psize 4K).
2395          */
2396         pss->host_page_start = pss->page;
2397         pss->host_page_end = pss->page + 1;
2398     } else {
2399         /*
2400          * The host page spans over multiple guest pages, we send them
2401          * within the same host page iteration.
2402          */
2403         pss->host_page_start = ROUND_DOWN(pss->page, guest_pfns);
2404         pss->host_page_end = ROUND_UP(pss->page + 1, guest_pfns);
2405     }
2406 }
2407
2408 /*
2409  * Whether the page pointed by PSS is within the host page being sent.
2410  * Must be called after a previous pss_host_page_prepare().
2411  */
2412 static bool pss_within_range(PageSearchStatus *pss)
2413 {
2414     ram_addr_t ram_addr;
2415
2416     assert(pss->host_page_sending);
2417
2418     /* Over host-page boundary? */
2419     if (pss->page >= pss->host_page_end) {
2420         return false;
2421     }
2422
2423     ram_addr = ((ram_addr_t)pss->page) << TARGET_PAGE_BITS;
2424
2425     return offset_in_ramblock(pss->block, ram_addr);
2426 }
2427
2428 static void pss_host_page_finish(PageSearchStatus *pss)
2429 {
2430     pss->host_page_sending = false;
2431     /* This is not needed, but just to reset it */
2432     pss->host_page_start = pss->host_page_end = 0;
2433 }
2434
2435 /*
2436  * Send an urgent host page specified by `pss'.  Need to be called with
2437  * bitmap_mutex held.
2438  *
2439  * Returns 0 if save host page succeeded, false otherwise.
2440  */
2441 static int ram_save_host_page_urgent(PageSearchStatus *pss)
2442 {
2443     bool page_dirty, sent = false;
2444     RAMState *rs = ram_state;
2445     int ret = 0;
2446
2447     trace_postcopy_preempt_send_host_page(pss->block->idstr, pss->page);
2448     pss_host_page_prepare(pss);
2449
2450     /*
2451      * If precopy is sending the same page, let it be done in precopy, or
2452      * we could send the same page in two channels and none of them will
2453      * receive the whole page.
2454      */
2455     if (pss_overlap(pss, &ram_state->pss[RAM_CHANNEL_PRECOPY])) {
2456         trace_postcopy_preempt_hit(pss->block->idstr,
2457                                    pss->page << TARGET_PAGE_BITS);
2458         return 0;
2459     }
2460
2461     do {
2462         page_dirty = migration_bitmap_clear_dirty(rs, pss->block, pss->page);
2463
2464         if (page_dirty) {
2465             /* Be strict to return code; it must be 1, or what else? */
2466             if (migration_ops->ram_save_target_page(rs, pss) != 1) {
2467                 error_report_once("%s: ram_save_target_page failed", __func__);
2468                 ret = -1;
2469                 goto out;
2470             }
2471             sent = true;
2472         }
2473         pss_find_next_dirty(pss);
2474     } while (pss_within_range(pss));
2475 out:
2476     pss_host_page_finish(pss);
2477     /* For urgent requests, flush immediately if sent */
2478     if (sent) {
2479         qemu_fflush(pss->pss_channel);
2480     }
2481     return ret;
2482 }
2483
2484 /**
2485  * ram_save_host_page: save a whole host page
2486  *
2487  * Starting at *offset send pages up to the end of the current host
2488  * page. It's valid for the initial offset to point into the middle of
2489  * a host page in which case the remainder of the hostpage is sent.
2490  * Only dirty target pages are sent. Note that the host page size may
2491  * be a huge page for this block.
2492  *
2493  * The saving stops at the boundary of the used_length of the block
2494  * if the RAMBlock isn't a multiple of the host page size.
2495  *
2496  * The caller must be with ram_state.bitmap_mutex held to call this
2497  * function.  Note that this function can temporarily release the lock, but
2498  * when the function is returned it'll make sure the lock is still held.
2499  *
2500  * Returns the number of pages written or negative on error
2501  *
2502  * @rs: current RAM state
2503  * @pss: data about the page we want to send
2504  */
2505 static int ram_save_host_page(RAMState *rs, PageSearchStatus *pss)
2506 {
2507     bool page_dirty, preempt_active = postcopy_preempt_active();
2508     int tmppages, pages = 0;
2509     size_t pagesize_bits =
2510         qemu_ram_pagesize(pss->block) >> TARGET_PAGE_BITS;
2511     unsigned long start_page = pss->page;
2512     int res;
2513
2514     if (ramblock_is_ignored(pss->block)) {
2515         error_report("block %s should not be migrated !", pss->block->idstr);
2516         return 0;
2517     }
2518
2519     /* Update host page boundary information */
2520     pss_host_page_prepare(pss);
2521
2522     do {
2523         page_dirty = migration_bitmap_clear_dirty(rs, pss->block, pss->page);
2524
2525         /* Check the pages is dirty and if it is send it */
2526         if (page_dirty) {
2527             /*
2528              * Properly yield the lock only in postcopy preempt mode
2529              * because both migration thread and rp-return thread can
2530              * operate on the bitmaps.
2531              */
2532             if (preempt_active) {
2533                 qemu_mutex_unlock(&rs->bitmap_mutex);
2534             }
2535             tmppages = migration_ops->ram_save_target_page(rs, pss);
2536             if (tmppages >= 0) {
2537                 pages += tmppages;
2538                 /*
2539                  * Allow rate limiting to happen in the middle of huge pages if
2540                  * something is sent in the current iteration.
2541                  */
2542                 if (pagesize_bits > 1 && tmppages > 0) {
2543                     migration_rate_limit();
2544                 }
2545             }
2546             if (preempt_active) {
2547                 qemu_mutex_lock(&rs->bitmap_mutex);
2548             }
2549         } else {
2550             tmppages = 0;
2551         }
2552
2553         if (tmppages < 0) {
2554             pss_host_page_finish(pss);
2555             return tmppages;
2556         }
2557
2558         pss_find_next_dirty(pss);
2559     } while (pss_within_range(pss));
2560
2561     pss_host_page_finish(pss);
2562
2563     res = ram_save_release_protection(rs, pss, start_page);
2564     return (res < 0 ? res : pages);
2565 }
2566
2567 /**
2568  * ram_find_and_save_block: finds a dirty page and sends it to f
2569  *
2570  * Called within an RCU critical section.
2571  *
2572  * Returns the number of pages written where zero means no dirty pages,
2573  * or negative on error
2574  *
2575  * @rs: current RAM state
2576  *
2577  * On systems where host-page-size > target-page-size it will send all the
2578  * pages in a host page that are dirty.
2579  */
2580 static int ram_find_and_save_block(RAMState *rs)
2581 {
2582     PageSearchStatus *pss = &rs->pss[RAM_CHANNEL_PRECOPY];
2583     int pages = 0;
2584
2585     /* No dirty page as there is zero RAM */
2586     if (!rs->ram_bytes_total) {
2587         return pages;
2588     }
2589
2590     /*
2591      * Always keep last_seen_block/last_page valid during this procedure,
2592      * because find_dirty_block() relies on these values (e.g., we compare
2593      * last_seen_block with pss.block to see whether we searched all the
2594      * ramblocks) to detect the completion of migration.  Having NULL value
2595      * of last_seen_block can conditionally cause below loop to run forever.
2596      */
2597     if (!rs->last_seen_block) {
2598         rs->last_seen_block = QLIST_FIRST_RCU(&ram_list.blocks);
2599         rs->last_page = 0;
2600     }
2601
2602     pss_init(pss, rs->last_seen_block, rs->last_page);
2603
2604     while (true){
2605         if (!get_queued_page(rs, pss)) {
2606             /* priority queue empty, so just search for something dirty */
2607             int res = find_dirty_block(rs, pss);
2608             if (res != PAGE_DIRTY_FOUND) {
2609                 if (res == PAGE_ALL_CLEAN) {
2610                     break;
2611                 } else if (res == PAGE_TRY_AGAIN) {
2612                     continue;
2613                 }
2614             }
2615         }
2616         pages = ram_save_host_page(rs, pss);
2617         if (pages) {
2618             break;
2619         }
2620     }
2621
2622     rs->last_seen_block = pss->block;
2623     rs->last_page = pss->page;
2624
2625     return pages;
2626 }
2627
2628 void acct_update_position(QEMUFile *f, size_t size, bool zero)
2629 {
2630     uint64_t pages = size / TARGET_PAGE_SIZE;
2631
2632     if (zero) {
2633         stat64_add(&ram_atomic_counters.duplicate, pages);
2634     } else {
2635         stat64_add(&ram_atomic_counters.normal, pages);
2636         ram_transferred_add(size);
2637         qemu_file_credit_transfer(f, size);
2638     }
2639 }
2640
2641 static uint64_t ram_bytes_total_with_ignored(void)
2642 {
2643     RAMBlock *block;
2644     uint64_t total = 0;
2645
2646     RCU_READ_LOCK_GUARD();
2647
2648     RAMBLOCK_FOREACH_MIGRATABLE(block) {
2649         total += block->used_length;
2650     }
2651     return total;
2652 }
2653
2654 uint64_t ram_bytes_total(void)
2655 {
2656     RAMBlock *block;
2657     uint64_t total = 0;
2658
2659     RCU_READ_LOCK_GUARD();
2660
2661     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
2662         total += block->used_length;
2663     }
2664     return total;
2665 }
2666
2667 static void xbzrle_load_setup(void)
2668 {
2669     XBZRLE.decoded_buf = g_malloc(TARGET_PAGE_SIZE);
2670 }
2671
2672 static void xbzrle_load_cleanup(void)
2673 {
2674     g_free(XBZRLE.decoded_buf);
2675     XBZRLE.decoded_buf = NULL;
2676 }
2677
2678 static void ram_state_cleanup(RAMState **rsp)
2679 {
2680     if (*rsp) {
2681         migration_page_queue_free(*rsp);
2682         qemu_mutex_destroy(&(*rsp)->bitmap_mutex);
2683         qemu_mutex_destroy(&(*rsp)->src_page_req_mutex);
2684         g_free(*rsp);
2685         *rsp = NULL;
2686     }
2687 }
2688
2689 static void xbzrle_cleanup(void)
2690 {
2691     XBZRLE_cache_lock();
2692     if (XBZRLE.cache) {
2693         cache_fini(XBZRLE.cache);
2694         g_free(XBZRLE.encoded_buf);
2695         g_free(XBZRLE.current_buf);
2696         g_free(XBZRLE.zero_target_page);
2697         XBZRLE.cache = NULL;
2698         XBZRLE.encoded_buf = NULL;
2699         XBZRLE.current_buf = NULL;
2700         XBZRLE.zero_target_page = NULL;
2701     }
2702     XBZRLE_cache_unlock();
2703 }
2704
2705 static void ram_save_cleanup(void *opaque)
2706 {
2707     RAMState **rsp = opaque;
2708     RAMBlock *block;
2709
2710     /* We don't use dirty log with background snapshots */
2711     if (!migrate_background_snapshot()) {
2712         /* caller have hold iothread lock or is in a bh, so there is
2713          * no writing race against the migration bitmap
2714          */
2715         if (global_dirty_tracking & GLOBAL_DIRTY_MIGRATION) {
2716             /*
2717              * do not stop dirty log without starting it, since
2718              * memory_global_dirty_log_stop will assert that
2719              * memory_global_dirty_log_start/stop used in pairs
2720              */
2721             memory_global_dirty_log_stop(GLOBAL_DIRTY_MIGRATION);
2722         }
2723     }
2724
2725     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
2726         g_free(block->clear_bmap);
2727         block->clear_bmap = NULL;
2728         g_free(block->bmap);
2729         block->bmap = NULL;
2730     }
2731
2732     xbzrle_cleanup();
2733     compress_threads_save_cleanup();
2734     ram_state_cleanup(rsp);
2735     g_free(migration_ops);
2736     migration_ops = NULL;
2737 }
2738
2739 static void ram_state_reset(RAMState *rs)
2740 {
2741     int i;
2742
2743     for (i = 0; i < RAM_CHANNEL_MAX; i++) {
2744         rs->pss[i].last_sent_block = NULL;
2745     }
2746
2747     rs->last_seen_block = NULL;
2748     rs->last_page = 0;
2749     rs->last_version = ram_list.version;
2750     rs->xbzrle_enabled = false;
2751 }
2752
2753 #define MAX_WAIT 50 /* ms, half buffered_file limit */
2754
2755 /* **** functions for postcopy ***** */
2756
2757 void ram_postcopy_migrated_memory_release(MigrationState *ms)
2758 {
2759     struct RAMBlock *block;
2760
2761     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
2762         unsigned long *bitmap = block->bmap;
2763         unsigned long range = block->used_length >> TARGET_PAGE_BITS;
2764         unsigned long run_start = find_next_zero_bit(bitmap, range, 0);
2765
2766         while (run_start < range) {
2767             unsigned long run_end = find_next_bit(bitmap, range, run_start + 1);
2768             ram_discard_range(block->idstr,
2769                               ((ram_addr_t)run_start) << TARGET_PAGE_BITS,
2770                               ((ram_addr_t)(run_end - run_start))
2771                                 << TARGET_PAGE_BITS);
2772             run_start = find_next_zero_bit(bitmap, range, run_end + 1);
2773         }
2774     }
2775 }
2776
2777 /**
2778  * postcopy_send_discard_bm_ram: discard a RAMBlock
2779  *
2780  * Callback from postcopy_each_ram_send_discard for each RAMBlock
2781  *
2782  * @ms: current migration state
2783  * @block: RAMBlock to discard
2784  */
2785 static void postcopy_send_discard_bm_ram(MigrationState *ms, RAMBlock *block)
2786 {
2787     unsigned long end = block->used_length >> TARGET_PAGE_BITS;
2788     unsigned long current;
2789     unsigned long *bitmap = block->bmap;
2790
2791     for (current = 0; current < end; ) {
2792         unsigned long one = find_next_bit(bitmap, end, current);
2793         unsigned long zero, discard_length;
2794
2795         if (one >= end) {
2796             break;
2797         }
2798
2799         zero = find_next_zero_bit(bitmap, end, one + 1);
2800
2801         if (zero >= end) {
2802             discard_length = end - one;
2803         } else {
2804             discard_length = zero - one;
2805         }
2806         postcopy_discard_send_range(ms, one, discard_length);
2807         current = one + discard_length;
2808     }
2809 }
2810
2811 static void postcopy_chunk_hostpages_pass(MigrationState *ms, RAMBlock *block);
2812
2813 /**
2814  * postcopy_each_ram_send_discard: discard all RAMBlocks
2815  *
2816  * Utility for the outgoing postcopy code.
2817  *   Calls postcopy_send_discard_bm_ram for each RAMBlock
2818  *   passing it bitmap indexes and name.
2819  * (qemu_ram_foreach_block ends up passing unscaled lengths
2820  *  which would mean postcopy code would have to deal with target page)
2821  *
2822  * @ms: current migration state
2823  */
2824 static void postcopy_each_ram_send_discard(MigrationState *ms)
2825 {
2826     struct RAMBlock *block;
2827
2828     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
2829         postcopy_discard_send_init(ms, block->idstr);
2830
2831         /*
2832          * Deal with TPS != HPS and huge pages.  It discard any partially sent
2833          * host-page size chunks, mark any partially dirty host-page size
2834          * chunks as all dirty.  In this case the host-page is the host-page
2835          * for the particular RAMBlock, i.e. it might be a huge page.
2836          */
2837         postcopy_chunk_hostpages_pass(ms, block);
2838
2839         /*
2840          * Postcopy sends chunks of bitmap over the wire, but it
2841          * just needs indexes at this point, avoids it having
2842          * target page specific code.
2843          */
2844         postcopy_send_discard_bm_ram(ms, block);
2845         postcopy_discard_send_finish(ms);
2846     }
2847 }
2848
2849 /**
2850  * postcopy_chunk_hostpages_pass: canonicalize bitmap in hostpages
2851  *
2852  * Helper for postcopy_chunk_hostpages; it's called twice to
2853  * canonicalize the two bitmaps, that are similar, but one is
2854  * inverted.
2855  *
2856  * Postcopy requires that all target pages in a hostpage are dirty or
2857  * clean, not a mix.  This function canonicalizes the bitmaps.
2858  *
2859  * @ms: current migration state
2860  * @block: block that contains the page we want to canonicalize
2861  */
2862 static void postcopy_chunk_hostpages_pass(MigrationState *ms, RAMBlock *block)
2863 {
2864     RAMState *rs = ram_state;
2865     unsigned long *bitmap = block->bmap;
2866     unsigned int host_ratio = block->page_size / TARGET_PAGE_SIZE;
2867     unsigned long pages = block->used_length >> TARGET_PAGE_BITS;
2868     unsigned long run_start;
2869
2870     if (block->page_size == TARGET_PAGE_SIZE) {
2871         /* Easy case - TPS==HPS for a non-huge page RAMBlock */
2872         return;
2873     }
2874
2875     /* Find a dirty page */
2876     run_start = find_next_bit(bitmap, pages, 0);
2877
2878     while (run_start < pages) {
2879
2880         /*
2881          * If the start of this run of pages is in the middle of a host
2882          * page, then we need to fixup this host page.
2883          */
2884         if (QEMU_IS_ALIGNED(run_start, host_ratio)) {
2885             /* Find the end of this run */
2886             run_start = find_next_zero_bit(bitmap, pages, run_start + 1);
2887             /*
2888              * If the end isn't at the start of a host page, then the
2889              * run doesn't finish at the end of a host page
2890              * and we need to discard.
2891              */
2892         }
2893
2894         if (!QEMU_IS_ALIGNED(run_start, host_ratio)) {
2895             unsigned long page;
2896             unsigned long fixup_start_addr = QEMU_ALIGN_DOWN(run_start,
2897                                                              host_ratio);
2898             run_start = QEMU_ALIGN_UP(run_start, host_ratio);
2899
2900             /* Clean up the bitmap */
2901             for (page = fixup_start_addr;
2902                  page < fixup_start_addr + host_ratio; page++) {
2903                 /*
2904                  * Remark them as dirty, updating the count for any pages
2905                  * that weren't previously dirty.
2906                  */
2907                 rs->migration_dirty_pages += !test_and_set_bit(page, bitmap);
2908             }
2909         }
2910
2911         /* Find the next dirty page for the next iteration */
2912         run_start = find_next_bit(bitmap, pages, run_start);
2913     }
2914 }
2915
2916 /**
2917  * ram_postcopy_send_discard_bitmap: transmit the discard bitmap
2918  *
2919  * Transmit the set of pages to be discarded after precopy to the target
2920  * these are pages that:
2921  *     a) Have been previously transmitted but are now dirty again
2922  *     b) Pages that have never been transmitted, this ensures that
2923  *        any pages on the destination that have been mapped by background
2924  *        tasks get discarded (transparent huge pages is the specific concern)
2925  * Hopefully this is pretty sparse
2926  *
2927  * @ms: current migration state
2928  */
2929 void ram_postcopy_send_discard_bitmap(MigrationState *ms)
2930 {
2931     RAMState *rs = ram_state;
2932
2933     RCU_READ_LOCK_GUARD();
2934
2935     /* This should be our last sync, the src is now paused */
2936     migration_bitmap_sync(rs);
2937
2938     /* Easiest way to make sure we don't resume in the middle of a host-page */
2939     rs->pss[RAM_CHANNEL_PRECOPY].last_sent_block = NULL;
2940     rs->last_seen_block = NULL;
2941     rs->last_page = 0;
2942
2943     postcopy_each_ram_send_discard(ms);
2944
2945     trace_ram_postcopy_send_discard_bitmap();
2946 }
2947
2948 /**
2949  * ram_discard_range: discard dirtied pages at the beginning of postcopy
2950  *
2951  * Returns zero on success
2952  *
2953  * @rbname: name of the RAMBlock of the request. NULL means the
2954  *          same that last one.
2955  * @start: RAMBlock starting page
2956  * @length: RAMBlock size
2957  */
2958 int ram_discard_range(const char *rbname, uint64_t start, size_t length)
2959 {
2960     trace_ram_discard_range(rbname, start, length);
2961
2962     RCU_READ_LOCK_GUARD();
2963     RAMBlock *rb = qemu_ram_block_by_name(rbname);
2964
2965     if (!rb) {
2966         error_report("ram_discard_range: Failed to find block '%s'", rbname);
2967         return -1;
2968     }
2969
2970     /*
2971      * On source VM, we don't need to update the received bitmap since
2972      * we don't even have one.
2973      */
2974     if (rb->receivedmap) {
2975         bitmap_clear(rb->receivedmap, start >> qemu_target_page_bits(),
2976                      length >> qemu_target_page_bits());
2977     }
2978
2979     return ram_block_discard_range(rb, start, length);
2980 }
2981
2982 /*
2983  * For every allocation, we will try not to crash the VM if the
2984  * allocation failed.
2985  */
2986 static int xbzrle_init(void)
2987 {
2988     Error *local_err = NULL;
2989
2990     if (!migrate_use_xbzrle()) {
2991         return 0;
2992     }
2993
2994     XBZRLE_cache_lock();
2995
2996     XBZRLE.zero_target_page = g_try_malloc0(TARGET_PAGE_SIZE);
2997     if (!XBZRLE.zero_target_page) {
2998         error_report("%s: Error allocating zero page", __func__);
2999         goto err_out;
3000     }
3001
3002     XBZRLE.cache = cache_init(migrate_xbzrle_cache_size(),
3003                               TARGET_PAGE_SIZE, &local_err);
3004     if (!XBZRLE.cache) {
3005         error_report_err(local_err);
3006         goto free_zero_page;
3007     }
3008
3009     XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE);
3010     if (!XBZRLE.encoded_buf) {
3011         error_report("%s: Error allocating encoded_buf", __func__);
3012         goto free_cache;
3013     }
3014
3015     XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE);
3016     if (!XBZRLE.current_buf) {
3017         error_report("%s: Error allocating current_buf", __func__);
3018         goto free_encoded_buf;
3019     }
3020
3021     /* We are all good */
3022     XBZRLE_cache_unlock();
3023     return 0;
3024
3025 free_encoded_buf:
3026     g_free(XBZRLE.encoded_buf);
3027     XBZRLE.encoded_buf = NULL;
3028 free_cache:
3029     cache_fini(XBZRLE.cache);
3030     XBZRLE.cache = NULL;
3031 free_zero_page:
3032     g_free(XBZRLE.zero_target_page);
3033     XBZRLE.zero_target_page = NULL;
3034 err_out:
3035     XBZRLE_cache_unlock();
3036     return -ENOMEM;
3037 }
3038
3039 static int ram_state_init(RAMState **rsp)
3040 {
3041     *rsp = g_try_new0(RAMState, 1);
3042
3043     if (!*rsp) {
3044         error_report("%s: Init ramstate fail", __func__);
3045         return -1;
3046     }
3047
3048     qemu_mutex_init(&(*rsp)->bitmap_mutex);
3049     qemu_mutex_init(&(*rsp)->src_page_req_mutex);
3050     QSIMPLEQ_INIT(&(*rsp)->src_page_requests);
3051     (*rsp)->ram_bytes_total = ram_bytes_total();
3052
3053     /*
3054      * Count the total number of pages used by ram blocks not including any
3055      * gaps due to alignment or unplugs.
3056      * This must match with the initial values of dirty bitmap.
3057      */
3058     (*rsp)->migration_dirty_pages = (*rsp)->ram_bytes_total >> TARGET_PAGE_BITS;
3059     ram_state_reset(*rsp);
3060
3061     return 0;
3062 }
3063
3064 static void ram_list_init_bitmaps(void)
3065 {
3066     MigrationState *ms = migrate_get_current();
3067     RAMBlock *block;
3068     unsigned long pages;
3069     uint8_t shift;
3070
3071     /* Skip setting bitmap if there is no RAM */
3072     if (ram_bytes_total()) {
3073         shift = ms->clear_bitmap_shift;
3074         if (shift > CLEAR_BITMAP_SHIFT_MAX) {
3075             error_report("clear_bitmap_shift (%u) too big, using "
3076                          "max value (%u)", shift, CLEAR_BITMAP_SHIFT_MAX);
3077             shift = CLEAR_BITMAP_SHIFT_MAX;
3078         } else if (shift < CLEAR_BITMAP_SHIFT_MIN) {
3079             error_report("clear_bitmap_shift (%u) too small, using "
3080                          "min value (%u)", shift, CLEAR_BITMAP_SHIFT_MIN);
3081             shift = CLEAR_BITMAP_SHIFT_MIN;
3082         }
3083
3084         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3085             pages = block->max_length >> TARGET_PAGE_BITS;
3086             /*
3087              * The initial dirty bitmap for migration must be set with all
3088              * ones to make sure we'll migrate every guest RAM page to
3089              * destination.
3090              * Here we set RAMBlock.bmap all to 1 because when rebegin a
3091              * new migration after a failed migration, ram_list.
3092              * dirty_memory[DIRTY_MEMORY_MIGRATION] don't include the whole
3093              * guest memory.
3094              */
3095             block->bmap = bitmap_new(pages);
3096             bitmap_set(block->bmap, 0, pages);
3097             block->clear_bmap_shift = shift;
3098             block->clear_bmap = bitmap_new(clear_bmap_size(pages, shift));
3099         }
3100     }
3101 }
3102
3103 static void migration_bitmap_clear_discarded_pages(RAMState *rs)
3104 {
3105     unsigned long pages;
3106     RAMBlock *rb;
3107
3108     RCU_READ_LOCK_GUARD();
3109
3110     RAMBLOCK_FOREACH_NOT_IGNORED(rb) {
3111             pages = ramblock_dirty_bitmap_clear_discarded_pages(rb);
3112             rs->migration_dirty_pages -= pages;
3113     }
3114 }
3115
3116 static void ram_init_bitmaps(RAMState *rs)
3117 {
3118     /* For memory_global_dirty_log_start below.  */
3119     qemu_mutex_lock_iothread();
3120     qemu_mutex_lock_ramlist();
3121
3122     WITH_RCU_READ_LOCK_GUARD() {
3123         ram_list_init_bitmaps();
3124         /* We don't use dirty log with background snapshots */
3125         if (!migrate_background_snapshot()) {
3126             memory_global_dirty_log_start(GLOBAL_DIRTY_MIGRATION);
3127             migration_bitmap_sync_precopy(rs);
3128         }
3129     }
3130     qemu_mutex_unlock_ramlist();
3131     qemu_mutex_unlock_iothread();
3132
3133     /*
3134      * After an eventual first bitmap sync, fixup the initial bitmap
3135      * containing all 1s to exclude any discarded pages from migration.
3136      */
3137     migration_bitmap_clear_discarded_pages(rs);
3138 }
3139
3140 static int ram_init_all(RAMState **rsp)
3141 {
3142     if (ram_state_init(rsp)) {
3143         return -1;
3144     }
3145
3146     if (xbzrle_init()) {
3147         ram_state_cleanup(rsp);
3148         return -1;
3149     }
3150
3151     ram_init_bitmaps(*rsp);
3152
3153     return 0;
3154 }
3155
3156 static void ram_state_resume_prepare(RAMState *rs, QEMUFile *out)
3157 {
3158     RAMBlock *block;
3159     uint64_t pages = 0;
3160
3161     /*
3162      * Postcopy is not using xbzrle/compression, so no need for that.
3163      * Also, since source are already halted, we don't need to care
3164      * about dirty page logging as well.
3165      */
3166
3167     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3168         pages += bitmap_count_one(block->bmap,
3169                                   block->used_length >> TARGET_PAGE_BITS);
3170     }
3171
3172     /* This may not be aligned with current bitmaps. Recalculate. */
3173     rs->migration_dirty_pages = pages;
3174
3175     ram_state_reset(rs);
3176
3177     /* Update RAMState cache of output QEMUFile */
3178     rs->pss[RAM_CHANNEL_PRECOPY].pss_channel = out;
3179
3180     trace_ram_state_resume_prepare(pages);
3181 }
3182
3183 /*
3184  * This function clears bits of the free pages reported by the caller from the
3185  * migration dirty bitmap. @addr is the host address corresponding to the
3186  * start of the continuous guest free pages, and @len is the total bytes of
3187  * those pages.
3188  */
3189 void qemu_guest_free_page_hint(void *addr, size_t len)
3190 {
3191     RAMBlock *block;
3192     ram_addr_t offset;
3193     size_t used_len, start, npages;
3194     MigrationState *s = migrate_get_current();
3195
3196     /* This function is currently expected to be used during live migration */
3197     if (!migration_is_setup_or_active(s->state)) {
3198         return;
3199     }
3200
3201     for (; len > 0; len -= used_len, addr += used_len) {
3202         block = qemu_ram_block_from_host(addr, false, &offset);
3203         if (unlikely(!block || offset >= block->used_length)) {
3204             /*
3205              * The implementation might not support RAMBlock resize during
3206              * live migration, but it could happen in theory with future
3207              * updates. So we add a check here to capture that case.
3208              */
3209             error_report_once("%s unexpected error", __func__);
3210             return;
3211         }
3212
3213         if (len <= block->used_length - offset) {
3214             used_len = len;
3215         } else {
3216             used_len = block->used_length - offset;
3217         }
3218
3219         start = offset >> TARGET_PAGE_BITS;
3220         npages = used_len >> TARGET_PAGE_BITS;
3221
3222         qemu_mutex_lock(&ram_state->bitmap_mutex);
3223         /*
3224          * The skipped free pages are equavalent to be sent from clear_bmap's
3225          * perspective, so clear the bits from the memory region bitmap which
3226          * are initially set. Otherwise those skipped pages will be sent in
3227          * the next round after syncing from the memory region bitmap.
3228          */
3229         migration_clear_memory_region_dirty_bitmap_range(block, start, npages);
3230         ram_state->migration_dirty_pages -=
3231                       bitmap_count_one_with_offset(block->bmap, start, npages);
3232         bitmap_clear(block->bmap, start, npages);
3233         qemu_mutex_unlock(&ram_state->bitmap_mutex);
3234     }
3235 }
3236
3237 /*
3238  * Each of ram_save_setup, ram_save_iterate and ram_save_complete has
3239  * long-running RCU critical section.  When rcu-reclaims in the code
3240  * start to become numerous it will be necessary to reduce the
3241  * granularity of these critical sections.
3242  */
3243
3244 /**
3245  * ram_save_setup: Setup RAM for migration
3246  *
3247  * Returns zero to indicate success and negative for error
3248  *
3249  * @f: QEMUFile where to send the data
3250  * @opaque: RAMState pointer
3251  */
3252 static int ram_save_setup(QEMUFile *f, void *opaque)
3253 {
3254     RAMState **rsp = opaque;
3255     RAMBlock *block;
3256     int ret;
3257
3258     if (compress_threads_save_setup()) {
3259         return -1;
3260     }
3261
3262     /* migration has already setup the bitmap, reuse it. */
3263     if (!migration_in_colo_state()) {
3264         if (ram_init_all(rsp) != 0) {
3265             compress_threads_save_cleanup();
3266             return -1;
3267         }
3268     }
3269     (*rsp)->pss[RAM_CHANNEL_PRECOPY].pss_channel = f;
3270
3271     WITH_RCU_READ_LOCK_GUARD() {
3272         qemu_put_be64(f, ram_bytes_total_with_ignored()
3273                          | RAM_SAVE_FLAG_MEM_SIZE);
3274
3275         RAMBLOCK_FOREACH_MIGRATABLE(block) {
3276             qemu_put_byte(f, strlen(block->idstr));
3277             qemu_put_buffer(f, (uint8_t *)block->idstr, strlen(block->idstr));
3278             qemu_put_be64(f, block->used_length);
3279             if (migrate_postcopy_ram() && block->page_size !=
3280                                           qemu_host_page_size) {
3281                 qemu_put_be64(f, block->page_size);
3282             }
3283             if (migrate_ignore_shared()) {
3284                 qemu_put_be64(f, block->mr->addr);
3285             }
3286         }
3287     }
3288
3289     ram_control_before_iterate(f, RAM_CONTROL_SETUP);
3290     ram_control_after_iterate(f, RAM_CONTROL_SETUP);
3291
3292     migration_ops = g_malloc0(sizeof(MigrationOps));
3293     migration_ops->ram_save_target_page = ram_save_target_page_legacy;
3294     ret =  multifd_send_sync_main(f);
3295     if (ret < 0) {
3296         return ret;
3297     }
3298
3299     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3300     qemu_fflush(f);
3301
3302     return 0;
3303 }
3304
3305 /**
3306  * ram_save_iterate: iterative stage for migration
3307  *
3308  * Returns zero to indicate success and negative for error
3309  *
3310  * @f: QEMUFile where to send the data
3311  * @opaque: RAMState pointer
3312  */
3313 static int ram_save_iterate(QEMUFile *f, void *opaque)
3314 {
3315     RAMState **temp = opaque;
3316     RAMState *rs = *temp;
3317     int ret = 0;
3318     int i;
3319     int64_t t0;
3320     int done = 0;
3321
3322     if (blk_mig_bulk_active()) {
3323         /* Avoid transferring ram during bulk phase of block migration as
3324          * the bulk phase will usually take a long time and transferring
3325          * ram updates during that time is pointless. */
3326         goto out;
3327     }
3328
3329     /*
3330      * We'll take this lock a little bit long, but it's okay for two reasons.
3331      * Firstly, the only possible other thread to take it is who calls
3332      * qemu_guest_free_page_hint(), which should be rare; secondly, see
3333      * MAX_WAIT (if curious, further see commit 4508bd9ed8053ce) below, which
3334      * guarantees that we'll at least released it in a regular basis.
3335      */
3336     qemu_mutex_lock(&rs->bitmap_mutex);
3337     WITH_RCU_READ_LOCK_GUARD() {
3338         if (ram_list.version != rs->last_version) {
3339             ram_state_reset(rs);
3340         }
3341
3342         /* Read version before ram_list.blocks */
3343         smp_rmb();
3344
3345         ram_control_before_iterate(f, RAM_CONTROL_ROUND);
3346
3347         t0 = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
3348         i = 0;
3349         while ((ret = qemu_file_rate_limit(f)) == 0 ||
3350                postcopy_has_request(rs)) {
3351             int pages;
3352
3353             if (qemu_file_get_error(f)) {
3354                 break;
3355             }
3356
3357             pages = ram_find_and_save_block(rs);
3358             /* no more pages to sent */
3359             if (pages == 0) {
3360                 done = 1;
3361                 break;
3362             }
3363
3364             if (pages < 0) {
3365                 qemu_file_set_error(f, pages);
3366                 break;
3367             }
3368
3369             rs->target_page_count += pages;
3370
3371             /*
3372              * During postcopy, it is necessary to make sure one whole host
3373              * page is sent in one chunk.
3374              */
3375             if (migrate_postcopy_ram()) {
3376                 flush_compressed_data(rs);
3377             }
3378
3379             /*
3380              * we want to check in the 1st loop, just in case it was the 1st
3381              * time and we had to sync the dirty bitmap.
3382              * qemu_clock_get_ns() is a bit expensive, so we only check each
3383              * some iterations
3384              */
3385             if ((i & 63) == 0) {
3386                 uint64_t t1 = (qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - t0) /
3387                               1000000;
3388                 if (t1 > MAX_WAIT) {
3389                     trace_ram_save_iterate_big_wait(t1, i);
3390                     break;
3391                 }
3392             }
3393             i++;
3394         }
3395     }
3396     qemu_mutex_unlock(&rs->bitmap_mutex);
3397
3398     /*
3399      * Must occur before EOS (or any QEMUFile operation)
3400      * because of RDMA protocol.
3401      */
3402     ram_control_after_iterate(f, RAM_CONTROL_ROUND);
3403
3404 out:
3405     if (ret >= 0
3406         && migration_is_setup_or_active(migrate_get_current()->state)) {
3407         ret = multifd_send_sync_main(rs->pss[RAM_CHANNEL_PRECOPY].pss_channel);
3408         if (ret < 0) {
3409             return ret;
3410         }
3411
3412         qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3413         qemu_fflush(f);
3414         ram_transferred_add(8);
3415
3416         ret = qemu_file_get_error(f);
3417     }
3418     if (ret < 0) {
3419         return ret;
3420     }
3421
3422     return done;
3423 }
3424
3425 /**
3426  * ram_save_complete: function called to send the remaining amount of ram
3427  *
3428  * Returns zero to indicate success or negative on error
3429  *
3430  * Called with iothread lock
3431  *
3432  * @f: QEMUFile where to send the data
3433  * @opaque: RAMState pointer
3434  */
3435 static int ram_save_complete(QEMUFile *f, void *opaque)
3436 {
3437     RAMState **temp = opaque;
3438     RAMState *rs = *temp;
3439     int ret = 0;
3440
3441     rs->last_stage = !migration_in_colo_state();
3442
3443     WITH_RCU_READ_LOCK_GUARD() {
3444         if (!migration_in_postcopy()) {
3445             migration_bitmap_sync_precopy(rs);
3446         }
3447
3448         ram_control_before_iterate(f, RAM_CONTROL_FINISH);
3449
3450         /* try transferring iterative blocks of memory */
3451
3452         /* flush all remaining blocks regardless of rate limiting */
3453         qemu_mutex_lock(&rs->bitmap_mutex);
3454         while (true) {
3455             int pages;
3456
3457             pages = ram_find_and_save_block(rs);
3458             /* no more blocks to sent */
3459             if (pages == 0) {
3460                 break;
3461             }
3462             if (pages < 0) {
3463                 ret = pages;
3464                 break;
3465             }
3466         }
3467         qemu_mutex_unlock(&rs->bitmap_mutex);
3468
3469         flush_compressed_data(rs);
3470         ram_control_after_iterate(f, RAM_CONTROL_FINISH);
3471     }
3472
3473     if (ret < 0) {
3474         return ret;
3475     }
3476
3477     ret = multifd_send_sync_main(rs->pss[RAM_CHANNEL_PRECOPY].pss_channel);
3478     if (ret < 0) {
3479         return ret;
3480     }
3481
3482     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
3483     qemu_fflush(f);
3484
3485     return 0;
3486 }
3487
3488 static void ram_state_pending_estimate(void *opaque,
3489                                        uint64_t *res_precopy_only,
3490                                        uint64_t *res_compatible,
3491                                        uint64_t *res_postcopy_only)
3492 {
3493     RAMState **temp = opaque;
3494     RAMState *rs = *temp;
3495
3496     uint64_t remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
3497
3498     if (migrate_postcopy_ram()) {
3499         /* We can do postcopy, and all the data is postcopiable */
3500         *res_postcopy_only += remaining_size;
3501     } else {
3502         *res_precopy_only += remaining_size;
3503     }
3504 }
3505
3506 static void ram_state_pending_exact(void *opaque,
3507                                     uint64_t *res_precopy_only,
3508                                     uint64_t *res_compatible,
3509                                     uint64_t *res_postcopy_only)
3510 {
3511     RAMState **temp = opaque;
3512     RAMState *rs = *temp;
3513
3514     uint64_t remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
3515
3516     if (!migration_in_postcopy()) {
3517         qemu_mutex_lock_iothread();
3518         WITH_RCU_READ_LOCK_GUARD() {
3519             migration_bitmap_sync_precopy(rs);
3520         }
3521         qemu_mutex_unlock_iothread();
3522         remaining_size = rs->migration_dirty_pages * TARGET_PAGE_SIZE;
3523     }
3524
3525     if (migrate_postcopy_ram()) {
3526         /* We can do postcopy, and all the data is postcopiable */
3527         *res_compatible += remaining_size;
3528     } else {
3529         *res_precopy_only += remaining_size;
3530     }
3531 }
3532
3533 static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
3534 {
3535     unsigned int xh_len;
3536     int xh_flags;
3537     uint8_t *loaded_data;
3538
3539     /* extract RLE header */
3540     xh_flags = qemu_get_byte(f);
3541     xh_len = qemu_get_be16(f);
3542
3543     if (xh_flags != ENCODING_FLAG_XBZRLE) {
3544         error_report("Failed to load XBZRLE page - wrong compression!");
3545         return -1;
3546     }
3547
3548     if (xh_len > TARGET_PAGE_SIZE) {
3549         error_report("Failed to load XBZRLE page - len overflow!");
3550         return -1;
3551     }
3552     loaded_data = XBZRLE.decoded_buf;
3553     /* load data and decode */
3554     /* it can change loaded_data to point to an internal buffer */
3555     qemu_get_buffer_in_place(f, &loaded_data, xh_len);
3556
3557     /* decode RLE */
3558     if (xbzrle_decode_buffer(loaded_data, xh_len, host,
3559                              TARGET_PAGE_SIZE) == -1) {
3560         error_report("Failed to load XBZRLE page - decode error!");
3561         return -1;
3562     }
3563
3564     return 0;
3565 }
3566
3567 /**
3568  * ram_block_from_stream: read a RAMBlock id from the migration stream
3569  *
3570  * Must be called from within a rcu critical section.
3571  *
3572  * Returns a pointer from within the RCU-protected ram_list.
3573  *
3574  * @mis: the migration incoming state pointer
3575  * @f: QEMUFile where to read the data from
3576  * @flags: Page flags (mostly to see if it's a continuation of previous block)
3577  * @channel: the channel we're using
3578  */
3579 static inline RAMBlock *ram_block_from_stream(MigrationIncomingState *mis,
3580                                               QEMUFile *f, int flags,
3581                                               int channel)
3582 {
3583     RAMBlock *block = mis->last_recv_block[channel];
3584     char id[256];
3585     uint8_t len;
3586
3587     if (flags & RAM_SAVE_FLAG_CONTINUE) {
3588         if (!block) {
3589             error_report("Ack, bad migration stream!");
3590             return NULL;
3591         }
3592         return block;
3593     }
3594
3595     len = qemu_get_byte(f);
3596     qemu_get_buffer(f, (uint8_t *)id, len);
3597     id[len] = 0;
3598
3599     block = qemu_ram_block_by_name(id);
3600     if (!block) {
3601         error_report("Can't find block %s", id);
3602         return NULL;
3603     }
3604
3605     if (ramblock_is_ignored(block)) {
3606         error_report("block %s should not be migrated !", id);
3607         return NULL;
3608     }
3609
3610     mis->last_recv_block[channel] = block;
3611
3612     return block;
3613 }
3614
3615 static inline void *host_from_ram_block_offset(RAMBlock *block,
3616                                                ram_addr_t offset)
3617 {
3618     if (!offset_in_ramblock(block, offset)) {
3619         return NULL;
3620     }
3621
3622     return block->host + offset;
3623 }
3624
3625 static void *host_page_from_ram_block_offset(RAMBlock *block,
3626                                              ram_addr_t offset)
3627 {
3628     /* Note: Explicitly no check against offset_in_ramblock(). */
3629     return (void *)QEMU_ALIGN_DOWN((uintptr_t)(block->host + offset),
3630                                    block->page_size);
3631 }
3632
3633 static ram_addr_t host_page_offset_from_ram_block_offset(RAMBlock *block,
3634                                                          ram_addr_t offset)
3635 {
3636     return ((uintptr_t)block->host + offset) & (block->page_size - 1);
3637 }
3638
3639 static inline void *colo_cache_from_block_offset(RAMBlock *block,
3640                              ram_addr_t offset, bool record_bitmap)
3641 {
3642     if (!offset_in_ramblock(block, offset)) {
3643         return NULL;
3644     }
3645     if (!block->colo_cache) {
3646         error_report("%s: colo_cache is NULL in block :%s",
3647                      __func__, block->idstr);
3648         return NULL;
3649     }
3650
3651     /*
3652     * During colo checkpoint, we need bitmap of these migrated pages.
3653     * It help us to decide which pages in ram cache should be flushed
3654     * into VM's RAM later.
3655     */
3656     if (record_bitmap &&
3657         !test_and_set_bit(offset >> TARGET_PAGE_BITS, block->bmap)) {
3658         ram_state->migration_dirty_pages++;
3659     }
3660     return block->colo_cache + offset;
3661 }
3662
3663 /**
3664  * ram_handle_compressed: handle the zero page case
3665  *
3666  * If a page (or a whole RDMA chunk) has been
3667  * determined to be zero, then zap it.
3668  *
3669  * @host: host address for the zero page
3670  * @ch: what the page is filled from.  We only support zero
3671  * @size: size of the zero page
3672  */
3673 void ram_handle_compressed(void *host, uint8_t ch, uint64_t size)
3674 {
3675     if (ch != 0 || !buffer_is_zero(host, size)) {
3676         memset(host, ch, size);
3677     }
3678 }
3679
3680 /* return the size after decompression, or negative value on error */
3681 static int
3682 qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len,
3683                      const uint8_t *source, size_t source_len)
3684 {
3685     int err;
3686
3687     err = inflateReset(stream);
3688     if (err != Z_OK) {
3689         return -1;
3690     }
3691
3692     stream->avail_in = source_len;
3693     stream->next_in = (uint8_t *)source;
3694     stream->avail_out = dest_len;
3695     stream->next_out = dest;
3696
3697     err = inflate(stream, Z_NO_FLUSH);
3698     if (err != Z_STREAM_END) {
3699         return -1;
3700     }
3701
3702     return stream->total_out;
3703 }
3704
3705 static void *do_data_decompress(void *opaque)
3706 {
3707     DecompressParam *param = opaque;
3708     unsigned long pagesize;
3709     uint8_t *des;
3710     int len, ret;
3711
3712     qemu_mutex_lock(&param->mutex);
3713     while (!param->quit) {
3714         if (param->des) {
3715             des = param->des;
3716             len = param->len;
3717             param->des = 0;
3718             qemu_mutex_unlock(&param->mutex);
3719
3720             pagesize = TARGET_PAGE_SIZE;
3721
3722             ret = qemu_uncompress_data(&param->stream, des, pagesize,
3723                                        param->compbuf, len);
3724             if (ret < 0 && migrate_get_current()->decompress_error_check) {
3725                 error_report("decompress data failed");
3726                 qemu_file_set_error(decomp_file, ret);
3727             }
3728
3729             qemu_mutex_lock(&decomp_done_lock);
3730             param->done = true;
3731             qemu_cond_signal(&decomp_done_cond);
3732             qemu_mutex_unlock(&decomp_done_lock);
3733
3734             qemu_mutex_lock(&param->mutex);
3735         } else {
3736             qemu_cond_wait(&param->cond, &param->mutex);
3737         }
3738     }
3739     qemu_mutex_unlock(&param->mutex);
3740
3741     return NULL;
3742 }
3743
3744 static int wait_for_decompress_done(void)
3745 {
3746     int idx, thread_count;
3747
3748     if (!migrate_use_compression()) {
3749         return 0;
3750     }
3751
3752     thread_count = migrate_decompress_threads();
3753     qemu_mutex_lock(&decomp_done_lock);
3754     for (idx = 0; idx < thread_count; idx++) {
3755         while (!decomp_param[idx].done) {
3756             qemu_cond_wait(&decomp_done_cond, &decomp_done_lock);
3757         }
3758     }
3759     qemu_mutex_unlock(&decomp_done_lock);
3760     return qemu_file_get_error(decomp_file);
3761 }
3762
3763 static void compress_threads_load_cleanup(void)
3764 {
3765     int i, thread_count;
3766
3767     if (!migrate_use_compression()) {
3768         return;
3769     }
3770     thread_count = migrate_decompress_threads();
3771     for (i = 0; i < thread_count; i++) {
3772         /*
3773          * we use it as a indicator which shows if the thread is
3774          * properly init'd or not
3775          */
3776         if (!decomp_param[i].compbuf) {
3777             break;
3778         }
3779
3780         qemu_mutex_lock(&decomp_param[i].mutex);
3781         decomp_param[i].quit = true;
3782         qemu_cond_signal(&decomp_param[i].cond);
3783         qemu_mutex_unlock(&decomp_param[i].mutex);
3784     }
3785     for (i = 0; i < thread_count; i++) {
3786         if (!decomp_param[i].compbuf) {
3787             break;
3788         }
3789
3790         qemu_thread_join(decompress_threads + i);
3791         qemu_mutex_destroy(&decomp_param[i].mutex);
3792         qemu_cond_destroy(&decomp_param[i].cond);
3793         inflateEnd(&decomp_param[i].stream);
3794         g_free(decomp_param[i].compbuf);
3795         decomp_param[i].compbuf = NULL;
3796     }
3797     g_free(decompress_threads);
3798     g_free(decomp_param);
3799     decompress_threads = NULL;
3800     decomp_param = NULL;
3801     decomp_file = NULL;
3802 }
3803
3804 static int compress_threads_load_setup(QEMUFile *f)
3805 {
3806     int i, thread_count;
3807
3808     if (!migrate_use_compression()) {
3809         return 0;
3810     }
3811
3812     thread_count = migrate_decompress_threads();
3813     decompress_threads = g_new0(QemuThread, thread_count);
3814     decomp_param = g_new0(DecompressParam, thread_count);
3815     qemu_mutex_init(&decomp_done_lock);
3816     qemu_cond_init(&decomp_done_cond);
3817     decomp_file = f;
3818     for (i = 0; i < thread_count; i++) {
3819         if (inflateInit(&decomp_param[i].stream) != Z_OK) {
3820             goto exit;
3821         }
3822
3823         decomp_param[i].compbuf = g_malloc0(compressBound(TARGET_PAGE_SIZE));
3824         qemu_mutex_init(&decomp_param[i].mutex);
3825         qemu_cond_init(&decomp_param[i].cond);
3826         decomp_param[i].done = true;
3827         decomp_param[i].quit = false;
3828         qemu_thread_create(decompress_threads + i, "decompress",
3829                            do_data_decompress, decomp_param + i,
3830                            QEMU_THREAD_JOINABLE);
3831     }
3832     return 0;
3833 exit:
3834     compress_threads_load_cleanup();
3835     return -1;
3836 }
3837
3838 static void decompress_data_with_multi_threads(QEMUFile *f,
3839                                                void *host, int len)
3840 {
3841     int idx, thread_count;
3842
3843     thread_count = migrate_decompress_threads();
3844     QEMU_LOCK_GUARD(&decomp_done_lock);
3845     while (true) {
3846         for (idx = 0; idx < thread_count; idx++) {
3847             if (decomp_param[idx].done) {
3848                 decomp_param[idx].done = false;
3849                 qemu_mutex_lock(&decomp_param[idx].mutex);
3850                 qemu_get_buffer(f, decomp_param[idx].compbuf, len);
3851                 decomp_param[idx].des = host;
3852                 decomp_param[idx].len = len;
3853                 qemu_cond_signal(&decomp_param[idx].cond);
3854                 qemu_mutex_unlock(&decomp_param[idx].mutex);
3855                 break;
3856             }
3857         }
3858         if (idx < thread_count) {
3859             break;
3860         } else {
3861             qemu_cond_wait(&decomp_done_cond, &decomp_done_lock);
3862         }
3863     }
3864 }
3865
3866 static void colo_init_ram_state(void)
3867 {
3868     ram_state_init(&ram_state);
3869 }
3870
3871 /*
3872  * colo cache: this is for secondary VM, we cache the whole
3873  * memory of the secondary VM, it is need to hold the global lock
3874  * to call this helper.
3875  */
3876 int colo_init_ram_cache(void)
3877 {
3878     RAMBlock *block;
3879
3880     WITH_RCU_READ_LOCK_GUARD() {
3881         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3882             block->colo_cache = qemu_anon_ram_alloc(block->used_length,
3883                                                     NULL, false, false);
3884             if (!block->colo_cache) {
3885                 error_report("%s: Can't alloc memory for COLO cache of block %s,"
3886                              "size 0x" RAM_ADDR_FMT, __func__, block->idstr,
3887                              block->used_length);
3888                 RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3889                     if (block->colo_cache) {
3890                         qemu_anon_ram_free(block->colo_cache, block->used_length);
3891                         block->colo_cache = NULL;
3892                     }
3893                 }
3894                 return -errno;
3895             }
3896             if (!machine_dump_guest_core(current_machine)) {
3897                 qemu_madvise(block->colo_cache, block->used_length,
3898                              QEMU_MADV_DONTDUMP);
3899             }
3900         }
3901     }
3902
3903     /*
3904     * Record the dirty pages that sent by PVM, we use this dirty bitmap together
3905     * with to decide which page in cache should be flushed into SVM's RAM. Here
3906     * we use the same name 'ram_bitmap' as for migration.
3907     */
3908     if (ram_bytes_total()) {
3909         RAMBlock *block;
3910
3911         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3912             unsigned long pages = block->max_length >> TARGET_PAGE_BITS;
3913             block->bmap = bitmap_new(pages);
3914         }
3915     }
3916
3917     colo_init_ram_state();
3918     return 0;
3919 }
3920
3921 /* TODO: duplicated with ram_init_bitmaps */
3922 void colo_incoming_start_dirty_log(void)
3923 {
3924     RAMBlock *block = NULL;
3925     /* For memory_global_dirty_log_start below. */
3926     qemu_mutex_lock_iothread();
3927     qemu_mutex_lock_ramlist();
3928
3929     memory_global_dirty_log_sync();
3930     WITH_RCU_READ_LOCK_GUARD() {
3931         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3932             ramblock_sync_dirty_bitmap(ram_state, block);
3933             /* Discard this dirty bitmap record */
3934             bitmap_zero(block->bmap, block->max_length >> TARGET_PAGE_BITS);
3935         }
3936         memory_global_dirty_log_start(GLOBAL_DIRTY_MIGRATION);
3937     }
3938     ram_state->migration_dirty_pages = 0;
3939     qemu_mutex_unlock_ramlist();
3940     qemu_mutex_unlock_iothread();
3941 }
3942
3943 /* It is need to hold the global lock to call this helper */
3944 void colo_release_ram_cache(void)
3945 {
3946     RAMBlock *block;
3947
3948     memory_global_dirty_log_stop(GLOBAL_DIRTY_MIGRATION);
3949     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3950         g_free(block->bmap);
3951         block->bmap = NULL;
3952     }
3953
3954     WITH_RCU_READ_LOCK_GUARD() {
3955         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
3956             if (block->colo_cache) {
3957                 qemu_anon_ram_free(block->colo_cache, block->used_length);
3958                 block->colo_cache = NULL;
3959             }
3960         }
3961     }
3962     ram_state_cleanup(&ram_state);
3963 }
3964
3965 /**
3966  * ram_load_setup: Setup RAM for migration incoming side
3967  *
3968  * Returns zero to indicate success and negative for error
3969  *
3970  * @f: QEMUFile where to receive the data
3971  * @opaque: RAMState pointer
3972  */
3973 static int ram_load_setup(QEMUFile *f, void *opaque)
3974 {
3975     if (compress_threads_load_setup(f)) {
3976         return -1;
3977     }
3978
3979     xbzrle_load_setup();
3980     ramblock_recv_map_init();
3981
3982     return 0;
3983 }
3984
3985 static int ram_load_cleanup(void *opaque)
3986 {
3987     RAMBlock *rb;
3988
3989     RAMBLOCK_FOREACH_NOT_IGNORED(rb) {
3990         qemu_ram_block_writeback(rb);
3991     }
3992
3993     xbzrle_load_cleanup();
3994     compress_threads_load_cleanup();
3995
3996     RAMBLOCK_FOREACH_NOT_IGNORED(rb) {
3997         g_free(rb->receivedmap);
3998         rb->receivedmap = NULL;
3999     }
4000
4001     return 0;
4002 }
4003
4004 /**
4005  * ram_postcopy_incoming_init: allocate postcopy data structures
4006  *
4007  * Returns 0 for success and negative if there was one error
4008  *
4009  * @mis: current migration incoming state
4010  *
4011  * Allocate data structures etc needed by incoming migration with
4012  * postcopy-ram. postcopy-ram's similarly names
4013  * postcopy_ram_incoming_init does the work.
4014  */
4015 int ram_postcopy_incoming_init(MigrationIncomingState *mis)
4016 {
4017     return postcopy_ram_incoming_init(mis);
4018 }
4019
4020 /**
4021  * ram_load_postcopy: load a page in postcopy case
4022  *
4023  * Returns 0 for success or -errno in case of error
4024  *
4025  * Called in postcopy mode by ram_load().
4026  * rcu_read_lock is taken prior to this being called.
4027  *
4028  * @f: QEMUFile where to send the data
4029  * @channel: the channel to use for loading
4030  */
4031 int ram_load_postcopy(QEMUFile *f, int channel)
4032 {
4033     int flags = 0, ret = 0;
4034     bool place_needed = false;
4035     bool matches_target_page_size = false;
4036     MigrationIncomingState *mis = migration_incoming_get_current();
4037     PostcopyTmpPage *tmp_page = &mis->postcopy_tmp_pages[channel];
4038
4039     while (!ret && !(flags & RAM_SAVE_FLAG_EOS)) {
4040         ram_addr_t addr;
4041         void *page_buffer = NULL;
4042         void *place_source = NULL;
4043         RAMBlock *block = NULL;
4044         uint8_t ch;
4045         int len;
4046
4047         addr = qemu_get_be64(f);
4048
4049         /*
4050          * If qemu file error, we should stop here, and then "addr"
4051          * may be invalid
4052          */
4053         ret = qemu_file_get_error(f);
4054         if (ret) {
4055             break;
4056         }
4057
4058         flags = addr & ~TARGET_PAGE_MASK;
4059         addr &= TARGET_PAGE_MASK;
4060
4061         trace_ram_load_postcopy_loop(channel, (uint64_t)addr, flags);
4062         if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE |
4063                      RAM_SAVE_FLAG_COMPRESS_PAGE)) {
4064             block = ram_block_from_stream(mis, f, flags, channel);
4065             if (!block) {
4066                 ret = -EINVAL;
4067                 break;
4068             }
4069
4070             /*
4071              * Relying on used_length is racy and can result in false positives.
4072              * We might place pages beyond used_length in case RAM was shrunk
4073              * while in postcopy, which is fine - trying to place via
4074              * UFFDIO_COPY/UFFDIO_ZEROPAGE will never segfault.
4075              */
4076             if (!block->host || addr >= block->postcopy_length) {
4077                 error_report("Illegal RAM offset " RAM_ADDR_FMT, addr);
4078                 ret = -EINVAL;
4079                 break;
4080             }
4081             tmp_page->target_pages++;
4082             matches_target_page_size = block->page_size == TARGET_PAGE_SIZE;
4083             /*
4084              * Postcopy requires that we place whole host pages atomically;
4085              * these may be huge pages for RAMBlocks that are backed by
4086              * hugetlbfs.
4087              * To make it atomic, the data is read into a temporary page
4088              * that's moved into place later.
4089              * The migration protocol uses,  possibly smaller, target-pages
4090              * however the source ensures it always sends all the components
4091              * of a host page in one chunk.
4092              */
4093             page_buffer = tmp_page->tmp_huge_page +
4094                           host_page_offset_from_ram_block_offset(block, addr);
4095             /* If all TP are zero then we can optimise the place */
4096             if (tmp_page->target_pages == 1) {
4097                 tmp_page->host_addr =
4098                     host_page_from_ram_block_offset(block, addr);
4099             } else if (tmp_page->host_addr !=
4100                        host_page_from_ram_block_offset(block, addr)) {
4101                 /* not the 1st TP within the HP */
4102                 error_report("Non-same host page detected on channel %d: "
4103                              "Target host page %p, received host page %p "
4104                              "(rb %s offset 0x"RAM_ADDR_FMT" target_pages %d)",
4105                              channel, tmp_page->host_addr,
4106                              host_page_from_ram_block_offset(block, addr),
4107                              block->idstr, addr, tmp_page->target_pages);
4108                 ret = -EINVAL;
4109                 break;
4110             }
4111
4112             /*
4113              * If it's the last part of a host page then we place the host
4114              * page
4115              */
4116             if (tmp_page->target_pages ==
4117                 (block->page_size / TARGET_PAGE_SIZE)) {
4118                 place_needed = true;
4119             }
4120             place_source = tmp_page->tmp_huge_page;
4121         }
4122
4123         switch (flags & ~RAM_SAVE_FLAG_CONTINUE) {
4124         case RAM_SAVE_FLAG_ZERO:
4125             ch = qemu_get_byte(f);
4126             /*
4127              * Can skip to set page_buffer when
4128              * this is a zero page and (block->page_size == TARGET_PAGE_SIZE).
4129              */
4130             if (ch || !matches_target_page_size) {
4131                 memset(page_buffer, ch, TARGET_PAGE_SIZE);
4132             }
4133             if (ch) {
4134                 tmp_page->all_zero = false;
4135             }
4136             break;
4137
4138         case RAM_SAVE_FLAG_PAGE:
4139             tmp_page->all_zero = false;
4140             if (!matches_target_page_size) {
4141                 /* For huge pages, we always use temporary buffer */
4142                 qemu_get_buffer(f, page_buffer, TARGET_PAGE_SIZE);
4143             } else {
4144                 /*
4145                  * For small pages that matches target page size, we
4146                  * avoid the qemu_file copy.  Instead we directly use
4147                  * the buffer of QEMUFile to place the page.  Note: we
4148                  * cannot do any QEMUFile operation before using that
4149                  * buffer to make sure the buffer is valid when
4150                  * placing the page.
4151                  */
4152                 qemu_get_buffer_in_place(f, (uint8_t **)&place_source,
4153                                          TARGET_PAGE_SIZE);
4154             }
4155             break;
4156         case RAM_SAVE_FLAG_COMPRESS_PAGE:
4157             tmp_page->all_zero = false;
4158             len = qemu_get_be32(f);
4159             if (len < 0 || len > compressBound(TARGET_PAGE_SIZE)) {
4160                 error_report("Invalid compressed data length: %d", len);
4161                 ret = -EINVAL;
4162                 break;
4163             }
4164             decompress_data_with_multi_threads(f, page_buffer, len);
4165             break;
4166
4167         case RAM_SAVE_FLAG_EOS:
4168             /* normal exit */
4169             multifd_recv_sync_main();
4170             break;
4171         default:
4172             error_report("Unknown combination of migration flags: 0x%x"
4173                          " (postcopy mode)", flags);
4174             ret = -EINVAL;
4175             break;
4176         }
4177
4178         /* Got the whole host page, wait for decompress before placing. */
4179         if (place_needed) {
4180             ret |= wait_for_decompress_done();
4181         }
4182
4183         /* Detect for any possible file errors */
4184         if (!ret && qemu_file_get_error(f)) {
4185             ret = qemu_file_get_error(f);
4186         }
4187
4188         if (!ret && place_needed) {
4189             if (tmp_page->all_zero) {
4190                 ret = postcopy_place_page_zero(mis, tmp_page->host_addr, block);
4191             } else {
4192                 ret = postcopy_place_page(mis, tmp_page->host_addr,
4193                                           place_source, block);
4194             }
4195             place_needed = false;
4196             postcopy_temp_page_reset(tmp_page);
4197         }
4198     }
4199
4200     return ret;
4201 }
4202
4203 static bool postcopy_is_running(void)
4204 {
4205     PostcopyState ps = postcopy_state_get();
4206     return ps >= POSTCOPY_INCOMING_LISTENING && ps < POSTCOPY_INCOMING_END;
4207 }
4208
4209 /*
4210  * Flush content of RAM cache into SVM's memory.
4211  * Only flush the pages that be dirtied by PVM or SVM or both.
4212  */
4213 void colo_flush_ram_cache(void)
4214 {
4215     RAMBlock *block = NULL;
4216     void *dst_host;
4217     void *src_host;
4218     unsigned long offset = 0;
4219
4220     memory_global_dirty_log_sync();
4221     WITH_RCU_READ_LOCK_GUARD() {
4222         RAMBLOCK_FOREACH_NOT_IGNORED(block) {
4223             ramblock_sync_dirty_bitmap(ram_state, block);
4224         }
4225     }
4226
4227     trace_colo_flush_ram_cache_begin(ram_state->migration_dirty_pages);
4228     WITH_RCU_READ_LOCK_GUARD() {
4229         block = QLIST_FIRST_RCU(&ram_list.blocks);
4230
4231         while (block) {
4232             unsigned long num = 0;
4233
4234             offset = colo_bitmap_find_dirty(ram_state, block, offset, &num);
4235             if (!offset_in_ramblock(block,
4236                                     ((ram_addr_t)offset) << TARGET_PAGE_BITS)) {
4237                 offset = 0;
4238                 num = 0;
4239                 block = QLIST_NEXT_RCU(block, next);
4240             } else {
4241                 unsigned long i = 0;
4242
4243                 for (i = 0; i < num; i++) {
4244                     migration_bitmap_clear_dirty(ram_state, block, offset + i);
4245                 }
4246                 dst_host = block->host
4247                          + (((ram_addr_t)offset) << TARGET_PAGE_BITS);
4248                 src_host = block->colo_cache
4249                          + (((ram_addr_t)offset) << TARGET_PAGE_BITS);
4250                 memcpy(dst_host, src_host, TARGET_PAGE_SIZE * num);
4251                 offset += num;
4252             }
4253         }
4254     }
4255     trace_colo_flush_ram_cache_end();
4256 }
4257
4258 /**
4259  * ram_load_precopy: load pages in precopy case
4260  *
4261  * Returns 0 for success or -errno in case of error
4262  *
4263  * Called in precopy mode by ram_load().
4264  * rcu_read_lock is taken prior to this being called.
4265  *
4266  * @f: QEMUFile where to send the data
4267  */
4268 static int ram_load_precopy(QEMUFile *f)
4269 {
4270     MigrationIncomingState *mis = migration_incoming_get_current();
4271     int flags = 0, ret = 0, invalid_flags = 0, len = 0, i = 0;
4272     /* ADVISE is earlier, it shows the source has the postcopy capability on */
4273     bool postcopy_advised = migration_incoming_postcopy_advised();
4274     if (!migrate_use_compression()) {
4275         invalid_flags |= RAM_SAVE_FLAG_COMPRESS_PAGE;
4276     }
4277
4278     while (!ret && !(flags & RAM_SAVE_FLAG_EOS)) {
4279         ram_addr_t addr, total_ram_bytes;
4280         void *host = NULL, *host_bak = NULL;
4281         uint8_t ch;
4282
4283         /*
4284          * Yield periodically to let main loop run, but an iteration of
4285          * the main loop is expensive, so do it each some iterations
4286          */
4287         if ((i & 32767) == 0 && qemu_in_coroutine()) {
4288             aio_co_schedule(qemu_get_current_aio_context(),
4289                             qemu_coroutine_self());
4290             qemu_coroutine_yield();
4291         }
4292         i++;
4293
4294         addr = qemu_get_be64(f);
4295         flags = addr & ~TARGET_PAGE_MASK;
4296         addr &= TARGET_PAGE_MASK;
4297
4298         if (flags & invalid_flags) {
4299             if (flags & invalid_flags & RAM_SAVE_FLAG_COMPRESS_PAGE) {
4300                 error_report("Received an unexpected compressed page");
4301             }
4302
4303             ret = -EINVAL;
4304             break;
4305         }
4306
4307         if (flags & (RAM_SAVE_FLAG_ZERO | RAM_SAVE_FLAG_PAGE |
4308                      RAM_SAVE_FLAG_COMPRESS_PAGE | RAM_SAVE_FLAG_XBZRLE)) {
4309             RAMBlock *block = ram_block_from_stream(mis, f, flags,
4310                                                     RAM_CHANNEL_PRECOPY);
4311
4312             host = host_from_ram_block_offset(block, addr);
4313             /*
4314              * After going into COLO stage, we should not load the page
4315              * into SVM's memory directly, we put them into colo_cache firstly.
4316              * NOTE: We need to keep a copy of SVM's ram in colo_cache.
4317              * Previously, we copied all these memory in preparing stage of COLO
4318              * while we need to stop VM, which is a time-consuming process.
4319              * Here we optimize it by a trick, back-up every page while in
4320              * migration process while COLO is enabled, though it affects the
4321              * speed of the migration, but it obviously reduce the downtime of
4322              * back-up all SVM'S memory in COLO preparing stage.
4323              */
4324             if (migration_incoming_colo_enabled()) {
4325                 if (migration_incoming_in_colo_state()) {
4326                     /* In COLO stage, put all pages into cache temporarily */
4327                     host = colo_cache_from_block_offset(block, addr, true);
4328                 } else {
4329                    /*
4330                     * In migration stage but before COLO stage,
4331                     * Put all pages into both cache and SVM's memory.
4332                     */
4333                     host_bak = colo_cache_from_block_offset(block, addr, false);
4334                 }
4335             }
4336             if (!host) {
4337                 error_report("Illegal RAM offset " RAM_ADDR_FMT, addr);
4338                 ret = -EINVAL;
4339                 break;
4340             }
4341             if (!migration_incoming_in_colo_state()) {
4342                 ramblock_recv_bitmap_set(block, host);
4343             }
4344
4345             trace_ram_load_loop(block->idstr, (uint64_t)addr, flags, host);
4346         }
4347
4348         switch (flags & ~RAM_SAVE_FLAG_CONTINUE) {
4349         case RAM_SAVE_FLAG_MEM_SIZE:
4350             /* Synchronize RAM block list */
4351             total_ram_bytes = addr;
4352             while (!ret && total_ram_bytes) {
4353                 RAMBlock *block;
4354                 char id[256];
4355                 ram_addr_t length;
4356
4357                 len = qemu_get_byte(f);
4358                 qemu_get_buffer(f, (uint8_t *)id, len);
4359                 id[len] = 0;
4360                 length = qemu_get_be64(f);
4361
4362                 block = qemu_ram_block_by_name(id);
4363                 if (block && !qemu_ram_is_migratable(block)) {
4364                     error_report("block %s should not be migrated !", id);
4365                     ret = -EINVAL;
4366                 } else if (block) {
4367                     if (length != block->used_length) {
4368                         Error *local_err = NULL;
4369
4370                         ret = qemu_ram_resize(block, length,
4371                                               &local_err);
4372                         if (local_err) {
4373                             error_report_err(local_err);
4374                         }
4375                     }
4376                     /* For postcopy we need to check hugepage sizes match */
4377                     if (postcopy_advised && migrate_postcopy_ram() &&
4378                         block->page_size != qemu_host_page_size) {
4379                         uint64_t remote_page_size = qemu_get_be64(f);
4380                         if (remote_page_size != block->page_size) {
4381                             error_report("Mismatched RAM page size %s "
4382                                          "(local) %zd != %" PRId64,
4383                                          id, block->page_size,
4384                                          remote_page_size);
4385                             ret = -EINVAL;
4386                         }
4387                     }
4388                     if (migrate_ignore_shared()) {
4389                         hwaddr addr = qemu_get_be64(f);
4390                         if (ramblock_is_ignored(block) &&
4391                             block->mr->addr != addr) {
4392                             error_report("Mismatched GPAs for block %s "
4393                                          "%" PRId64 "!= %" PRId64,
4394                                          id, (uint64_t)addr,
4395                                          (uint64_t)block->mr->addr);
4396                             ret = -EINVAL;
4397                         }
4398                     }
4399                     ram_control_load_hook(f, RAM_CONTROL_BLOCK_REG,
4400                                           block->idstr);
4401                 } else {
4402                     error_report("Unknown ramblock \"%s\", cannot "
4403                                  "accept migration", id);
4404                     ret = -EINVAL;
4405                 }
4406
4407                 total_ram_bytes -= length;
4408             }
4409             break;
4410
4411         case RAM_SAVE_FLAG_ZERO:
4412             ch = qemu_get_byte(f);
4413             ram_handle_compressed(host, ch, TARGET_PAGE_SIZE);
4414             break;
4415
4416         case RAM_SAVE_FLAG_PAGE:
4417             qemu_get_buffer(f, host, TARGET_PAGE_SIZE);
4418             break;
4419
4420         case RAM_SAVE_FLAG_COMPRESS_PAGE:
4421             len = qemu_get_be32(f);
4422             if (len < 0 || len > compressBound(TARGET_PAGE_SIZE)) {
4423                 error_report("Invalid compressed data length: %d", len);
4424                 ret = -EINVAL;
4425                 break;
4426             }
4427             decompress_data_with_multi_threads(f, host, len);
4428             break;
4429
4430         case RAM_SAVE_FLAG_XBZRLE:
4431             if (load_xbzrle(f, addr, host) < 0) {
4432                 error_report("Failed to decompress XBZRLE page at "
4433                              RAM_ADDR_FMT, addr);
4434                 ret = -EINVAL;
4435                 break;
4436             }
4437             break;
4438         case RAM_SAVE_FLAG_EOS:
4439             /* normal exit */
4440             multifd_recv_sync_main();
4441             break;
4442         default:
4443             if (flags & RAM_SAVE_FLAG_HOOK) {
4444                 ram_control_load_hook(f, RAM_CONTROL_HOOK, NULL);
4445             } else {
4446                 error_report("Unknown combination of migration flags: 0x%x",
4447                              flags);
4448                 ret = -EINVAL;
4449             }
4450         }
4451         if (!ret) {
4452             ret = qemu_file_get_error(f);
4453         }
4454         if (!ret && host_bak) {
4455             memcpy(host_bak, host, TARGET_PAGE_SIZE);
4456         }
4457     }
4458
4459     ret |= wait_for_decompress_done();
4460     return ret;
4461 }
4462
4463 static int ram_load(QEMUFile *f, void *opaque, int version_id)
4464 {
4465     int ret = 0;
4466     static uint64_t seq_iter;
4467     /*
4468      * If system is running in postcopy mode, page inserts to host memory must
4469      * be atomic
4470      */
4471     bool postcopy_running = postcopy_is_running();
4472
4473     seq_iter++;
4474
4475     if (version_id != 4) {
4476         return -EINVAL;
4477     }
4478
4479     /*
4480      * This RCU critical section can be very long running.
4481      * When RCU reclaims in the code start to become numerous,
4482      * it will be necessary to reduce the granularity of this
4483      * critical section.
4484      */
4485     WITH_RCU_READ_LOCK_GUARD() {
4486         if (postcopy_running) {
4487             /*
4488              * Note!  Here RAM_CHANNEL_PRECOPY is the precopy channel of
4489              * postcopy migration, we have another RAM_CHANNEL_POSTCOPY to
4490              * service fast page faults.
4491              */
4492             ret = ram_load_postcopy(f, RAM_CHANNEL_PRECOPY);
4493         } else {
4494             ret = ram_load_precopy(f);
4495         }
4496     }
4497     trace_ram_load_complete(ret, seq_iter);
4498
4499     return ret;
4500 }
4501
4502 static bool ram_has_postcopy(void *opaque)
4503 {
4504     RAMBlock *rb;
4505     RAMBLOCK_FOREACH_NOT_IGNORED(rb) {
4506         if (ramblock_is_pmem(rb)) {
4507             info_report("Block: %s, host: %p is a nvdimm memory, postcopy"
4508                          "is not supported now!", rb->idstr, rb->host);
4509             return false;
4510         }
4511     }
4512
4513     return migrate_postcopy_ram();
4514 }
4515
4516 /* Sync all the dirty bitmap with destination VM.  */
4517 static int ram_dirty_bitmap_sync_all(MigrationState *s, RAMState *rs)
4518 {
4519     RAMBlock *block;
4520     QEMUFile *file = s->to_dst_file;
4521     int ramblock_count = 0;
4522
4523     trace_ram_dirty_bitmap_sync_start();
4524
4525     RAMBLOCK_FOREACH_NOT_IGNORED(block) {
4526         qemu_savevm_send_recv_bitmap(file, block->idstr);
4527         trace_ram_dirty_bitmap_request(block->idstr);
4528         ramblock_count++;
4529     }
4530
4531     trace_ram_dirty_bitmap_sync_wait();
4532
4533     /* Wait until all the ramblocks' dirty bitmap synced */
4534     while (ramblock_count--) {
4535         qemu_sem_wait(&s->rp_state.rp_sem);
4536     }
4537
4538     trace_ram_dirty_bitmap_sync_complete();
4539
4540     return 0;
4541 }
4542
4543 static void ram_dirty_bitmap_reload_notify(MigrationState *s)
4544 {
4545     qemu_sem_post(&s->rp_state.rp_sem);
4546 }
4547
4548 /*
4549  * Read the received bitmap, revert it as the initial dirty bitmap.
4550  * This is only used when the postcopy migration is paused but wants
4551  * to resume from a middle point.
4552  */
4553 int ram_dirty_bitmap_reload(MigrationState *s, RAMBlock *block)
4554 {
4555     int ret = -EINVAL;
4556     /* from_dst_file is always valid because we're within rp_thread */
4557     QEMUFile *file = s->rp_state.from_dst_file;
4558     unsigned long *le_bitmap, nbits = block->used_length >> TARGET_PAGE_BITS;
4559     uint64_t local_size = DIV_ROUND_UP(nbits, 8);
4560     uint64_t size, end_mark;
4561
4562     trace_ram_dirty_bitmap_reload_begin(block->idstr);
4563
4564     if (s->state != MIGRATION_STATUS_POSTCOPY_RECOVER) {
4565         error_report("%s: incorrect state %s", __func__,
4566                      MigrationStatus_str(s->state));
4567         return -EINVAL;
4568     }
4569
4570     /*
4571      * Note: see comments in ramblock_recv_bitmap_send() on why we
4572      * need the endianness conversion, and the paddings.
4573      */
4574     local_size = ROUND_UP(local_size, 8);
4575
4576     /* Add paddings */
4577     le_bitmap = bitmap_new(nbits + BITS_PER_LONG);
4578
4579     size = qemu_get_be64(file);
4580
4581     /* The size of the bitmap should match with our ramblock */
4582     if (size != local_size) {
4583         error_report("%s: ramblock '%s' bitmap size mismatch "
4584                      "(0x%"PRIx64" != 0x%"PRIx64")", __func__,
4585                      block->idstr, size, local_size);
4586         ret = -EINVAL;
4587         goto out;
4588     }
4589
4590     size = qemu_get_buffer(file, (uint8_t *)le_bitmap, local_size);
4591     end_mark = qemu_get_be64(file);
4592
4593     ret = qemu_file_get_error(file);
4594     if (ret || size != local_size) {
4595         error_report("%s: read bitmap failed for ramblock '%s': %d"
4596                      " (size 0x%"PRIx64", got: 0x%"PRIx64")",
4597                      __func__, block->idstr, ret, local_size, size);
4598         ret = -EIO;
4599         goto out;
4600     }
4601
4602     if (end_mark != RAMBLOCK_RECV_BITMAP_ENDING) {
4603         error_report("%s: ramblock '%s' end mark incorrect: 0x%"PRIx64,
4604                      __func__, block->idstr, end_mark);
4605         ret = -EINVAL;
4606         goto out;
4607     }
4608
4609     /*
4610      * Endianness conversion. We are during postcopy (though paused).
4611      * The dirty bitmap won't change. We can directly modify it.
4612      */
4613     bitmap_from_le(block->bmap, le_bitmap, nbits);
4614
4615     /*
4616      * What we received is "received bitmap". Revert it as the initial
4617      * dirty bitmap for this ramblock.
4618      */
4619     bitmap_complement(block->bmap, block->bmap, nbits);
4620
4621     /* Clear dirty bits of discarded ranges that we don't want to migrate. */
4622     ramblock_dirty_bitmap_clear_discarded_pages(block);
4623
4624     /* We'll recalculate migration_dirty_pages in ram_state_resume_prepare(). */
4625     trace_ram_dirty_bitmap_reload_complete(block->idstr);
4626
4627     /*
4628      * We succeeded to sync bitmap for current ramblock. If this is
4629      * the last one to sync, we need to notify the main send thread.
4630      */
4631     ram_dirty_bitmap_reload_notify(s);
4632
4633     ret = 0;
4634 out:
4635     g_free(le_bitmap);
4636     return ret;
4637 }
4638
4639 static int ram_resume_prepare(MigrationState *s, void *opaque)
4640 {
4641     RAMState *rs = *(RAMState **)opaque;
4642     int ret;
4643
4644     ret = ram_dirty_bitmap_sync_all(s, rs);
4645     if (ret) {
4646         return ret;
4647     }
4648
4649     ram_state_resume_prepare(rs, s->to_dst_file);
4650
4651     return 0;
4652 }
4653
4654 void postcopy_preempt_shutdown_file(MigrationState *s)
4655 {
4656     qemu_put_be64(s->postcopy_qemufile_src, RAM_SAVE_FLAG_EOS);
4657     qemu_fflush(s->postcopy_qemufile_src);
4658 }
4659
4660 static SaveVMHandlers savevm_ram_handlers = {
4661     .save_setup = ram_save_setup,
4662     .save_live_iterate = ram_save_iterate,
4663     .save_live_complete_postcopy = ram_save_complete,
4664     .save_live_complete_precopy = ram_save_complete,
4665     .has_postcopy = ram_has_postcopy,
4666     .state_pending_exact = ram_state_pending_exact,
4667     .state_pending_estimate = ram_state_pending_estimate,
4668     .load_state = ram_load,
4669     .save_cleanup = ram_save_cleanup,
4670     .load_setup = ram_load_setup,
4671     .load_cleanup = ram_load_cleanup,
4672     .resume_prepare = ram_resume_prepare,
4673 };
4674
4675 static void ram_mig_ram_block_resized(RAMBlockNotifier *n, void *host,
4676                                       size_t old_size, size_t new_size)
4677 {
4678     PostcopyState ps = postcopy_state_get();
4679     ram_addr_t offset;
4680     RAMBlock *rb = qemu_ram_block_from_host(host, false, &offset);
4681     Error *err = NULL;
4682
4683     if (ramblock_is_ignored(rb)) {
4684         return;
4685     }
4686
4687     if (!migration_is_idle()) {
4688         /*
4689          * Precopy code on the source cannot deal with the size of RAM blocks
4690          * changing at random points in time - especially after sending the
4691          * RAM block sizes in the migration stream, they must no longer change.
4692          * Abort and indicate a proper reason.
4693          */
4694         error_setg(&err, "RAM block '%s' resized during precopy.", rb->idstr);
4695         migration_cancel(err);
4696         error_free(err);
4697     }
4698
4699     switch (ps) {
4700     case POSTCOPY_INCOMING_ADVISE:
4701         /*
4702          * Update what ram_postcopy_incoming_init()->init_range() does at the
4703          * time postcopy was advised. Syncing RAM blocks with the source will
4704          * result in RAM resizes.
4705          */
4706         if (old_size < new_size) {
4707             if (ram_discard_range(rb->idstr, old_size, new_size - old_size)) {
4708                 error_report("RAM block '%s' discard of resized RAM failed",
4709                              rb->idstr);
4710             }
4711         }
4712         rb->postcopy_length = new_size;
4713         break;
4714     case POSTCOPY_INCOMING_NONE:
4715     case POSTCOPY_INCOMING_RUNNING:
4716     case POSTCOPY_INCOMING_END:
4717         /*
4718          * Once our guest is running, postcopy does no longer care about
4719          * resizes. When growing, the new memory was not available on the
4720          * source, no handler needed.
4721          */
4722         break;
4723     default:
4724         error_report("RAM block '%s' resized during postcopy state: %d",
4725                      rb->idstr, ps);
4726         exit(-1);
4727     }
4728 }
4729
4730 static RAMBlockNotifier ram_mig_ram_notifier = {
4731     .ram_block_resized = ram_mig_ram_block_resized,
4732 };
4733
4734 void ram_mig_init(void)
4735 {
4736     qemu_mutex_init(&XBZRLE.lock);
4737     register_savevm_live("ram", 0, 4, &savevm_ram_handlers, &ram_state);
4738     ram_block_notifier_add(&ram_mig_ram_notifier);
4739 }