Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging
[qemu/kevin.git] / migration / colo-comm.c
blobb61aa19a3837011eba28915ed1209ab3c9c72f8d
1 /*
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"
18 #include "trace.h"
20 typedef struct {
21 bool colo_requested;
22 } COLOInfo;
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;
32 } else {
33 return COLO_MODE_UNKNOWN;
37 static void colo_info_pre_save(void *opaque)
39 COLOInfo *s = opaque;
41 s->colo_requested = migrate_colo_enabled();
44 static bool colo_info_need(void *opaque)
46 return migrate_colo_enabled();
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()
61 void colo_info_init(void)
63 vmstate_register(NULL, 0, &colo_state, &colo_info);
66 bool migration_incoming_enable_colo(void)
68 return colo_info.colo_requested;
71 void migration_incoming_exit_colo(void)
73 colo_info.colo_requested = false;