xref: /qemu/include/migration/register.h (revision f2a8f0a6)
1*f2a8f0a6SJuan Quintela /*
2*f2a8f0a6SJuan Quintela  * QEMU migration vmstate registration
3*f2a8f0a6SJuan Quintela  *
4*f2a8f0a6SJuan Quintela  * Copyright IBM, Corp. 2008
5*f2a8f0a6SJuan Quintela  *
6*f2a8f0a6SJuan Quintela  * Authors:
7*f2a8f0a6SJuan Quintela  *  Anthony Liguori   <aliguori@us.ibm.com>
8*f2a8f0a6SJuan Quintela  *
9*f2a8f0a6SJuan Quintela  * This work is licensed under the terms of the GNU GPL, version 2.  See
10*f2a8f0a6SJuan Quintela  * the COPYING file in the top-level directory.
11*f2a8f0a6SJuan Quintela  *
12*f2a8f0a6SJuan Quintela  */
13*f2a8f0a6SJuan Quintela 
14*f2a8f0a6SJuan Quintela #ifndef MIGRATION_REGISTER_H
15*f2a8f0a6SJuan Quintela #define MIGRATION_REGISTER_H
16*f2a8f0a6SJuan Quintela 
17*f2a8f0a6SJuan Quintela typedef void SaveStateHandler(QEMUFile *f, void *opaque);
18*f2a8f0a6SJuan Quintela typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
19*f2a8f0a6SJuan Quintela 
20*f2a8f0a6SJuan Quintela typedef struct SaveVMHandlers {
21*f2a8f0a6SJuan Quintela     /* This runs inside the iothread lock.  */
22*f2a8f0a6SJuan Quintela     SaveStateHandler *save_state;
23*f2a8f0a6SJuan Quintela 
24*f2a8f0a6SJuan Quintela     void (*cleanup)(void *opaque);
25*f2a8f0a6SJuan Quintela     int (*save_live_complete_postcopy)(QEMUFile *f, void *opaque);
26*f2a8f0a6SJuan Quintela     int (*save_live_complete_precopy)(QEMUFile *f, void *opaque);
27*f2a8f0a6SJuan Quintela 
28*f2a8f0a6SJuan Quintela     /* This runs both outside and inside the iothread lock.  */
29*f2a8f0a6SJuan Quintela     bool (*is_active)(void *opaque);
30*f2a8f0a6SJuan Quintela 
31*f2a8f0a6SJuan Quintela     /* This runs outside the iothread lock in the migration case, and
32*f2a8f0a6SJuan Quintela      * within the lock in the savevm case.  The callback had better only
33*f2a8f0a6SJuan Quintela      * use data that is local to the migration thread or protected
34*f2a8f0a6SJuan Quintela      * by other locks.
35*f2a8f0a6SJuan Quintela      */
36*f2a8f0a6SJuan Quintela     int (*save_live_iterate)(QEMUFile *f, void *opaque);
37*f2a8f0a6SJuan Quintela 
38*f2a8f0a6SJuan Quintela     /* This runs outside the iothread lock!  */
39*f2a8f0a6SJuan Quintela     int (*save_live_setup)(QEMUFile *f, void *opaque);
40*f2a8f0a6SJuan Quintela     void (*save_live_pending)(QEMUFile *f, void *opaque,
41*f2a8f0a6SJuan Quintela                               uint64_t threshold_size,
42*f2a8f0a6SJuan Quintela                               uint64_t *non_postcopiable_pending,
43*f2a8f0a6SJuan Quintela                               uint64_t *postcopiable_pending);
44*f2a8f0a6SJuan Quintela     LoadStateHandler *load_state;
45*f2a8f0a6SJuan Quintela } SaveVMHandlers;
46*f2a8f0a6SJuan Quintela 
47*f2a8f0a6SJuan Quintela int register_savevm_live(DeviceState *dev,
48*f2a8f0a6SJuan Quintela                          const char *idstr,
49*f2a8f0a6SJuan Quintela                          int instance_id,
50*f2a8f0a6SJuan Quintela                          int version_id,
51*f2a8f0a6SJuan Quintela                          SaveVMHandlers *ops,
52*f2a8f0a6SJuan Quintela                          void *opaque);
53*f2a8f0a6SJuan Quintela 
54*f2a8f0a6SJuan Quintela void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque);
55*f2a8f0a6SJuan Quintela 
56*f2a8f0a6SJuan Quintela #endif
57