From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> Move constants around and add types to allow file structure to move into visitors.
Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> --- arch_init.c | 12 ------------ include/migration/migration.h | 15 +++++++++++++++ include/migration/vmstate.h | 20 +++++++++++++++++--- include/qemu/typedefs.h | 4 ++-- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/arch_init.c b/arch_init.c index 60c975d..73b9303 100644 --- a/arch_init.c +++ b/arch_init.c @@ -110,18 +110,6 @@ static bool mig_throttle_on; static int dirty_rate_high_cnt; static void check_guest_throttling(void); -/***********************************************************/ -/* ram save/restore */ - -#define RAM_SAVE_FLAG_FULL 0x01 /* Obsolete, not used anymore */ -#define RAM_SAVE_FLAG_COMPRESS 0x02 -#define RAM_SAVE_FLAG_MEM_SIZE 0x04 -#define RAM_SAVE_FLAG_PAGE 0x08 -#define RAM_SAVE_FLAG_EOS 0x10 -#define RAM_SAVE_FLAG_CONTINUE 0x20 -#define RAM_SAVE_FLAG_XBZRLE 0x40 -/* 0x80 is reserved in migration.h start with 0x100 next */ - static struct defconfig_file { const char *filename; /* Indicates it is an user config file (disabled by -no-user-config) */ diff --git a/include/migration/migration.h b/include/migration/migration.h index 3e1e6c7..1987e79 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -165,7 +165,16 @@ void ram_control_load_hook(QEMUFile *f, uint64_t flags); * side. This lets before_ram_iterate/after_ram_iterate add * transport-specific sections to the RAM migration data. */ +/* ram save/restore */ +#define RAM_SAVE_FLAG_FULL 0x01 /* Obsolete, not used anymore */ +#define RAM_SAVE_FLAG_COMPRESS 0x02 +#define RAM_SAVE_FLAG_MEM_SIZE 0x04 +#define RAM_SAVE_FLAG_PAGE 0x08 +#define RAM_SAVE_FLAG_EOS 0x10 +#define RAM_SAVE_FLAG_CONTINUE 0x20 +#define RAM_SAVE_FLAG_XBZRLE 0x40 #define RAM_SAVE_FLAG_HOOK 0x80 +#define RAM_SAVE_FLAG_MASK 0x1ff #define RAM_SAVE_CONTROL_NOT_SUPP -1000 #define RAM_SAVE_CONTROL_DELAYED -2000 @@ -174,4 +183,10 @@ size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, ram_addr_t offset, size_t size, int *bytes_sent); +typedef struct { + uint64_t addr; + uint16_t flags; + char idstr[256]; +} ramsecentry_header; + #endif diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index e7e1705..a5e4b0b 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -26,6 +26,7 @@ #ifndef QEMU_VMSTATE_H #define QEMU_VMSTATE_H 1 +#include "qemu/typedefs.h" #ifndef CONFIG_USER_ONLY #include <migration/qemu-file.h> #endif @@ -49,15 +50,27 @@ typedef struct SaveVMHandlers { * use data that is local to the migration thread or protected * by other locks. */ - int (*save_live_iterate)(QEMUFile *f, void *opaque); + int (*save_live_iterate)(Visitor *v, void *opaque); /* This runs outside the iothread lock! */ - int (*save_live_setup)(QEMUFile *f, void *opaque); - uint64_t (*save_live_pending)(QEMUFile *f, void *opaque, uint64_t max_size); + int (*save_live_setup)(Visitor *v, void *opaque); + uint64_t (*save_live_pending)(void *opaque, uint64_t max_size); LoadStateHandler *load_state; } SaveVMHandlers; +/* This is the data used to identify a section as passed + * into the section version of the compat sequence visitor + * (TODO: Probably want to move the whole name lookup into there + * and keep the section_id wrapped inside the binary visitor) + */ +typedef struct SectionHeader { + uint32_t section_id; + uint32_t instance_id; /* Below only used for full version */ + uint32_t version_id; + char idstr[256]; +} SectionHeader; + int register_savevm(DeviceState *dev, const char *idstr, int instance_id, @@ -134,6 +147,7 @@ struct VMStateDescription { void (*pre_save)(void *opaque); VMStateField *fields; const VMStateSubsection *subsections; + uint32_t ber_tag; }; #ifdef CONFIG_USER_ONLY diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index bf8daac..3fea88e 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -10,8 +10,6 @@ typedef struct QEMUBH QEMUBH; typedef struct AioContext AioContext; -typedef struct Visitor Visitor; - struct Monitor; typedef struct Monitor Monitor; typedef struct MigrationParams MigrationParams; @@ -39,6 +37,7 @@ typedef struct DriveInfo DriveInfo; typedef struct DisplayState DisplayState; typedef struct DisplayChangeListener DisplayChangeListener; typedef struct DisplaySurface DisplaySurface; +typedef struct Error Error; typedef struct PixelFormat PixelFormat; typedef struct QemuConsole QemuConsole; typedef struct CharDriverState CharDriverState; @@ -73,5 +72,6 @@ typedef struct SHPCDevice SHPCDevice; typedef struct FWCfgState FWCfgState; typedef struct PcGuestInfo PcGuestInfo; typedef struct Range Range; +typedef struct Visitor Visitor; #endif /* QEMU_TYPEDEFS_H */ -- 1.8.5.3