Signed-off-by: Paolo Bonzini <[email protected]> --- MAINTAINERS | 2 +- include/exec/cpu-common.h | 76 +---------- include/hw/core/qdev-properties-system.h | 1 + include/hw/i2c/smbus_eeprom.h | 2 +- include/hw/xen/xen-hvm-common.h | 1 + include/system/balloon.h | 2 +- include/system/block-ram-registrar.h | 2 +- include/system/iommufd.h | 2 +- include/system/memory.h | 16 ++- include/system/memory_mapping.h | 4 +- include/system/physmem.h | 2 +- include/system/ram_addr.h | 136 +++---------------- include/system/ramblock.h | 160 ++++++++++++++++++++++- include/{exec => system}/ramlist.h | 10 +- include/system/xen-mapcache.h | 1 - include/system/xen.h | 3 +- migration/migration.h | 3 +- accel/mshv/mshv-all.c | 1 + accel/tcg/cputlb.c | 2 +- accel/tcg/tcg-accel-ops-mttcg.c | 1 + backends/hostmem.c | 1 + block/blkio.c | 2 +- dump/dump.c | 1 + hw/acpi/ghes.c | 1 + hw/acpi/nvdimm.c | 1 + hw/acpi/vmgenid.c | 1 + hw/arm/omap1.c | 1 + hw/audio/marvell_88w8618.c | 1 + hw/char/riscv_htif.c | 1 + hw/core/cpu-common.c | 1 + hw/core/machine-qmp-cmds.c | 1 + hw/core/numa.c | 3 +- hw/display/exynos4210_fimd.c | 1 + hw/display/omap_lcdc.c | 1 + hw/display/ramfb.c | 1 + hw/display/vga.c | 1 + hw/dma/i8257.c | 1 + hw/dma/omap_dma.c | 1 + hw/dma/rc4030.c | 1 + hw/dma/sifive_pdma.c | 1 + hw/hyperv/hyperv.c | 1 + hw/hyperv/syndbg.c | 1 + hw/hyperv/vmbus.c | 1 + hw/i386/kvm/clock.c | 1 + hw/i386/vapic.c | 1 + hw/intc/apic.c | 1 + hw/intc/xive2.c | 1 + hw/m68k/next-cube.c | 1 + hw/microblaze/boot.c | 1 + hw/misc/pc-testdev.c | 1 + hw/net/fsl_etsec/rings.c | 1 + hw/net/mcf_fec.c | 1 + hw/net/opencores_eth.c | 1 + hw/net/xgmac.c | 1 + hw/nvram/spapr_nvram.c | 1 + hw/ppc/amigaone.c | 1 + hw/ppc/e500.c | 1 + hw/ppc/pegasos.c | 1 + hw/ppc/pnv.c | 1 + hw/ppc/ppc440_uc.c | 1 + hw/ppc/spapr.c | 1 + hw/ppc/spapr_drc.c | 1 + hw/ppc/spapr_events.c | 1 + hw/ppc/spapr_hcall.c | 1 + hw/ppc/spapr_rtas.c | 1 + hw/ppc/spapr_tpm_proxy.c | 1 + hw/ppc/virtex_ml507.c | 1 + hw/remote/proxy-memory-listener.c | 1 + hw/s390x/css.c | 1 + hw/s390x/ipl.c | 1 + hw/s390x/s390-pci-bus.c | 1 + hw/s390x/virtio-ccw.c | 1 + hw/scsi/vmw_pvscsi.c | 1 + hw/sparc/leon3.c | 1 + hw/vfio-user/container.c | 1 + hw/vfio/container.c | 2 +- hw/vfio/helpers.c | 1 + hw/vfio/migration.c | 2 +- hw/virtio/vhost.c | 1 + hw/xen/xen-mapcache.c | 1 + hw/xen/xen_pt_graphics.c | 1 + hw/xtensa/xtfpga.c | 1 + migration/ram.c | 2 +- stubs/physmem.c | 2 +- stubs/ram-block.c | 4 +- system/ioport.c | 1 + system/memory.c | 2 +- system/physmem.c | 2 +- target/arm/kvm.c | 1 + target/i386/kvm/kvm.c | 1 + target/i386/sev.c | 1 + target/ppc/kvm.c | 2 +- target/s390x/kvm/kvm.c | 2 +- util/vfio-helpers.c | 2 +- 94 files changed, 290 insertions(+), 226 deletions(-) rename include/{exec => system}/ramlist.h (94%)
diff --git a/MAINTAINERS b/MAINTAINERS index 0a70bc03889..dab02da37a7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3254,9 +3254,9 @@ R: Philippe Mathieu-Daudé <[email protected]> S: Supported F: include/system/ioport.h F: include/exec/memop.h +F: include/exec/ram_addr.h F: include/system/memory.h F: include/system/physmem.h -F: include/system/ram_addr.h F: include/system/ramblock.h F: include/system/memory_mapping.h F: system/dma-helpers.c diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h index e0be4ee2b8f..fba4d782e91 100644 --- a/include/exec/cpu-common.h +++ b/include/exec/cpu-common.h @@ -10,6 +10,8 @@ #include "exec/vaddr.h" #include "exec/hwaddr.h" +#include "exec/hwaddr.h" +#include "system/ram_addr.h" #include "hw/core/cpu.h" #include "tcg/debug-assert.h" #include "exec/page-protection.h" @@ -38,69 +40,6 @@ int cpu_get_free_index(void); void tcg_iommu_init_notifier_list(CPUState *cpu); void tcg_iommu_free_notifier_list(CPUState *cpu); -enum device_endian { - DEVICE_NATIVE_ENDIAN, - DEVICE_BIG_ENDIAN, - DEVICE_LITTLE_ENDIAN, -}; - -/* address in the RAM (different from a physical address) */ -#if defined(CONFIG_XEN_BACKEND) -typedef uint64_t ram_addr_t; -# define RAM_ADDR_MAX UINT64_MAX -# define RAM_ADDR_FMT "%" PRIx64 -#else -typedef uintptr_t ram_addr_t; -# define RAM_ADDR_MAX UINTPTR_MAX -# define RAM_ADDR_FMT "%" PRIxPTR -#endif - -/* memory API */ - -void qemu_ram_remap(ram_addr_t addr); -/* This should not be used by devices. */ -ram_addr_t qemu_ram_addr_from_host(void *ptr); -ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr); -RAMBlock *qemu_ram_block_by_name(const char *name); - -/* - * Translates a host ptr back to a RAMBlock and an offset in that RAMBlock. - * - * @ptr: The host pointer to translate. - * @round_offset: Whether to round the result offset down to a target page - * @offset: Will be set to the offset within the returned RAMBlock. - * - * Returns: RAMBlock (or NULL if not found) - * - * By the time this function returns, the returned pointer is not protected - * by RCU anymore. If the caller is not within an RCU critical section and - * does not hold the BQL, it must have other means of protecting the - * pointer, such as a reference to the memory region that owns the RAMBlock. - */ -RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, - ram_addr_t *offset); -ram_addr_t qemu_ram_block_host_offset(RAMBlock *rb, void *host); -void qemu_ram_set_idstr(RAMBlock *block, const char *name, DeviceState *dev); -void qemu_ram_unset_idstr(RAMBlock *block); -const char *qemu_ram_get_idstr(RAMBlock *rb); -void *qemu_ram_get_host_addr(RAMBlock *rb); -ram_addr_t qemu_ram_get_offset(RAMBlock *rb); -ram_addr_t qemu_ram_get_fd_offset(RAMBlock *rb); -ram_addr_t qemu_ram_get_used_length(RAMBlock *rb); -ram_addr_t qemu_ram_get_max_length(RAMBlock *rb); -bool qemu_ram_is_shared(RAMBlock *rb); -bool qemu_ram_is_noreserve(RAMBlock *rb); -bool qemu_ram_is_uf_zeroable(RAMBlock *rb); -void qemu_ram_set_uf_zeroable(RAMBlock *rb); -bool qemu_ram_is_migratable(RAMBlock *rb); -void qemu_ram_set_migratable(RAMBlock *rb); -void qemu_ram_unset_migratable(RAMBlock *rb); -bool qemu_ram_is_named_file(RAMBlock *rb); -int qemu_ram_get_fd(RAMBlock *rb); - -size_t qemu_ram_pagesize(RAMBlock *block); -size_t qemu_ram_pagesize_largest(void); - /** * cpu_address_space_init: * @cpu: CPU to add this address space to @@ -139,17 +78,6 @@ void *cpu_physical_memory_map(hwaddr addr, void cpu_physical_memory_unmap(void *buffer, hwaddr len, bool is_write, hwaddr access_len); -/* Coalesced MMIO regions are areas where write operations can be reordered. - * This usually implies that write operations are side-effect free. This allows - * batching which can make a major impact on performance when using - * virtualization. - */ -void qemu_flush_coalesced_mmio_buffer(void); - -typedef int (RAMBlockIterFunc)(RAMBlock *rb, void *opaque); - -int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); - /* vl.c */ void list_cpus(void); diff --git a/include/hw/core/qdev-properties-system.h b/include/hw/core/qdev-properties-system.h index ec39ef3bd6e..ec21732ce52 100644 --- a/include/hw/core/qdev-properties-system.h +++ b/include/hw/core/qdev-properties-system.h @@ -2,6 +2,7 @@ #define HW_QDEV_PROPERTIES_SYSTEM_H #include "hw/core/qdev-properties.h" +#include "qapi/qapi-types-common.h" bool qdev_prop_sanitize_s390x_loadparm(uint8_t *loadparm, const char *str, Error **errp); diff --git a/include/hw/i2c/smbus_eeprom.h b/include/hw/i2c/smbus_eeprom.h index 68b0063ab6f..61a54cda761 100644 --- a/include/hw/i2c/smbus_eeprom.h +++ b/include/hw/i2c/smbus_eeprom.h @@ -23,7 +23,7 @@ #ifndef HW_SMBUS_EEPROM_H #define HW_SMBUS_EEPROM_H -#include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "hw/i2c/i2c.h" void smbus_eeprom_init_one(I2CBus *bus, uint8_t address, uint8_t *eeprom_buf); diff --git a/include/hw/xen/xen-hvm-common.h b/include/hw/xen/xen-hvm-common.h index 19df5600a39..e1beca062ff 100644 --- a/include/hw/xen/xen-hvm-common.h +++ b/include/hw/xen/xen-hvm-common.h @@ -5,6 +5,7 @@ #include "exec/hwaddr.h" #include "hw/xen/xen_native.h" #include "hw/xen/xen_backend_ops.h" +#include "system/runstate.h" #include <xen/hvm/ioreq.h> extern MemoryRegion xen_memory; diff --git a/include/system/balloon.h b/include/system/balloon.h index 867687b73ac..066c7e1ddf4 100644 --- a/include/system/balloon.h +++ b/include/system/balloon.h @@ -14,7 +14,7 @@ #ifndef QEMU_BALLOON_H #define QEMU_BALLOON_H -#include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "qapi/qapi-types-machine.h" typedef void (QEMUBalloonEvent)(void *opaque, ram_addr_t target); diff --git a/include/system/block-ram-registrar.h b/include/system/block-ram-registrar.h index d8b2f7942ba..61b0dff3400 100644 --- a/include/system/block-ram-registrar.h +++ b/include/system/block-ram-registrar.h @@ -7,7 +7,7 @@ #ifndef BLOCK_RAM_REGISTRAR_H #define BLOCK_RAM_REGISTRAR_H -#include "exec/ramlist.h" +#include "system/ramlist.h" /** * struct BlockRAMRegistrar: diff --git a/include/system/iommufd.h b/include/system/iommufd.h index a659f36a20f..9f5eb872454 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -16,7 +16,7 @@ #include "qom/object.h" #include "exec/hwaddr.h" -#include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "system/host_iommu_device.h" #define TYPE_IOMMUFD_BACKEND "iommufd" diff --git a/include/system/memory.h b/include/system/memory.h index 1cacc117cc6..b3597fb2d04 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -14,11 +14,10 @@ #ifndef SYSTEM_MEMORY_H #define SYSTEM_MEMORY_H -#include "exec/cpu-common.h" #include "exec/hwaddr.h" +#include "system/ram_addr.h" #include "exec/memattrs.h" #include "exec/memop.h" -#include "exec/ramlist.h" #include "qemu/bswap.h" #include "qemu/queue.h" #include "qemu/int128.h" @@ -27,6 +26,12 @@ #include "qom/object.h" #include "qemu/rcu.h" +enum device_endian { + DEVICE_NATIVE_ENDIAN, + DEVICE_BIG_ENDIAN, + DEVICE_LITTLE_ENDIAN, +}; + #define RAM_ADDR_INVALID (~(ram_addr_t)0) #define MAX_PHYS_ADDR_SPACE_BITS 62 @@ -3266,6 +3271,13 @@ address_space_write_cached(MemoryRegionCache *cache, hwaddr addr, MemTxResult address_space_set(AddressSpace *as, hwaddr addr, uint8_t c, hwaddr len, MemTxAttrs attrs); +/* Coalesced MMIO regions are areas where write operations can be reordered. + * This usually implies that write operations are side-effect free. This allows + * batching which can make a major impact on performance when using + * virtualization. + */ +void qemu_flush_coalesced_mmio_buffer(void); + /* * Inhibit technologies that require discarding of pages in RAM blocks, e.g., * to manage the actual amount of memory consumed by the VM (then, the memory diff --git a/include/system/memory_mapping.h b/include/system/memory_mapping.h index 021e0a62309..4c770bf0b83 100644 --- a/include/system/memory_mapping.h +++ b/include/system/memory_mapping.h @@ -15,7 +15,9 @@ #define MEMORY_MAPPING_H #include "qemu/queue.h" -#include "exec/cpu-common.h" +#include "exec/hwaddr.h" +#include "exec/vaddr.h" +#include "system/ram_addr.h" typedef struct GuestPhysBlock { /* visible to guest, reflects PCI hole, etc */ diff --git a/include/system/physmem.h b/include/system/physmem.h index 879f6eae38b..ed337130228 100644 --- a/include/system/physmem.h +++ b/include/system/physmem.h @@ -9,7 +9,7 @@ #define QEMU_SYSTEM_PHYSMEM_H #include "exec/hwaddr.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" #define DIRTY_CLIENTS_ALL ((1 << DIRTY_MEMORY_NUM) - 1) #define DIRTY_CLIENTS_NOCODE (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE)) diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h index 683485980ce..129f6b8757d 100644 --- a/include/system/ram_addr.h +++ b/include/system/ram_addr.h @@ -1,5 +1,5 @@ /* - * Declarations for cpu physical memory functions + * Declarations of basic RAMBlock-related types and macros * * Copyright 2011 Red Hat, Inc. and/or its affiliates * @@ -11,125 +11,23 @@ * */ -/* - * 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 RAM_ADDR_H +#define RAM_ADDR_H -#ifndef SYSTEM_RAM_ADDR_H -#define SYSTEM_RAM_ADDR_H +/* address in the RAM (different from a physical address) */ +#if defined(CONFIG_XEN_BACKEND) +typedef uint64_t ram_addr_t; +# define RAM_ADDR_MAX UINT64_MAX +# define RAM_ADDR_FMT "%" PRIx64 +#else +typedef uintptr_t ram_addr_t; +# define RAM_ADDR_MAX UINTPTR_MAX +# define RAM_ADDR_FMT "%" PRIxPTR +#endif -#include "system/ramblock.h" -#include "exec/target_page.h" -#include "exec/hwaddr.h" - -extern uint64_t total_dirty_pages; - -/** - * clear_bmap_size: calculate clear bitmap size - * - * @pages: number of guest pages - * @shift: guest page number shift - * - * Returns: number of bits for the clear bitmap - */ -static inline long clear_bmap_size(uint64_t pages, uint8_t shift) -{ - return DIV_ROUND_UP(pages, 1UL << shift); -} - -/** - * clear_bmap_set: set clear bitmap for the page range. Must be with - * bitmap_mutex held. - * - * @rb: the ramblock to operate on - * @start: the start page number - * @size: number of pages to set in the bitmap - * - * Returns: None - */ -static inline void clear_bmap_set(RAMBlock *rb, uint64_t start, - uint64_t npages) -{ - uint8_t shift = rb->clear_bmap_shift; - - bitmap_set(rb->clear_bmap, start >> shift, clear_bmap_size(npages, shift)); -} - -/** - * clear_bmap_test_and_clear: test clear bitmap for the page, clear if set. - * Must be with bitmap_mutex held. - * - * @rb: the ramblock to operate on - * @page: the page number to check - * - * Returns: true if the bit was set, false otherwise - */ -static inline bool clear_bmap_test_and_clear(RAMBlock *rb, uint64_t page) -{ - uint8_t shift = rb->clear_bmap_shift; - - return bitmap_test_and_clear(rb->clear_bmap, page >> shift, 1); -} - -static inline unsigned long int ramblock_recv_bitmap_offset(void *host_addr, - RAMBlock *rb) -{ - uint64_t host_addr_offset = - (uint64_t)(uintptr_t)(host_addr - (void *)rb->host); - return host_addr_offset >> TARGET_PAGE_BITS; -} - -/** - * qemu_ram_alloc_from_file, - * qemu_ram_alloc_from_fd: Allocate a ram block from the specified backing - * file or device - * - * Parameters: - * @size: the size in bytes of the ram block - * @max_size: the maximum size of the block after resizing - * @mr: the memory region where the ram block is - * @resized: callback after calls to qemu_ram_resize - * @ram_flags: RamBlock flags. Supported flags: RAM_SHARED, RAM_PMEM, - * RAM_NORESERVE, RAM_PROTECTED, RAM_NAMED_FILE, RAM_READONLY, - * RAM_READONLY_FD, RAM_GUEST_MEMFD - * @mem_path or @fd: specify the backing file or device - * @offset: Offset into target file - * @grow: extend file if necessary (but an empty file is always extended). - * @errp: pointer to Error*, to store an error if it happens - * - * Return: - * On success, return a pointer to the ram block. - * On failure, return NULL. - */ -typedef void (*qemu_ram_resize_cb)(const char *, uint64_t length, void *host); - -RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr, - uint32_t ram_flags, const char *mem_path, - off_t offset, Error **errp); -RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, ram_addr_t max_size, - qemu_ram_resize_cb resized, MemoryRegion *mr, - uint32_t ram_flags, int fd, off_t offset, - bool grow, - Error **errp); - -RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, - MemoryRegion *mr, Error **errp); -RAMBlock *qemu_ram_alloc(ram_addr_t size, uint32_t ram_flags, MemoryRegion *mr, - Error **errp); -RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size, - qemu_ram_resize_cb resized, - MemoryRegion *mr, Error **errp); -void qemu_ram_free(RAMBlock *block); - -int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp); - -void qemu_ram_msync(RAMBlock *block, ram_addr_t start, ram_addr_t length); - -/* Clear whole block of mem */ -static inline void qemu_ram_block_writeback(RAMBlock *block) -{ - qemu_ram_msync(block, 0, block->used_length); -} +#define DIRTY_MEMORY_VGA 0 +#define DIRTY_MEMORY_CODE 1 +#define DIRTY_MEMORY_MIGRATION 2 +#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ #endif diff --git a/include/system/ramblock.h b/include/system/ramblock.h index 76694fe1b5b..e9f58ac0457 100644 --- a/include/system/ramblock.h +++ b/include/system/ramblock.h @@ -14,9 +14,9 @@ #ifndef SYSTEM_RAMBLOCK_H #define SYSTEM_RAMBLOCK_H -#include "exec/cpu-common.h" #include "qemu/rcu.h" -#include "exec/ramlist.h" +#include "system/ram_addr.h" +#include "system/ramlist.h" #include "system/hostmem.h" #define TYPE_RAM_BLOCK_ATTRIBUTES "ram-block-attributes" @@ -130,4 +130,160 @@ static inline void *ramblock_ptr(RAMBlock *block, ram_addr_t offset) return (char *)block->host + offset; } +/* memory API */ + +void qemu_ram_remap(ram_addr_t addr); +/* This should not be used by devices. */ +ram_addr_t qemu_ram_addr_from_host(void *ptr); +ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr); +RAMBlock *qemu_ram_block_by_name(const char *name); + +/* + * Translates a host ptr back to a RAMBlock and an offset in that RAMBlock. + * + * @ptr: The host pointer to translate. + * @round_offset: Whether to round the result offset down to a target page + * @offset: Will be set to the offset within the returned RAMBlock. + * + * Returns: RAMBlock (or NULL if not found) + * + * By the time this function returns, the returned pointer is not protected + * by RCU anymore. If the caller is not within an RCU critical section and + * does not hold the BQL, it must have other means of protecting the + * pointer, such as a reference to the memory region that owns the RAMBlock. + */ +RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, + ram_addr_t *offset); +ram_addr_t qemu_ram_block_host_offset(RAMBlock *rb, void *host); +void qemu_ram_set_idstr(RAMBlock *block, const char *name, DeviceState *dev); +void qemu_ram_unset_idstr(RAMBlock *block); +const char *qemu_ram_get_idstr(RAMBlock *rb); +void *qemu_ram_get_host_addr(RAMBlock *rb); +ram_addr_t qemu_ram_get_offset(RAMBlock *rb); +ram_addr_t qemu_ram_get_fd_offset(RAMBlock *rb); +ram_addr_t qemu_ram_get_used_length(RAMBlock *rb); +ram_addr_t qemu_ram_get_max_length(RAMBlock *rb); +bool qemu_ram_is_shared(RAMBlock *rb); +bool qemu_ram_is_noreserve(RAMBlock *rb); +bool qemu_ram_is_uf_zeroable(RAMBlock *rb); +void qemu_ram_set_uf_zeroable(RAMBlock *rb); +bool qemu_ram_is_migratable(RAMBlock *rb); +void qemu_ram_set_migratable(RAMBlock *rb); +void qemu_ram_unset_migratable(RAMBlock *rb); +bool qemu_ram_is_named_file(RAMBlock *rb); +int qemu_ram_get_fd(RAMBlock *rb); + +size_t qemu_ram_pagesize(RAMBlock *block); +size_t qemu_ram_pagesize_largest(void); +#include "exec/target_page.h" +#include "exec/hwaddr.h" + +extern uint64_t total_dirty_pages; + +/** + * clear_bmap_size: calculate clear bitmap size + * + * @pages: number of guest pages + * @shift: guest page number shift + * + * Returns: number of bits for the clear bitmap + */ +static inline long clear_bmap_size(uint64_t pages, uint8_t shift) +{ + return DIV_ROUND_UP(pages, 1UL << shift); +} + +/** + * clear_bmap_set: set clear bitmap for the page range. Must be with + * bitmap_mutex held. + * + * @rb: the ramblock to operate on + * @start: the start page number + * @size: number of pages to set in the bitmap + * + * Returns: None + */ +static inline void clear_bmap_set(RAMBlock *rb, uint64_t start, + uint64_t npages) +{ + uint8_t shift = rb->clear_bmap_shift; + + bitmap_set(rb->clear_bmap, start >> shift, clear_bmap_size(npages, shift)); +} + +/** + * clear_bmap_test_and_clear: test clear bitmap for the page, clear if set. + * Must be with bitmap_mutex held. + * + * @rb: the ramblock to operate on + * @page: the page number to check + * + * Returns: true if the bit was set, false otherwise + */ +static inline bool clear_bmap_test_and_clear(RAMBlock *rb, uint64_t page) +{ + uint8_t shift = rb->clear_bmap_shift; + + return bitmap_test_and_clear(rb->clear_bmap, page >> shift, 1); +} + +static inline unsigned long int ramblock_recv_bitmap_offset(void *host_addr, + RAMBlock *rb) +{ + uint64_t host_addr_offset = + (uint64_t)(uintptr_t)(host_addr - (void *)rb->host); + return host_addr_offset >> TARGET_PAGE_BITS; +} + +/** + * qemu_ram_alloc_from_file, + * qemu_ram_alloc_from_fd: Allocate a ram block from the specified backing + * file or device + * + * Parameters: + * @size: the size in bytes of the ram block + * @max_size: the maximum size of the block after resizing + * @mr: the memory region where the ram block is + * @resized: callback after calls to qemu_ram_resize + * @ram_flags: RamBlock flags. Supported flags: RAM_SHARED, RAM_PMEM, + * RAM_NORESERVE, RAM_PROTECTED, RAM_NAMED_FILE, RAM_READONLY, + * RAM_READONLY_FD, RAM_GUEST_MEMFD + * @mem_path or @fd: specify the backing file or device + * @offset: Offset into target file + * @grow: extend file if necessary (but an empty file is always extended). + * @errp: pointer to Error*, to store an error if it happens + * + * Return: + * On success, return a pointer to the ram block. + * On failure, return NULL. + */ +typedef void (*qemu_ram_resize_cb)(const char *, uint64_t length, void *host); + +RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr, + uint32_t ram_flags, const char *mem_path, + off_t offset, Error **errp); +RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, ram_addr_t max_size, + qemu_ram_resize_cb resized, MemoryRegion *mr, + uint32_t ram_flags, int fd, off_t offset, + bool grow, + Error **errp); + +RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + MemoryRegion *mr, Error **errp); +RAMBlock *qemu_ram_alloc(ram_addr_t size, uint32_t ram_flags, MemoryRegion *mr, + Error **errp); +RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size, + qemu_ram_resize_cb resized, + MemoryRegion *mr, Error **errp); +void qemu_ram_free(RAMBlock *block); + +int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp); + +void qemu_ram_msync(RAMBlock *block, ram_addr_t start, ram_addr_t length); + +/* Clear whole block of mem */ +static inline void qemu_ram_block_writeback(RAMBlock *block) +{ + qemu_ram_msync(block, 0, block->used_length); +} #endif diff --git a/include/exec/ramlist.h b/include/system/ramlist.h similarity index 94% rename from include/exec/ramlist.h rename to include/system/ramlist.h index d9cfe530bea..c7f388f487d 100644 --- a/include/exec/ramlist.h +++ b/include/system/ramlist.h @@ -5,14 +5,10 @@ #include "qemu/thread.h" #include "qemu/rcu.h" #include "qemu/rcu_queue.h" +#include "system/ram_addr.h" typedef struct RAMBlockNotifier RAMBlockNotifier; -#define DIRTY_MEMORY_VGA 0 -#define DIRTY_MEMORY_CODE 1 -#define DIRTY_MEMORY_MIGRATION 2 -#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ - /* The dirty memory bitmap is split into fixed-size blocks to allow growth * under RCU. The bitmap for a block can be accessed as follows: * @@ -75,6 +71,10 @@ struct RAMBlockNotifier { QLIST_ENTRY(RAMBlockNotifier) next; }; +typedef int (RAMBlockIterFunc)(RAMBlock *rb, void *opaque); + +int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); + void ram_block_notifier_add(RAMBlockNotifier *n); void ram_block_notifier_remove(RAMBlockNotifier *n); void ram_block_notify_add(void *host, size_t size, size_t max_size); diff --git a/include/system/xen-mapcache.h b/include/system/xen-mapcache.h index bb454a7c96c..fa2cff38d1a 100644 --- a/include/system/xen-mapcache.h +++ b/include/system/xen-mapcache.h @@ -9,7 +9,6 @@ #ifndef XEN_MAPCACHE_H #define XEN_MAPCACHE_H -#include "exec/cpu-common.h" #include "system/xen.h" typedef hwaddr (*phys_offset_to_gaddr_t)(hwaddr phys_offset, diff --git a/include/system/xen.h b/include/system/xen.h index c2f283d1c26..9a7c53f2838 100644 --- a/include/system/xen.h +++ b/include/system/xen.h @@ -10,7 +10,8 @@ #ifndef SYSTEM_XEN_H #define SYSTEM_XEN_H -#include "exec/cpu-common.h" +#include "exec/hwaddr.h" +#include "system/ram_addr.h" #ifdef COMPILING_PER_TARGET # ifdef CONFIG_XEN diff --git a/migration/migration.h b/migration/migration.h index fbe02d5bb1a..43fbe5488ca 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -14,7 +14,8 @@ #ifndef QEMU_MIGRATION_H #define QEMU_MIGRATION_H -#include "exec/cpu-common.h" +#include "system/ram_addr.h" +#include "system/ramblock.h" #include "hw/core/qdev.h" #include "qapi/qapi-types-migration.h" #include "qobject/json-writer.h" diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c index 47c67ef8cc9..4675cb886fe 100644 --- a/accel/mshv/mshv-all.c +++ b/accel/mshv/mshv-all.c @@ -31,6 +31,7 @@ #include "qemu/guest-random.h" #include "accel/accel-ops.h" #include "accel/accel-cpu-ops.h" +#include "exec/cpu-common.h" #include "system/cpus.h" #include "system/runstate.h" #include "system/accel-blocker.h" diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index fd1606c8565..655d1e113f9 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -30,7 +30,7 @@ #include "accel/tcg/cpu-mmu-index.h" #include "exec/cputlb.h" #include "exec/tb-flush.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "exec/mmu-access-type.h" #include "exec/tlb-common.h" #include "exec/vaddr.h" diff --git a/accel/tcg/tcg-accel-ops-mttcg.c b/accel/tcg/tcg-accel-ops-mttcg.c index 89299829c3a..4160e2ba947 100644 --- a/accel/tcg/tcg-accel-ops-mttcg.c +++ b/accel/tcg/tcg-accel-ops-mttcg.c @@ -24,6 +24,7 @@ */ #include "qemu/osdep.h" +#include "exec/cpu-common.h" #include "system/tcg.h" #include "system/replay.h" #include "exec/icount.h" diff --git a/backends/hostmem.c b/backends/hostmem.c index 67827c42b87..15d4365b697 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "system/hostmem.h" +#include "system/ramblock.h" #include "hw/core/boards.h" #include "qapi/error.h" #include "qapi/qapi-builtin-visit.h" diff --git a/block/blkio.c b/block/blkio.c index 41426739847..20f138a38c5 100644 --- a/block/blkio.c +++ b/block/blkio.c @@ -12,7 +12,7 @@ #include <blkio.h> #include "block/block_int.h" #include "system/memory.h" -#include "exec/cpu-common.h" /* for qemu_ram_get_fd() */ +#include "system/ramblock.h" #include "qemu/defer-call.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/dump/dump.c b/dump/dump.c index 15bbcc0c619..f7a99a7af2e 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -15,6 +15,7 @@ #include "qemu/cutils.h" #include "elf.h" #include "qemu/bswap.h" +#include "exec/cpu-common.h" #include "exec/target_page.h" #include "monitor/monitor.h" #include "system/dump.h" diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 06555905ceb..365156dff90 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -27,6 +27,7 @@ #include "hw/acpi/generic_event_device.h" #include "hw/nvram/fw_cfg.h" #include "qemu/uuid.h" +#include "exec/cpu-common.h" #define ACPI_HW_ERROR_FW_CFG_FILE "etc/hardware_errors" #define ACPI_HW_ERROR_ADDR_FW_CFG_FILE "etc/hardware_errors_addr" diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c index 732d613ac09..eb4b4770765 100644 --- a/hw/acpi/nvdimm.c +++ b/hw/acpi/nvdimm.c @@ -36,6 +36,7 @@ #include "hw/mem/nvdimm.h" #include "qemu/nvdimm-utils.h" #include "trace.h" +#include "exec/cpu-common.h" /* * define Byte Addressable Persistent Memory (PM) Region according to diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c index e87c0256964..70ad029057b 100644 --- a/hw/acpi/vmgenid.c +++ b/hw/acpi/vmgenid.c @@ -21,6 +21,7 @@ #include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "system/reset.h" +#include "exec/cpu-common.h" void vmgenid_build_acpi(VmGenIdState *vms, GArray *table_data, GArray *guid, BIOSLinker *linker, const char *oem_id) diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index f5ff4b107ae..9ca8eecfa09 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -24,6 +24,7 @@ #include "qapi/error.h" #include "cpu.h" #include "system/address-spaces.h" +#include "exec/cpu-common.h" #include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c index 6d5e99123d6..4ad4a220a98 100644 --- a/hw/audio/marvell_88w8618.c +++ b/hw/audio/marvell_88w8618.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/char/riscv_htif.c b/hw/char/riscv_htif.c index a78ea9b01c0..e9efab16e99 100644 --- a/hw/char/riscv_htif.c +++ b/hw/char/riscv_htif.c @@ -31,6 +31,7 @@ #include "system/address-spaces.h" #include "system/dma.h" #include "system/runstate.h" +#include "exec/cpu-common.h" #include "trace.h" #define HTIF_DEV_SHIFT 56 diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c index 2e925880afa..6d54c12a778 100644 --- a/hw/core/cpu-common.c +++ b/hw/core/cpu-common.c @@ -19,6 +19,7 @@ */ #include "qemu/osdep.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include "hw/core/cpu.h" #include "system/hw_accel.h" diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index d23466177d8..79cbcdd63e8 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -26,6 +26,7 @@ #include "system/hostmem.h" #include "system/hw_accel.h" #include "system/numa.h" +#include "system/ramlist.h" #include "system/runstate.h" #include "system/system.h" #include "hw/s390x/storage-keys.h" diff --git a/hw/core/numa.c b/hw/core/numa.c index fa78dacb6be..f462883c87c 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -27,7 +27,8 @@ #include "system/hostmem.h" #include "system/numa.h" #include "exec/cpu-common.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" +#include "system/ramblock.h" #include "qemu/error-report.h" #include "qapi/error.h" #include "qapi/opts-visitor.h" diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index a97054132fb..2d8fa7ee944 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -27,6 +27,7 @@ #include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "ui/console.h" #include "ui/pixel_ops.h" diff --git a/hw/display/omap_lcdc.c b/hw/display/omap_lcdc.c index 90a97314541..c41c65bb2e0 100644 --- a/hw/display/omap_lcdc.c +++ b/hw/display/omap_lcdc.c @@ -23,6 +23,7 @@ #include "hw/arm/omap.h" #include "framebuffer.h" #include "ui/pixel_ops.h" +#include "exec/cpu-common.h" struct omap_lcd_panel_s { MemoryRegion *sysmem; diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index ad12fb1782e..50c25706a52 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -18,6 +18,7 @@ #include "hw/display/bochs-vbe.h" /* for limits */ #include "ui/console.h" #include "system/reset.h" +#include "exec/cpu-common.h" struct QEMU_PACKED RAMFBCfg { uint64_t addr; diff --git a/hw/display/vga.c b/hw/display/vga.c index 90b89cf4044..59a65cbbff5 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -25,6 +25,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "system/reset.h" +#include "system/ramblock.h" #include "qapi/error.h" #include "qemu/target-info.h" #include "hw/display/vga.h" diff --git a/hw/dma/i8257.c b/hw/dma/i8257.c index d909d6c8fc2..3637d8f82d7 100644 --- a/hw/dma/i8257.c +++ b/hw/dma/i8257.c @@ -27,6 +27,7 @@ #include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/dma/i8257.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include "qemu/main-loop.h" #include "qemu/module.h" diff --git a/hw/dma/omap_dma.c b/hw/dma/omap_dma.c index 2bf9ebad565..963ce6fd102 100644 --- a/hw/dma/omap_dma.c +++ b/hw/dma/omap_dma.c @@ -23,6 +23,7 @@ #include "hw/arm/omap.h" #include "hw/core/irq.h" #include "hw/arm/soc_dma.h" +#include "exec/cpu-common.h" struct omap_dma_channel_s { /* transfer data */ diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c index 93db286e690..159d0173913 100644 --- a/hw/dma/rc4030.c +++ b/hw/dma/rc4030.c @@ -27,6 +27,7 @@ #include "hw/core/irq.h" #include "hw/mips/mips.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/timer.h" diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index 2844515b2d7..6d06ec0375f 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -27,6 +27,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "system/dma.h" #include "hw/dma/sifive_pdma.h" diff --git a/hw/hyperv/hyperv.c b/hw/hyperv/hyperv.c index e4d0688dbfa..27e323a8196 100644 --- a/hw/hyperv/hyperv.c +++ b/hw/hyperv/hyperv.c @@ -14,6 +14,7 @@ #include "system/address-spaces.h" #include "system/memory.h" #include "exec/target_page.h" +#include "exec/cpu-common.h" #include "linux/kvm.h" #include "system/kvm.h" #include "qemu/bitops.h" diff --git a/hw/hyperv/syndbg.c b/hw/hyperv/syndbg.c index dc6cc84b503..1e177f9dd82 100644 --- a/hw/hyperv/syndbg.c +++ b/hw/hyperv/syndbg.c @@ -19,6 +19,7 @@ #include "hw/hyperv/hyperv.h" #include "hw/hyperv/vmbus-bridge.h" #include "hw/hyperv/hyperv-proto.h" +#include "exec/cpu-common.h" #include "net/net.h" #include "net/eth.h" #include "net/checksum.h" diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c index c01f3392360..c5bab5d2452 100644 --- a/hw/hyperv/vmbus.c +++ b/hw/hyperv/vmbus.c @@ -19,6 +19,7 @@ #include "hw/hyperv/vmbus.h" #include "hw/hyperv/vmbus-bridge.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "exec/target_page.h" #include "trace.h" diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c index 8ca88afae24..aba6842a22c 100644 --- a/hw/i386/kvm/clock.c +++ b/hw/i386/kvm/clock.c @@ -24,6 +24,7 @@ #include "hw/core/sysbus.h" #include "hw/i386/kvm/clock.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include <linux/kvm.h> diff --git a/hw/i386/vapic.c b/hw/i386/vapic.c index 32f92a28b88..670a50524d6 100644 --- a/hw/i386/vapic.c +++ b/hw/i386/vapic.c @@ -21,6 +21,7 @@ #include "hw/i386/apic_internal.h" #include "hw/core/sysbus.h" #include "hw/core/boards.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/intc/apic.c b/hw/intc/apic.c index aad253af158..dd8c77f8180 100644 --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -30,6 +30,7 @@ #include "system/mshv.h" #include "trace.h" #include "hw/i386/apic-msidef.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include "qom/object.h" diff --git a/hw/intc/xive2.c b/hw/intc/xive2.c index 495925196a8..d353391208e 100644 --- a/hw/intc/xive2.c +++ b/hw/intc/xive2.c @@ -17,6 +17,7 @@ #include "hw/ppc/xive.h" #include "hw/ppc/xive2.h" #include "hw/ppc/xive2_regs.h" +#include "exec/cpu-common.h" #include "trace.h" static void xive2_router_end_notify(Xive2Router *xrtr, uint8_t end_blk, diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index ca3df7b887b..26177c7b867 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "exec/hwaddr.h" +#include "exec/cpu-common.h" #include "exec/cpu-interrupt.h" #include "system/system.h" #include "system/qtest.h" diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c index 8ff99b3339d..a6f9ebab90c 100644 --- a/hw/microblaze/boot.c +++ b/hw/microblaze/boot.c @@ -33,6 +33,7 @@ #include "qemu/guest-random.h" #include "system/device_tree.h" #include "system/reset.h" +#include "exec/cpu-common.h" #include "hw/core/boards.h" #include "hw/core/loader.h" #include "elf.h" diff --git a/hw/misc/pc-testdev.c b/hw/misc/pc-testdev.c index 4093cb3c99c..228012e772f 100644 --- a/hw/misc/pc-testdev.c +++ b/hw/misc/pc-testdev.c @@ -39,6 +39,7 @@ #include "qemu/module.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" +#include "exec/cpu-common.h" #include "qom/object.h" #define IOMEM_LEN 0x10000 diff --git a/hw/net/fsl_etsec/rings.c b/hw/net/fsl_etsec/rings.c index 42216de6c9a..22660c32b84 100644 --- a/hw/net/fsl_etsec/rings.c +++ b/hw/net/fsl_etsec/rings.c @@ -26,6 +26,7 @@ #include "qemu/log.h" #include "etsec.h" #include "registers.h" +#include "exec/cpu-common.h" /* #define ETSEC_RING_DEBUG */ /* #define HEX_DUMP */ diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c index 5f267e5ea38..79a5c4385c6 100644 --- a/hw/net/mcf_fec.c +++ b/hw/net/mcf_fec.c @@ -16,6 +16,7 @@ #include "hw/net/mii.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include <zlib.h> /* for crc32 */ //#define DEBUG_FEC 1 diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c index ec3301414cc..6abeffcc9c7 100644 --- a/hw/net/opencores_eth.c +++ b/hw/net/opencores_eth.c @@ -36,6 +36,7 @@ #include "hw/net/mii.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "net/net.h" #include "qemu/module.h" #include "net/eth.h" diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c index 8d316e94c17..204c78aba37 100644 --- a/hw/net/xgmac.c +++ b/hw/net/xgmac.c @@ -28,6 +28,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "net/net.h" diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c index 58d81f77c88..3af7e6ecbec 100644 --- a/hw/nvram/spapr_nvram.c +++ b/hw/nvram/spapr_nvram.c @@ -38,6 +38,7 @@ #include "hw/ppc/spapr_vio.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" +#include "exec/cpu-common.h" #include "qom/object.h" struct SpaprNvram { diff --git a/hw/ppc/amigaone.c b/hw/ppc/amigaone.c index 4b858443806..8074713fbe9 100644 --- a/hw/ppc/amigaone.c +++ b/hw/ppc/amigaone.c @@ -21,6 +21,7 @@ #include "hw/ide/pci.h" #include "hw/i2c/smbus_eeprom.h" #include "hw/ppc/ppc.h" +#include "exec/cpu-common.h" #include "system/block-backend.h" #include "system/qtest.h" #include "system/reset.h" diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 113a2daca1d..eb0d3a418e2 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -52,6 +52,7 @@ #include "hw/core/irq.h" #include "hw/sd/sdhci.h" #include "hw/misc/unimp.h" +#include "exec/cpu-common.h" #define EPAPR_MAGIC (0x45504150) #define DTC_LOAD_PAD 0x1800000 diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 3e4d19fbe84..ac9fc5a6542 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -39,6 +39,7 @@ #include "qemu/datadir.h" #include "system/device_tree.h" #include "hw/ppc/vof.h" +#include "exec/cpu-common.h" #include <libfdt.h> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index f891c3a797c..1513575b8f3 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -58,6 +58,7 @@ #include "hw/isa/isa.h" #include "hw/char/serial-isa.h" #include "hw/rtc/mc146818rtc.h" +#include "exec/cpu-common.h" #include <libfdt.h> diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index fc6dd332e88..0f28a7937fb 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -17,6 +17,7 @@ #include "hw/pci-host/ppc4xx.h" #include "hw/core/qdev-properties.h" #include "hw/pci/pci.h" +#include "exec/cpu-common.h" #include "system/reset.h" #include "cpu.h" #include "ppc440.h" diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index eb626547ebd..bcf6aa560f3 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -43,6 +43,7 @@ #include "system/reset.h" #include "system/runstate.h" #include "qemu/log.h" +#include "exec/cpu-common.h" #include "hw/core/fw-path-provider.h" #include "elf.h" #include "net/net.h" diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index d2044b4fb52..9bc65c760ea 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -23,6 +23,7 @@ #include "hw/ppc/spapr.h" /* for RTAS return codes */ #include "hw/pci-host/spapr.h" /* spapr_phb_remove_pci_device_cb callback */ #include "hw/ppc/spapr_nvdimm.h" +#include "exec/cpu-common.h" #include "system/device_tree.h" #include "system/reset.h" #include "trace.h" diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c index b1774e88f2b..1a21ac7bbf8 100644 --- a/hw/ppc/spapr_events.c +++ b/hw/ppc/spapr_events.c @@ -41,6 +41,7 @@ #include "qemu/bcd.h" #include "qemu/main-loop.h" #include "hw/ppc/spapr_ovec.h" +#include "exec/cpu-common.h" #include <libfdt.h> #include "migration/blocker.h" diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 8f03b3e7764..032805a8d0d 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -24,6 +24,7 @@ #include "hw/ppc/spapr_numa.h" #include "mmu-book3s-v3.h" #include "hw/mem/memory-device.h" +#include "exec/cpu-common.h" bool is_ram_address(SpaprMachineState *spapr, hwaddr addr) { diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c index a6715b4026d..cb79ad34053 100644 --- a/hw/ppc/spapr_rtas.c +++ b/hw/ppc/spapr_rtas.c @@ -46,6 +46,7 @@ #include "qemu/cutils.h" #include "trace.h" #include "hw/ppc/fdt.h" +#include "exec/cpu-common.h" #include "target/ppc/mmu-hash64.h" #include "target/ppc/mmu-book3s-v3.h" #include "migration/blocker.h" diff --git a/hw/ppc/spapr_tpm_proxy.c b/hw/ppc/spapr_tpm_proxy.c index a48dab7e7a6..361a3dc817d 100644 --- a/hw/ppc/spapr_tpm_proxy.c +++ b/hw/ppc/spapr_tpm_proxy.c @@ -16,6 +16,7 @@ #include "system/reset.h" #include "hw/ppc/spapr.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include "trace.h" #define TPM_SPAPR_BUFSIZE 4096 diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 8b3e67b627c..51b3d7d7121 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -44,6 +44,7 @@ #include "hw/ppc/ppc.h" #include "hw/ppc/ppc4xx.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include <libfdt.h> diff --git a/hw/remote/proxy-memory-listener.c b/hw/remote/proxy-memory-listener.c index e1a52d24f0b..d0c856b0939 100644 --- a/hw/remote/proxy-memory-listener.c +++ b/hw/remote/proxy-memory-listener.c @@ -11,6 +11,7 @@ #include "qemu/int128.h" #include "qemu/range.h" #include "system/memory.h" +#include "system/ramblock.h" #include "exec/cpu-common.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/s390x/css.c b/hw/s390x/css.c index d2c0af6a9bf..ccc9c1c243b 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -22,6 +22,7 @@ #include "hw/s390x/s390_flic.h" #include "hw/s390x/s390-virtio-ccw.h" #include "hw/s390x/s390-ccw.h" +#include "exec/cpu-common.h" typedef struct CrwContainer { CRW crw; diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index b119a87a864..d34adb55220 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -28,6 +28,7 @@ #include "hw/s390x/ebcdic.h" #include "hw/scsi/scsi.h" #include "hw/virtio/virtio-net.h" +#include "exec/cpu-common.h" #include "ipl.h" #include "qemu/error-report.h" #include "qemu/config-file.h" diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index ff415b6312d..30fdca1e8a6 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -25,6 +25,7 @@ #include "hw/core/qdev-properties.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/msi.h" +#include "exec/cpu-common.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "system/reset.h" diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index 4a3ffb84f8f..b4011c4049d 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -32,6 +32,7 @@ #include "trace.h" #include "hw/s390x/css-bridge.h" #include "hw/s390x/s390-virtio-ccw.h" +#include "exec/cpu-common.h" #include "system/replay.h" #define NR_CLASSIC_INDICATOR_BITS 64 diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index b3cdc255b46..11ae6b9b747 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -34,6 +34,7 @@ #include "scsi/constants.h" #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include "vmw_pvscsi.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index ec9a386b48d..d4e25f761a6 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -29,6 +29,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "qemu/datadir.h" +#include "exec/cpu-common.h" #include "cpu.h" #include "hw/core/irq.h" #include "qemu/timer.h" diff --git a/hw/vfio-user/container.c b/hw/vfio-user/container.c index dab7a23224c..d5275a463b8 100644 --- a/hw/vfio-user/container.c +++ b/hw/vfio-user/container.c @@ -15,6 +15,7 @@ #include "hw/vfio-user/trace.h" #include "hw/vfio/vfio-device.h" #include "hw/vfio/vfio-listener.h" +#include "system/ramblock.h" #include "qapi/error.h" /* diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 013a691bc5a..5993d905457 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -15,7 +15,7 @@ #include <linux/vfio.h> #include "system/tcg.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/vfio/vfio-container.h" diff --git a/hw/vfio/helpers.c b/hw/vfio/helpers.c index 2cbc7b4964f..c595f860cea 100644 --- a/hw/vfio/helpers.c +++ b/hw/vfio/helpers.c @@ -23,6 +23,7 @@ #include <sys/ioctl.h> #include "system/kvm.h" +#include "exec/cpu-common.h" #include "hw/vfio/vfio-device.h" #include "hw/core/hw-error.h" #include "qapi/error.h" diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index fde343f06e3..58a4940b00e 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -27,7 +27,7 @@ #include "migration-multifd.h" #include "qapi/error.h" #include "qapi/qapi-events-vfio.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" #include "pci.h" #include "trace.h" #include "hw/core/hw-error.h" diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 266a11514a1..2e33e78e775 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -28,6 +28,7 @@ #include "migration/qemu-file-types.h" #include "system/dma.h" #include "system/memory.h" +#include "system/ramblock.h" #include "trace.h" /* enabled until disconnected backend stabilizes */ diff --git a/hw/xen/xen-mapcache.c b/hw/xen/xen-mapcache.c index e31d3797025..11115f60845 100644 --- a/hw/xen/xen-mapcache.c +++ b/hw/xen/xen-mapcache.c @@ -18,6 +18,7 @@ #include "hw/xen/xen_native.h" #include "qemu/bitmap.h" +#include "system/ramlist.h" #include "system/runstate.h" #include "system/xen-mapcache.h" #include "trace.h" diff --git a/hw/xen/xen_pt_graphics.c b/hw/xen/xen_pt_graphics.c index 2c0cec97234..445f33e1726 100644 --- a/hw/xen/xen_pt_graphics.c +++ b/hw/xen/xen_pt_graphics.c @@ -5,6 +5,7 @@ #include "qapi/error.h" #include "hw/xen/xen_pt.h" #include "hw/xen/xen_igd.h" +#include "exec/cpu-common.h" #include "xen-host-pci-device.h" static unsigned long igd_guest_opregion; diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index 5e6f897429d..d427d68e505 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -49,6 +49,7 @@ #include "bootparam.h" #include "xtensa_memory.h" #include "hw/xtensa/mx_pic.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" typedef struct XtfpgaFlashDesc { diff --git a/migration/ram.c b/migration/ram.c index 6b469238ad2..a57f4f49b34 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -48,7 +48,7 @@ #include "qapi/qapi-commands-migration.h" #include "qapi/qmp/qerror.h" #include "trace.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "exec/target_page.h" #include "qemu/rcu_queue.h" #include "migration/colo.h" diff --git a/stubs/physmem.c b/stubs/physmem.c index 1fc5f2df29f..14667f2bd8f 100644 --- a/stubs/physmem.c +++ b/stubs/physmem.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "exec/cpu-common.h" +#include "system/ramblock.h" RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, ram_addr_t *offset) diff --git a/stubs/ram-block.c b/stubs/ram-block.c index e88fab31a5d..8790a59593e 100644 --- a/stubs/ram-block.c +++ b/stubs/ram-block.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" -#include "exec/ramlist.h" -#include "exec/cpu-common.h" +#include "system/ramlist.h" +#include "system/ramblock.h" #include "system/memory.h" void *qemu_ram_get_host_addr(RAMBlock *rb) diff --git a/system/ioport.c b/system/ioport.c index 4f96e9119fc..801e2490c36 100644 --- a/system/ioport.c +++ b/system/ioport.c @@ -29,6 +29,7 @@ #include "system/ioport.h" #include "system/memory.h" #include "system/address-spaces.h" +#include "hw/core/qdev.h" #include "trace.h" struct MemoryRegionPortioList { diff --git a/system/memory.c b/system/memory.c index b65219c2e49..25950756604 100644 --- a/system/memory.c +++ b/system/memory.c @@ -26,7 +26,7 @@ #include "qom/object.h" #include "trace.h" #include "system/physmem.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "system/kvm.h" #include "system/runstate.h" #include "system/tcg.h" diff --git a/system/physmem.c b/system/physmem.c index e3221ce00de..2547687d137 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -68,7 +68,7 @@ #include "qemu/main-loop.h" #include "system/replay.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "qemu/pmem.h" diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 12a63602b11..48f853fff80 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -22,6 +22,7 @@ #include "qapi/error.h" #include "system/system.h" #include "system/runstate.h" +#include "system/ramblock.h" #include "system/kvm.h" #include "system/kvm_int.h" #include "kvm_arm.h" diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 60c79811382..e98da47a451 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -35,6 +35,7 @@ #include "system/hw_accel.h" #include "system/kvm_int.h" #include "system/runstate.h" +#include "system/ramblock.h" #include "kvm_i386.h" #include "../confidential-guest.h" #include "sev.h" diff --git a/target/i386/sev.c b/target/i386/sev.c index fd2dada013b..fb5a3b5d778 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -41,6 +41,7 @@ #include "confidential-guest.h" #include "hw/i386/pc.h" #include "system/address-spaces.h" +#include "system/ramlist.h" #include "hw/i386/e820_memory_layout.h" #include "qemu/queue.h" #include "qemu/cutils.h" diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 2c96eca584e..3b2f1077da6 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -41,7 +41,7 @@ #include "trace.h" #include "gdbstub/enums.h" #include "exec/memattrs.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "system/hostmem.h" #include "qemu/cutils.h" #include "qemu/main-loop.h" diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index 916dac1f14e..fe3bf408dda 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -41,7 +41,7 @@ #include "system/runstate.h" #include "system/device_tree.h" #include "gdbstub/enums.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "trace.h" #include "hw/s390x/s390-pci-inst.h" #include "hw/s390x/s390-pci-bus.h" diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c index fdff042ab46..44b457c442f 100644 --- a/util/vfio-helpers.c +++ b/util/vfio-helpers.c @@ -14,7 +14,7 @@ #include <sys/ioctl.h> #include <linux/vfio.h> #include "qapi/error.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" #include "exec/cpu-common.h" #include "system/memory.h" #include "trace.h" -- 2.51.1
