blob: df26e4dfe7c234dbf86c2fc185e2a40c4fcb4a05 [file] [log] [blame]
zhanghailiang5821ebf2016-10-27 14:42:53 +08001/*
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"
Juan Quintela6666c962017-04-24 20:07:27 +020015#include "migration.h"
Juan Quintelac59be012017-04-06 12:03:13 +020016#include "migration/colo.h"
Juan Quintela987772d2017-04-17 19:02:59 +020017#include "migration/vmstate.h"
zhanghailiang5821ebf2016-10-27 14:42:53 +080018#include "trace.h"
19
20typedef struct {
21 bool colo_requested;
22} COLOInfo;
23
24static COLOInfo colo_info;
25
zhanghailiangd89e6662016-10-27 14:43:03 +080026COLOMode 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
Dr. David Alan Gilbert44b1ff32017-09-25 12:29:12 +010037static int colo_info_pre_save(void *opaque)
zhanghailiang5821ebf2016-10-27 14:42:53 +080038{
39 COLOInfo *s = opaque;
40
41 s->colo_requested = migrate_colo_enabled();
Dr. David Alan Gilbert44b1ff32017-09-25 12:29:12 +010042
43 return 0;
zhanghailiang5821ebf2016-10-27 14:42:53 +080044}
45
46static bool colo_info_need(void *opaque)
47{
48 return migrate_colo_enabled();
49}
50
51static const VMStateDescription colo_state = {
52 .name = "COLOState",
53 .version_id = 1,
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),
59 VMSTATE_END_OF_LIST()
60 },
61};
62
63void colo_info_init(void)
64{
65 vmstate_register(NULL, 0, &colo_state, &colo_info);
66}
zhanghailiang25d0c162016-10-27 14:42:55 +080067
68bool migration_incoming_enable_colo(void)
69{
70 return colo_info.colo_requested;
71}
72
73void migration_incoming_exit_colo(void)
74{
75 colo_info.colo_requested = false;
76}