2 * COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
3 * (a.k.a. Fault Tolerance or Continuous Replication)
5 * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
6 * Copyright (c) 2016 FUJITSU LIMITED
7 * Copyright (c) 2016 Intel Corporation
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.
14 #include "qemu/osdep.h"
15 #include "migration.h"
16 #include "migration/colo.h"
17 #include "migration/vmstate.h"
24 static COLOInfo colo_info
;
26 COLOMode
get_colo_mode(void)
28 if (migration_in_colo_state()) {
29 return COLO_MODE_PRIMARY
;
30 } else if (migration_incoming_in_colo_state()) {
31 return COLO_MODE_SECONDARY
;
33 return COLO_MODE_UNKNOWN
;
37 static int colo_info_pre_save(void *opaque
)
41 s
->colo_requested
= migrate_colo_enabled();
46 static bool colo_info_need(void *opaque
)
48 return migrate_colo_enabled();
51 static const VMStateDescription colo_state
= {
54 .minimum_version_id
= 1,
55 .pre_save
= colo_info_pre_save
,
56 .needed
= colo_info_need
,
57 .fields
= (VMStateField
[]) {
58 VMSTATE_BOOL(colo_requested
, COLOInfo
),
63 void colo_info_init(void)
65 vmstate_register(NULL
, 0, &colo_state
, &colo_info
);
68 bool migration_incoming_enable_colo(void)
70 return colo_info
.colo_requested
;
73 void migration_incoming_exit_colo(void)
75 colo_info
.colo_requested
= false;