diff options
| author | Richard Henderson <richard.henderson@linaro.org> | 2025-03-12 19:03:02 -0700 |
|---|---|---|
| committer | Richard Henderson <richard.henderson@linaro.org> | 2025-04-23 14:08:26 -0700 |
| commit | 548a01650c9be153b352406cd4afb86cb350788e (patch) | |
| tree | 47c5377decab6e07de6de851f4b436e3ccd8730d /include/system/ramblock.h | |
| parent | 4705a71db5909ac5586e87397b2dece132b9e330 (diff) | |
| download | focaccia-qemu-548a01650c9be153b352406cd4afb86cb350788e.tar.gz focaccia-qemu-548a01650c9be153b352406cd4afb86cb350788e.zip | |
include/system: Move exec/ramblock.h to system/ramblock.h
Convert the existing includes with sed. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'include/system/ramblock.h')
| -rw-r--r-- | include/system/ramblock.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/include/system/ramblock.h b/include/system/ramblock.h new file mode 100644 index 0000000000..d8a116ba99 --- /dev/null +++ b/include/system/ramblock.h @@ -0,0 +1,94 @@ +/* + * Declarations for cpu physical memory functions + * + * Copyright 2011 Red Hat, Inc. and/or its affiliates + * + * Authors: + * Avi Kivity <avi@redhat.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * later. See the COPYING file in the top-level directory. + * + */ + +/* + * This header is for use by exec.c and memory.c ONLY. Do not include it. + * The functions declared here will be removed soon. + */ + +#ifndef SYSTEM_RAMBLOCK_H +#define SYSTEM_RAMBLOCK_H + +#include "exec/cpu-common.h" +#include "qemu/rcu.h" +#include "exec/ramlist.h" + +struct RAMBlock { + struct rcu_head rcu; + struct MemoryRegion *mr; + uint8_t *host; + uint8_t *colo_cache; /* For colo, VM's ram cache */ + ram_addr_t offset; + ram_addr_t used_length; + ram_addr_t max_length; + void (*resized)(const char*, uint64_t length, void *host); + uint32_t flags; + /* Protected by the BQL. */ + char idstr[256]; + /* RCU-enabled, writes protected by the ramlist lock */ + QLIST_ENTRY(RAMBlock) next; + QLIST_HEAD(, RAMBlockNotifier) ramblock_notifiers; + Error *cpr_blocker; + int fd; + uint64_t fd_offset; + int guest_memfd; + size_t page_size; + /* dirty bitmap used during migration */ + unsigned long *bmap; + + /* + * Below fields are only used by mapped-ram migration + */ + /* bitmap of pages present in the migration file */ + unsigned long *file_bmap; + /* + * offset in the file pages belonging to this ramblock are saved, + * used only during migration to a file. + */ + off_t bitmap_offset; + uint64_t pages_offset; + + /* Bitmap of already received pages. Only used on destination side. */ + unsigned long *receivedmap; + + /* + * bitmap to track already cleared dirty bitmap. When the bit is + * set, it means the corresponding memory chunk needs a log-clear. + * Set this up to non-NULL to enable the capability to postpone + * and split clearing of dirty bitmap on the remote node (e.g., + * KVM). The bitmap will be set only when doing global sync. + * + * It is only used during src side of ram migration, and it is + * protected by the global ram_state.bitmap_mutex. + * + * NOTE: this bitmap is different comparing to the other bitmaps + * in that one bit can represent multiple guest pages (which is + * decided by the `clear_bmap_shift' variable below). On + * destination side, this should always be NULL, and the variable + * `clear_bmap_shift' is meaningless. + */ + unsigned long *clear_bmap; + uint8_t clear_bmap_shift; + + /* + * RAM block length that corresponds to the used_length on the migration + * source (after RAM block sizes were synchronized). Especially, after + * starting to run the guest, used_length and postcopy_length can differ. + * Used to register/unregister uffd handlers and as the size of the received + * bitmap. Receiving any page beyond this length will bail out, as it + * could not have been valid on the source. + */ + ram_addr_t postcopy_length; +}; + +#endif |