- Het's new test cases for "channels" - Het's fix for a typo for vsock parsing - Cedric's VFIO error report series - Cedric's one more patch for dirty-bitmap error reports - Zhijian's rdma deprecation patch - Yuan's zeropage optimization to fix double faults on anon mem - Zhijian's COLO fix on a crash -----BEGIN PGP SIGNATURE----- iIgEABYKADAWIQS5GE3CDMRX2s990ak7X8zN86vXBgUCZig4HxIccGV0ZXJ4QHJl ZGhhdC5jb20ACgkQO1/MzfOr1wbQiwD/V5nSJzSuAG4Ra1Fjo+LRG2TT6qk8eNCi fIytehSw6cYA/0wqarxOF0tr7ikeyhtG3w4xFf44kk6KcPkoVSl1tqoL =pJmQ -----END PGP SIGNATURE----- Merge tag 'migration-20240423-pull-request' of https://gitlab.com/peterx/qemu into staging Migration pull for 9.1 - Het's new test cases for "channels" - Het's fix for a typo for vsock parsing - Cedric's VFIO error report series - Cedric's one more patch for dirty-bitmap error reports - Zhijian's rdma deprecation patch - Yuan's zeropage optimization to fix double faults on anon mem - Zhijian's COLO fix on a crash # -----BEGIN PGP SIGNATURE----- # # iIgEABYKADAWIQS5GE3CDMRX2s990ak7X8zN86vXBgUCZig4HxIccGV0ZXJ4QHJl # ZGhhdC5jb20ACgkQO1/MzfOr1wbQiwD/V5nSJzSuAG4Ra1Fjo+LRG2TT6qk8eNCi # fIytehSw6cYA/0wqarxOF0tr7ikeyhtG3w4xFf44kk6KcPkoVSl1tqoL # =pJmQ # -----END PGP SIGNATURE----- # gpg: Signature made Tue 23 Apr 2024 03:37:19 PM PDT # gpg: using EDDSA key B9184DC20CC457DACF7DD1A93B5FCCCDF3ABD706 # gpg: issuer "peterx@redhat.com" # gpg: Good signature from "Peter Xu <xzpeter@gmail.com>" [unknown] # gpg: aka "Peter Xu <peterx@redhat.com>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: B918 4DC2 0CC4 57DA CF7D D1A9 3B5F CCCD F3AB D706 * tag 'migration-20240423-pull-request' of https://gitlab.com/peterx/qemu: (26 commits) migration/colo: Fix bdrv_graph_rdlock_main_loop: Assertion `!qemu_in_coroutine()' failed. migration/multifd: solve zero page causing multiple page faults migration: Add Error** argument to add_bitmaps_to_list() migration: Modify ram_init_bitmaps() to report dirty tracking errors migration: Add Error** argument to xbzrle_init() migration: Add Error** argument to ram_state_init() memory: Add Error** argument to the global_dirty_log routines migration: Introduce ram_bitmaps_destroy() memory: Add Error** argument to .log_global_start() handler migration: Add Error** argument to .load_setup() handler migration: Add Error** argument to .save_setup() handler migration: Add Error** argument to qemu_savevm_state_setup() migration: Add Error** argument to vmstate_save() migration: Always report an error in ram_save_setup() migration: Always report an error in block_save_setup() vfio: Always report an error in vfio_save_setup() s390/stattrib: Add Error** argument to set_migrationmode() handler tests/qtest/migration: Fix typo for vsock in SocketAddress_to_str tests/qtest/migration: Add negative tests to validate migration QAPIs tests/qtest/migration: Add multifd_tcp_plain test using list of channels instead of uri ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
		
			
				
	
	
		
			95 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.0 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 the BQL.  */
 | 
						|
    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;
 | 
						|
    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
 | 
						|
#endif
 |