mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
987772d9e7
Signed-off-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- Minor rearrangements due to rebase
75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
/*
|
|
* COarse-grain LOck-stepping Virtual Machines for Non-stop Service (COLO)
|
|
* (a.k.a. Fault Tolerance or Continuous Replication)
|
|
*
|
|
* Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
|
|
* Copyright (c) 2016 FUJITSU LIMITED
|
|
* Copyright (c) 2016 Intel Corporation
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or
|
|
* later. See the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#include "qemu/osdep.h"
|
|
#include "migration/migration.h"
|
|
#include "migration/colo.h"
|
|
#include "migration/vmstate.h"
|
|
#include "trace.h"
|
|
|
|
typedef struct {
|
|
bool colo_requested;
|
|
} COLOInfo;
|
|
|
|
static COLOInfo colo_info;
|
|
|
|
COLOMode get_colo_mode(void)
|
|
{
|
|
if (migration_in_colo_state()) {
|
|
return COLO_MODE_PRIMARY;
|
|
} else if (migration_incoming_in_colo_state()) {
|
|
return COLO_MODE_SECONDARY;
|
|
} else {
|
|
return COLO_MODE_UNKNOWN;
|
|
}
|
|
}
|
|
|
|
static void colo_info_pre_save(void *opaque)
|
|
{
|
|
COLOInfo *s = opaque;
|
|
|
|
s->colo_requested = migrate_colo_enabled();
|
|
}
|
|
|
|
static bool colo_info_need(void *opaque)
|
|
{
|
|
return migrate_colo_enabled();
|
|
}
|
|
|
|
static const VMStateDescription colo_state = {
|
|
.name = "COLOState",
|
|
.version_id = 1,
|
|
.minimum_version_id = 1,
|
|
.pre_save = colo_info_pre_save,
|
|
.needed = colo_info_need,
|
|
.fields = (VMStateField[]) {
|
|
VMSTATE_BOOL(colo_requested, COLOInfo),
|
|
VMSTATE_END_OF_LIST()
|
|
},
|
|
};
|
|
|
|
void colo_info_init(void)
|
|
{
|
|
vmstate_register(NULL, 0, &colo_state, &colo_info);
|
|
}
|
|
|
|
bool migration_incoming_enable_colo(void)
|
|
{
|
|
return colo_info.colo_requested;
|
|
}
|
|
|
|
void migration_incoming_exit_colo(void)
|
|
{
|
|
colo_info.colo_requested = false;
|
|
}
|