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 /* 24 * save_prepare is called early, even before migration starts, and can be 25 * used to perform early checks. 26 */ 27 int (*save_prepare)(void *opaque, Error **errp); 28 void (*save_cleanup)(void *opaque); 29 int (*save_live_complete_postcopy)(QEMUFile *f, void *opaque); 30 int (*save_live_complete_precopy)(QEMUFile *f, void *opaque); 31 32 /* This runs both outside and inside the iothread lock. */ 33 bool (*is_active)(void *opaque); 34 bool (*has_postcopy)(void *opaque); 35 36 /* is_active_iterate 37 * If it is not NULL then qemu_savevm_state_iterate will skip iteration if 38 * it returns false. For example, it is needed for only-postcopy-states, 39 * which needs to be handled by qemu_savevm_state_setup and 40 * qemu_savevm_state_pending, but do not need iterations until not in 41 * postcopy stage. 42 */ 43 bool (*is_active_iterate)(void *opaque); 44 45 /* This runs outside the iothread lock in the migration case, and 46 * within the lock in the savevm case. The callback had better only 47 * use data that is local to the migration thread or protected 48 * by other locks. 49 */ 50 int (*save_live_iterate)(QEMUFile *f, void *opaque); 51 52 /* This runs outside the iothread lock! */ 53 int (*save_setup)(QEMUFile *f, void *opaque); 54 /* Note for save_live_pending: 55 * must_precopy: 56 * - must be migrated in precopy or in stopped state 57 * - i.e. must be migrated before target start 58 * 59 * can_postcopy: 60 * - can migrate in postcopy or in stopped state 61 * - i.e. can migrate after target start 62 * - some can also be migrated during precopy (RAM) 63 * - some must be migrated after source stops (block-dirty-bitmap) 64 * 65 * Sum of can_postcopy and must_postcopy is the whole amount of 66 * pending data. 67 */ 68 /* This estimates the remaining data to transfer */ 69 void (*state_pending_estimate)(void *opaque, uint64_t *must_precopy, 70 uint64_t *can_postcopy); 71 /* This calculate the exact remaining data to transfer */ 72 void (*state_pending_exact)(void *opaque, uint64_t *must_precopy, 73 uint64_t *can_postcopy); 74 LoadStateHandler *load_state; 75 int (*load_setup)(QEMUFile *f, void *opaque); 76 int (*load_cleanup)(void *opaque); 77 /* Called when postcopy migration wants to resume from failure */ 78 int (*resume_prepare)(MigrationState *s, void *opaque); 79 /* Checks if switchover ack should be used. Called only in dest */ 80 bool (*switchover_ack_needed)(void *opaque); 81 } SaveVMHandlers; 82 83 int register_savevm_live(const char *idstr, 84 uint32_t instance_id, 85 int version_id, 86 const SaveVMHandlers *ops, 87 void *opaque); 88 89 void unregister_savevm(VMStateIf *obj, const char *idstr, void *opaque); 90 91 #endif 92