mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
migration: Capture error in postcopy_ram_listen_thread()
This is an incremental step in converting vmstate loading code to report error via Error objects instead of directly printing it to console/monitor. postcopy_ram_listen_thread() calls qemu_loadvm_state_main() to load the vm, and in case of a failure, it should set the error in the migration object. Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Arun Menon <armenon@redhat.com> Tested-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Link: https://lore.kernel.org/r/20250918-propagate_tpm_error-v14-23-36f11a6fb9d3@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
+6
-2
@@ -2095,6 +2095,7 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
|||||||
QEMUFile *f = mis->from_src_file;
|
QEMUFile *f = mis->from_src_file;
|
||||||
int load_res;
|
int load_res;
|
||||||
MigrationState *migr = migrate_get_current();
|
MigrationState *migr = migrate_get_current();
|
||||||
|
Error *local_err = NULL;
|
||||||
|
|
||||||
object_ref(OBJECT(migr));
|
object_ref(OBJECT(migr));
|
||||||
|
|
||||||
@@ -2111,7 +2112,7 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
|||||||
qemu_file_set_blocking(f, true, &error_fatal);
|
qemu_file_set_blocking(f, true, &error_fatal);
|
||||||
|
|
||||||
/* TODO: sanity check that only postcopiable data will be loaded here */
|
/* TODO: sanity check that only postcopiable data will be loaded here */
|
||||||
load_res = qemu_loadvm_state_main(f, mis, &error_fatal);
|
load_res = qemu_loadvm_state_main(f, mis, &local_err);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is tricky, but, mis->from_src_file can change after it
|
* This is tricky, but, mis->from_src_file can change after it
|
||||||
@@ -2137,7 +2138,10 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
|||||||
__func__, load_res);
|
__func__, load_res);
|
||||||
load_res = 0; /* prevent further exit() */
|
load_res = 0; /* prevent further exit() */
|
||||||
} else {
|
} else {
|
||||||
error_report("%s: loadvm failed: %d", __func__, load_res);
|
error_prepend(&local_err,
|
||||||
|
"loadvm failed during postcopy: %d: ", load_res);
|
||||||
|
migrate_set_error(migr, local_err);
|
||||||
|
error_report_err(local_err);
|
||||||
migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
|
migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
|
||||||
MIGRATION_STATUS_FAILED);
|
MIGRATION_STATUS_FAILED);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user