qemu/include/exec/ramblock.h
<<
>>
Prefs
   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
  27struct 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
  80