 4b870dc4d0
			
		
	
	
		4b870dc4d0
		
	
	
	
	
		
			
			Add an option for hostmem-file to start the memory object at an offset into the target file. This is useful if multiple memory objects reside inside the same target file, such as a device node. In particular, it's useful to map guest memory directly into /dev/mem for experimentation. To make this work consistently, also fix up all places in QEMU that expect fd offsets to be 0. Signed-off-by: Alexander Graf <graf@amazon.com> Message-Id: <20230403221421.60877-1-graf@amazon.com> Acked-by: Markus Armbruster <armbru@redhat.com> Acked-by: Peter Xu <peterx@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com>
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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 QEMU_EXEC_RAMBLOCK_H
 | |
| #define QEMU_EXEC_RAMBLOCK_H
 | |
| 
 | |
| #ifndef CONFIG_USER_ONLY
 | |
| #include "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 iothread lock.  */
 | |
|     char idstr[256];
 | |
|     /* RCU-enabled, writes protected by the ramlist lock */
 | |
|     QLIST_ENTRY(RAMBlock) next;
 | |
|     QLIST_HEAD(, RAMBlockNotifier) ramblock_notifiers;
 | |
|     int fd;
 | |
|     uint64_t fd_offset;
 | |
|     size_t page_size;
 | |
|     /* dirty bitmap used during migration */
 | |
|     unsigned long *bmap;
 | |
|     /* bitmap of already received pages in postcopy */
 | |
|     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
 | |
| #endif
 |