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 * must_precopy: 51 * - must be migrated in precopy or in stopped state 52 * - i.e. must be migrated before target start 53 * 54 * can_postcopy: 55 * - can migrate in postcopy or in stopped state 56 * - i.e. can migrate after target start 57 * - some can also be migrated during precopy (RAM) 58 * - some must be migrated after source stops (block-dirty-bitmap) 59 * 60 * Sum of can_postcopy and must_postcopy is the whole amount of 61 * pending data. 62 */ 63 /* This estimates the remaining data to transfer */ 64 void (*state_pending_estimate)(void *opaque, uint64_t *must_precopy, 65 uint64_t *can_postcopy); 66 /* This calculate the exact remaining data to transfer */ 67 void (*state_pending_exact)(void *opaque, uint64_t *must_precopy, 68 uint64_t *can_postcopy); 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 /* Checks if switchover ack should be used. Called only in dest */ 75 bool (*switchover_ack_needed)(void *opaque); 76 } SaveVMHandlers; 77 78 int register_savevm_live(const char *idstr, 79 uint32_t instance_id, 80 int version_id, 81 const SaveVMHandlers *ops, 82 void *opaque); 83 84 void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque); 85 86 #endif 87