2 * Declarations for cpu physical memory functions
4 * Copyright 2011 Red Hat, Inc. and/or its affiliates
7 * Avi Kivity <avi@redhat.com>
9 * This work is licensed under the terms of the GNU GPL, version 2 or
10 * later. See the COPYING file in the top-level directory.
15 * This header is for use by exec.c and memory.c ONLY. Do not include it.
16 * The functions declared here will be removed soon.
19 #ifndef QEMU_EXEC_RAMBLOCK_H
20 #define QEMU_EXEC_RAMBLOCK_H
22 #ifndef CONFIG_USER_ONLY
23 #include "cpu-common.h"
27 struct MemoryRegion
*mr
;
29 uint8_t *colo_cache
; /* For colo, VM's ram cache */
31 ram_addr_t used_length
;
32 ram_addr_t max_length
;
33 void (*resized
)(const char*, uint64_t length
, void *host
);
35 /* Protected by iothread lock. */
37 /* RCU-enabled, writes protected by the ramlist lock */
38 QLIST_ENTRY(RAMBlock
) next
;
39 QLIST_HEAD(, RAMBlockNotifier
) ramblock_notifiers
;
42 /* dirty bitmap used during migration */
44 /* bitmap of already received pages in postcopy */
45 unsigned long *receivedmap
;
48 * bitmap to track already cleared dirty bitmap. When the bit is
49 * set, it means the corresponding memory chunk needs a log-clear.
50 * Set this up to non-NULL to enable the capability to postpone
51 * and split clearing of dirty bitmap on the remote node (e.g.,
52 * KVM). The bitmap will be set only when doing global sync.
54 * NOTE: this bitmap is different comparing to the other bitmaps
55 * in that one bit can represent multiple guest pages (which is
56 * decided by the `clear_bmap_shift' variable below). On
57 * destination side, this should always be NULL, and the variable
58 * `clear_bmap_shift' is meaningless.
60 unsigned long *clear_bmap
;
61 uint8_t clear_bmap_shift
;
64 * RAM block length that corresponds to the used_length on the migration
65 * source (after RAM block sizes were synchronized). Especially, after
66 * starting to run the guest, used_length and postcopy_length can differ.
67 * Used to register/unregister uffd handlers and as the size of the received
68 * bitmap. Receiving any page beyond this length will bail out, as it
69 * could not have been valid on the source.
71 ram_addr_t postcopy_length
;