qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

ramblock.h (2662B)


      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 iothread lock.  */
     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     int fd;
     43     size_t page_size;
     44     /* dirty bitmap used during migration */
     45     unsigned long *bmap;
     46     /* bitmap of already received pages in postcopy */
     47     unsigned long *receivedmap;
     48 
     49     /*
     50      * bitmap to track already cleared dirty bitmap.  When the bit is
     51      * set, it means the corresponding memory chunk needs a log-clear.
     52      * Set this up to non-NULL to enable the capability to postpone
     53      * and split clearing of dirty bitmap on the remote node (e.g.,
     54      * KVM).  The bitmap will be set only when doing global sync.
     55      *
     56      * It is only used during src side of ram migration, and it is
     57      * protected by the global ram_state.bitmap_mutex.
     58      *
     59      * NOTE: this bitmap is different comparing to the other bitmaps
     60      * in that one bit can represent multiple guest pages (which is
     61      * decided by the `clear_bmap_shift' variable below).  On
     62      * destination side, this should always be NULL, and the variable
     63      * `clear_bmap_shift' is meaningless.
     64      */
     65     unsigned long *clear_bmap;
     66     uint8_t clear_bmap_shift;
     67 
     68     /*
     69      * RAM block length that corresponds to the used_length on the migration
     70      * source (after RAM block sizes were synchronized). Especially, after
     71      * starting to run the guest, used_length and postcopy_length can differ.
     72      * Used to register/unregister uffd handlers and as the size of the received
     73      * bitmap. Receiving any page beyond this length will bail out, as it
     74      * could not have been valid on the source.
     75      */
     76     ram_addr_t postcopy_length;
     77 };
     78 #endif
     79 #endif