We only receive ram into the colo cache here and don't touch anything else, so the BQL is not needed here.
Move cpu_synchronize_all_states() downwards, before we apply the received checkpoint. It turns out that qemu_system_reset() already calls it for us. Signed-off-by: Lukas Straub <[email protected]> --- migration/colo.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/migration/colo.c b/migration/colo.c index 74338a59b563846f4562161942001889dd6191bc..cd1a2b94f497fcb25609bbe117feaa8eed1d7f50 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -684,11 +684,7 @@ static void colo_incoming_process_checkpoint(MigrationIncomingState *mis, return; } - bql_lock(); - cpu_synchronize_all_states(); ret = qemu_loadvm_state_main(mis->from_src_file, mis, errp); - bql_unlock(); - if (ret < 0) { return; } @@ -731,6 +727,8 @@ static void colo_incoming_process_checkpoint(MigrationIncomingState *mis, * With colo we load device vmstate during each checkpoint, on top of * a vm that was already running. Some devices expect a reset before * loading vmstate on such a previously running vm. + * + * NOTE: qemu_system_reset() calls cpu_synchronize_all_states() for us */ qemu_system_reset(SHUTDOWN_CAUSE_SNAPSHOT_LOAD); colo_flush_ram_cache(); -- 2.39.5
