1 /* 2 * Declarations for cpu physical memory functions 3 * 4 * Copyright 2011 Red Hat, Inc. and/or its affiliates 5 * 6 * Authors: 7 * Avi Kivity <avi@redhat.com> 8 * 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. 11 * 12 */ 13 14 /* 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. 17 */ 18 19 #ifndef QEMU_EXEC_RAMBLOCK_H 20 #define QEMU_EXEC_RAMBLOCK_H 21 22 #ifndef CONFIG_USER_ONLY 23 #include "cpu-common.h" 24 #include "qemu/rcu.h" 25 #include "exec/ramlist.h" 26 27 struct RAMBlock { 28 struct rcu_head rcu; 29 struct MemoryRegion *mr; 30 uint8_t *host; 31 uint8_t *colo_cache; /* For colo, VM's ram cache */ 32 ram_addr_t offset; 33 ram_addr_t used_length; 34 ram_addr_t max_length; 35 void (*resized)(const char*, uint64_t length, void *host); 36 uint32_t flags; 37 /* Protected by the BQL. */ 38 char idstr[256]; 39 /* RCU-enabled, writes protected by the ramlist lock */ 40 QLIST_ENTRY(RAMBlock) next; 41 QLIST_HEAD(, RAMBlockNotifier) ramblock_notifiers; 42 Error *cpr_blocker; 43 int fd; 44 uint64_t fd_offset; 45 int guest_memfd; 46 size_t page_size; 47 /* dirty bitmap used during migration */ 48 unsigned long *bmap; 49 50 /* 51 * Below fields are only used by mapped-ram migration 52 */ 53 /* bitmap of pages present in the migration file */ 54 unsigned long *file_bmap; 55 /* 56 * offset in the file pages belonging to this ramblock are saved, 57 * used only during migration to a file. 58 */ 59 off_t bitmap_offset; 60 uint64_t pages_offset; 61 62 /* Bitmap of already received pages. Only used on destination side. */ 63 unsigned long *receivedmap; 64 65 /* 66 * bitmap to track already cleared dirty bitmap. When the bit is 67 * set, it means the corresponding memory chunk needs a log-clear. 68 * Set this up to non-NULL to enable the capability to postpone 69 * and split clearing of dirty bitmap on the remote node (e.g., 70 * KVM). The bitmap will be set only when doing global sync. 71 * 72 * It is only used during src side of ram migration, and it is 73 * protected by the global ram_state.bitmap_mutex. 74 * 75 * NOTE: this bitmap is different comparing to the other bitmaps 76 * in that one bit can represent multiple guest pages (which is 77 * decided by the `clear_bmap_shift' variable below). On 78 * destination side, this should always be NULL, and the variable 79 * `clear_bmap_shift' is meaningless. 80 */ 81 unsigned long *clear_bmap; 82 uint8_t clear_bmap_shift; 83 84 /* 85 * RAM block length that corresponds to the used_length on the migration 86 * source (after RAM block sizes were synchronized). Especially, after 87 * starting to run the guest, used_length and postcopy_length can differ. 88 * Used to register/unregister uffd handlers and as the size of the received 89 * bitmap. Receiving any page beyond this length will bail out, as it 90 * could not have been valid on the source. 91 */ 92 ram_addr_t postcopy_length; 93 }; 94 #endif 95 #endif 96