2 * QEMU migration vmstate registration
4 * Copyright IBM, Corp. 2008
7 * Anthony Liguori <aliguori@us.ibm.com>
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
14 #ifndef MIGRATION_REGISTER_H
15 #define MIGRATION_REGISTER_H
17 #include "hw/vmstate-if.h"
19 typedef struct SaveVMHandlers
{
20 /* This runs inside the iothread lock. */
21 SaveStateHandler
*save_state
;
24 * save_prepare is called early, even before migration starts, and can be
25 * used to perform early checks.
27 int (*save_prepare
)(void *opaque
, Error
**errp
);
28 int (*save_setup
)(QEMUFile
*f
, void *opaque
);
29 void (*save_cleanup
)(void *opaque
);
30 int (*save_live_complete_postcopy
)(QEMUFile
*f
, void *opaque
);
31 int (*save_live_complete_precopy
)(QEMUFile
*f
, void *opaque
);
33 /* This runs both outside and inside the iothread lock. */
34 bool (*is_active
)(void *opaque
);
35 bool (*has_postcopy
)(void *opaque
);
38 * If it is not NULL then qemu_savevm_state_iterate will skip iteration if
39 * it returns false. For example, it is needed for only-postcopy-states,
40 * which needs to be handled by qemu_savevm_state_setup and
41 * qemu_savevm_state_pending, but do not need iterations until not in
44 bool (*is_active_iterate
)(void *opaque
);
46 /* This runs outside the iothread lock in the migration case, and
47 * within the lock in the savevm case. The callback had better only
48 * use data that is local to the migration thread or protected
51 int (*save_live_iterate
)(QEMUFile
*f
, void *opaque
);
53 /* This runs outside the iothread lock! */
54 /* Note for save_live_pending:
56 * - must be migrated in precopy or in stopped state
57 * - i.e. must be migrated before target start
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)
65 * Sum of can_postcopy and must_postcopy is the whole amount of
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
);
83 int register_savevm_live(const char *idstr
,
86 const SaveVMHandlers
*ops
,
89 void unregister_savevm(VMStateIf
*obj
, const char *idstr
, void *opaque
);