mirror of https://github.com/xemu-project/xemu.git
migration/savevm: split qemu_savevm_state_complete_precopy() into two parts
This is a preparation patch for further cleanup. No functional change, just wrap two major part of qemu_savevm_state_complete_precopy() into function. Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Message-Id: <20190709140924.13291-3-richardw.yang@linux.intel.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
4e455d51ef
commit
622a80c955
|
@ -1246,23 +1246,12 @@ void qemu_savevm_state_complete_postcopy(QEMUFile *f)
|
||||||
qemu_fflush(f);
|
qemu_fflush(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
|
static
|
||||||
bool inactivate_disks)
|
int qemu_savevm_state_complete_precopy_iterable(QEMUFile *f, bool in_postcopy,
|
||||||
|
bool iterable_only)
|
||||||
{
|
{
|
||||||
QJSON *vmdesc;
|
|
||||||
int vmdesc_len;
|
|
||||||
SaveStateEntry *se;
|
SaveStateEntry *se;
|
||||||
int ret;
|
int ret;
|
||||||
bool in_postcopy = migration_in_postcopy();
|
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
if (precopy_notify(PRECOPY_NOTIFY_COMPLETE, &local_err)) {
|
|
||||||
error_report_err(local_err);
|
|
||||||
}
|
|
||||||
|
|
||||||
trace_savevm_state_complete_precopy();
|
|
||||||
|
|
||||||
cpu_synchronize_all_states();
|
|
||||||
|
|
||||||
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
|
QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
|
||||||
if (!se->ops ||
|
if (!se->ops ||
|
||||||
|
@ -1291,9 +1280,18 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iterable_only) {
|
return 0;
|
||||||
goto flush;
|
}
|
||||||
}
|
|
||||||
|
static
|
||||||
|
int qemu_savevm_state_complete_precopy_non_iterable(QEMUFile *f,
|
||||||
|
bool in_postcopy,
|
||||||
|
bool inactivate_disks)
|
||||||
|
{
|
||||||
|
QJSON *vmdesc;
|
||||||
|
int vmdesc_len;
|
||||||
|
SaveStateEntry *se;
|
||||||
|
int ret;
|
||||||
|
|
||||||
vmdesc = qjson_new();
|
vmdesc = qjson_new();
|
||||||
json_prop_int(vmdesc, "page_size", qemu_target_page_size());
|
json_prop_int(vmdesc, "page_size", qemu_target_page_size());
|
||||||
|
@ -1353,6 +1351,40 @@ int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
|
||||||
}
|
}
|
||||||
qjson_destroy(vmdesc);
|
qjson_destroy(vmdesc);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int qemu_savevm_state_complete_precopy(QEMUFile *f, bool iterable_only,
|
||||||
|
bool inactivate_disks)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
Error *local_err = NULL;
|
||||||
|
bool in_postcopy = migration_in_postcopy();
|
||||||
|
|
||||||
|
if (precopy_notify(PRECOPY_NOTIFY_COMPLETE, &local_err)) {
|
||||||
|
error_report_err(local_err);
|
||||||
|
}
|
||||||
|
|
||||||
|
trace_savevm_state_complete_precopy();
|
||||||
|
|
||||||
|
cpu_synchronize_all_states();
|
||||||
|
|
||||||
|
ret = qemu_savevm_state_complete_precopy_iterable(f, in_postcopy,
|
||||||
|
iterable_only);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iterable_only) {
|
||||||
|
goto flush;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = qemu_savevm_state_complete_precopy_non_iterable(f, in_postcopy,
|
||||||
|
inactivate_disks);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
flush:
|
flush:
|
||||||
qemu_fflush(f);
|
qemu_fflush(f);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue