44b1ff319c
Modify the pre_save method on VMStateDescription to return an int rather than void so that it potentially can fail. Changed zillions of devices to make them return 0; the only case I've made it return non-0 is hw/intc/s390_flic_kvm.c that already had an error_report/return case. Note: If you add an error exit in your pre_save you must emit an error_report to say why. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <20170925112917.21340-2-dgilbert@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
77 lines
1.6 KiB
C
77 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.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 int colo_info_pre_save(void *opaque)
|
|
{
|
|
COLOInfo *s = opaque;
|
|
|
|
s->colo_requested = migrate_colo_enabled();
|
|
|
|
return 0;
|
|
}
|
|
|
|
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;
|
|
}
|