]> Git Repo - qemu.git/blob - migration/colo-comm.c
Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.10-20170606' into staging
[qemu.git] / migration / colo-comm.c
1 /*
2  * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
3  * (a.k.a. Fault Tolerance or Continuous Replication)
4  *
5  * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
6  * Copyright (c) 2016 FUJITSU LIMITED
7  * Copyright (c) 2016 Intel Corporation
8  *
9  * This work is licensed under the terms of the GNU GPL, version 2 or
10  * later. See the COPYING file in the top-level directory.
11  *
12  */
13
14 #include "qemu/osdep.h"
15 #include "migration/migration.h"
16 #include "migration/colo.h"
17 #include "migration/vmstate.h"
18 #include "trace.h"
19
20 typedef struct {
21      bool colo_requested;
22 } COLOInfo;
23
24 static COLOInfo colo_info;
25
26 COLOMode get_colo_mode(void)
27 {
28     if (migration_in_colo_state()) {
29         return COLO_MODE_PRIMARY;
30     } else if (migration_incoming_in_colo_state()) {
31         return COLO_MODE_SECONDARY;
32     } else {
33         return COLO_MODE_UNKNOWN;
34     }
35 }
36
37 static void colo_info_pre_save(void *opaque)
38 {
39     COLOInfo *s = opaque;
40
41     s->colo_requested = migrate_colo_enabled();
42 }
43
44 static bool colo_info_need(void *opaque)
45 {
46    return migrate_colo_enabled();
47 }
48
49 static const VMStateDescription colo_state = {
50     .name = "COLOState",
51     .version_id = 1,
52     .minimum_version_id = 1,
53     .pre_save = colo_info_pre_save,
54     .needed = colo_info_need,
55     .fields = (VMStateField[]) {
56         VMSTATE_BOOL(colo_requested, COLOInfo),
57         VMSTATE_END_OF_LIST()
58     },
59 };
60
61 void colo_info_init(void)
62 {
63     vmstate_register(NULL, 0, &colo_state, &colo_info);
64 }
65
66 bool migration_incoming_enable_colo(void)
67 {
68     return colo_info.colo_requested;
69 }
70
71 void migration_incoming_exit_colo(void)
72 {
73     colo_info.colo_requested = false;
74 }
This page took 0.027946 seconds and 4 git commands to generate.