xref: /openbmc/qemu/include/migration/register.h (revision bad5cfcd)
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