1 /* 2 * QEMU migration vmstate registration 3 * 4 * Copyright IBM, Corp. 2008 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2. See 10 * the COPYING file in the top-level directory. 11 * 12 */ 13 14 #ifndef MIGRATION_REGISTER_H 15 #define MIGRATION_REGISTER_H 16 17 #include "hw/vmstate-if.h" 18 19 typedef struct SaveVMHandlers { 20 /* This runs inside the iothread lock. */ 21 SaveStateHandler *save_state; 22 23 void (*save_cleanup)(void *opaque); 24 int (*save_live_complete_postcopy)(QEMUFile *f, void *opaque); 25 int (*save_live_complete_precopy)(QEMUFile *f, void *opaque); 26 27 /* This runs both outside and inside the iothread lock. */ 28 bool (*is_active)(void *opaque); 29 bool (*has_postcopy)(void *opaque); 30 31 /* is_active_iterate 32 * If it is not NULL then qemu_savevm_state_iterate will skip iteration if 33 * it returns false. For example, it is needed for only-postcopy-states, 34 * which needs to be handled by qemu_savevm_state_setup and 35 * qemu_savevm_state_pending, but do not need iterations until not in 36 * postcopy stage. 37 */ 38 bool (*is_active_iterate)(void *opaque); 39 40 /* This runs outside the iothread lock in the migration case, and 41 * within the lock in the savevm case. The callback had better only 42 * use data that is local to the migration thread or protected 43 * by other locks. 44 */ 45 int (*save_live_iterate)(QEMUFile *f, void *opaque); 46 47 /* This runs outside the iothread lock! */ 48 int (*save_setup)(QEMUFile *f, void *opaque); 49 /* Note for save_live_pending: 50 * - res_precopy_only is for data which must be migrated in precopy phase 51 * or in stopped state, in other words - before target vm start 52 * - res_compatible is for data which may be migrated in any phase 53 * - res_postcopy_only is for data which must be migrated in postcopy phase 54 * or in stopped state, in other words - after source vm stop 55 * 56 * Sum of res_postcopy_only, res_compatible and res_postcopy_only is the 57 * whole amount of pending data. 58 */ 59 /* This estimates the remaining data to transfer */ 60 void (*state_pending_estimate)(void *opaque, 61 uint64_t *res_precopy_only, 62 uint64_t *res_compatible, 63 uint64_t *res_postcopy_only); 64 /* This calculate the exact remaining data to transfer */ 65 void (*state_pending_exact)(void *opaque, 66 uint64_t *res_precopy_only, 67 uint64_t *res_compatible, 68 uint64_t *res_postcopy_only); 69 LoadStateHandler *load_state; 70 int (*load_setup)(QEMUFile *f, void *opaque); 71 int (*load_cleanup)(void *opaque); 72 /* Called when postcopy migration wants to resume from failure */ 73 int (*resume_prepare)(MigrationState *s, void *opaque); 74 } SaveVMHandlers; 75 76 int register_savevm_live(const char *idstr, 77 uint32_t instance_id, 78 int version_id, 79 const SaveVMHandlers *ops, 80 void *opaque); 81 82 void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque); 83 84 #endif 85