qemu-cr16/migration
Juraj Marcin 7b842fe354 migration: Introduce POSTCOPY_DEVICE state
Currently, when postcopy starts, the source VM starts switchover and
sends a package containing the state of all non-postcopiable devices.
When the destination loads this package, the switchover is complete and
the destination VM starts. However, if the device state load fails or
the destination side crashes, the source side is already in
POSTCOPY_ACTIVE state and cannot be recovered, even when it has the most
up-to-date machine state as the destination has not yet started.

This patch introduces a new POSTCOPY_DEVICE state which is active while
the destination machine is loading the device state, is not yet running,
and the source side can be resumed in case of a migration failure.
Return-path is required for this state to function, otherwise it will be
skipped in favor of POSTCOPY_ACTIVE.

To transition from POSTCOPY_DEVICE to POSTCOPY_ACTIVE, the source
side uses a PONG message that is a response to a PING message processed
just before the POSTCOPY_RUN command that starts the destination VM.
Thus, this feature is effective even if the destination side does not
yet support this new state.

Signed-off-by: Juraj Marcin <jmarcin@redhat.com>
Link: https://lore.kernel.org/r/20251103183301.3840862-9-jmarcin@redhat.com
Signed-off-by: Peter Xu <peterx@redhat.com>
2025-11-03 16:04:10 -05:00
..
block-active.c migration/block-active: Remove global active flag 2025-02-06 14:26:51 +01:00
block-dirty-bitmap.c migration: Rename save_live_complete_precopy to save_complete 2025-07-11 10:37:36 -03:00
channel-block.c migration: add FEATURE_SEEKABLE to QIOChannelBlock 2025-11-03 16:04:09 -05:00
channel-block.h migration: introduce a QIOChannel impl for BlockDriverState VMState 2022-06-22 19:33:43 +01:00
channel.c migration: Properly wait on G_IO_IN when peeking messages 2025-11-03 16:04:10 -05:00
channel.h migration: check magic value for deciding the mapping of channels 2023-02-06 19:22:57 +01:00
colo-failover.c migration/colo: Improve an x-colo-lost-heartbeat error message 2023-02-23 14:10:17 +01:00
colo-stubs.c migration/colo: make colo_incoming_co() return void 2024-05-22 17:34:31 -03:00
colo.c migration: Update qemu_file_get_return_path() docs and remove dead checks 2025-10-03 09:48:02 -04:00
cpr-exec.c migration/cpr: Fix UAF in cpr_exec_cb() when execvp() fails 2025-11-03 16:04:09 -05:00
cpr-transfer.c migration: Support fd-based socket address in cpr_transfer_input 2025-06-23 16:03:59 -04:00
cpr.c migration/cpr: Fix coverity report in cpr_exec_persist_state() 2025-11-03 16:04:09 -05:00
cpu-throttle.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
dirtyrate.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
dirtyrate.h include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
exec.c migration: simplify exec migration functions 2024-03-04 07:12:40 +01:00
exec.h migration: convert exec backend to accept MigrateAddress. 2023-11-02 11:35:04 +01:00
fd.c migration: Allow pipes to keep working for fd migrations 2024-11-25 16:21:55 -05:00
fd.h migration: Revert mapped-ram multifd support to fd: URI 2024-03-22 12:12:08 -04:00
file.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
file.h migration/multifd: Pass in MultiFDPages_t to file_write_ramblock_iov 2024-09-03 16:24:35 -03:00
global_state.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
meson.build migration: cpr-exec save and load 2025-10-03 09:48:02 -04:00
migration-hmp-cmds.c migration/cpr: Document obscure usage of g_autofree when parse str 2025-11-03 16:04:10 -05:00
migration-stats.c migration: migration_rate_limit_reset() don't need the QEMUFile 2023-10-31 08:44:33 +01:00
migration-stats.h migration: Remove transferred atomic counter 2023-10-31 08:44:33 +01:00
migration.c migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
migration.h migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
multifd-device-state.c migration: Rename save_live_complete_precopy_thread to save_complete_precopy_thread 2025-07-11 10:37:39 -03:00
multifd-nocomp.c migration: enable multifd and postcopy together 2025-05-20 11:26:32 -04:00
multifd-qatzip.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-qpl.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-uadk.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-zero-page.c migration: write zero pages when postcopy enabled 2025-05-20 11:26:32 -04:00
multifd-zlib.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-zstd.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd.c migration/multifd/tls: Cleanup BYE message processing on sender side 2025-10-03 09:48:02 -04:00
multifd.h migration/multifd: move macros to multifd header 2025-05-02 11:09:36 -04:00
options.c migration: mapped-ram: handle zero pages 2025-11-03 16:04:09 -05:00
options.h migration/savevm: Add a compatibility check for capabilities 2025-11-03 16:04:09 -05:00
page_cache.c migration: Fix cache_init()'s "Failed to allocate" error messages 2021-02-08 11:19:51 +00:00
page_cache.h migration: Clean up signed vs. unsigned XBZRLE cache-size 2021-02-08 11:19:51 +00:00
postcopy-ram.c migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
postcopy-ram.h migration: Introduce postcopy incoming setup and cleanup functions 2025-11-03 16:04:10 -05:00
qemu-file.c io: Add qio_channel_wait_cond() helper 2025-11-03 16:04:10 -05:00
qemu-file.h migration: qemu_file_set_blocking(): add errp parameter 2025-09-19 12:46:07 +01:00
ram.c migration: mapped-ram: handle zero pages 2025-11-03 16:04:09 -05:00
ram.h migration: push Error **errp into loadvm_process_enable_colo() 2025-10-03 09:48:02 -04:00
rdma.c migration/rdma: Remove qemu_rdma_broken_ipv6_kernel 2025-05-02 11:09:36 -04:00
rdma.h migration: Unfold control_save_page() 2025-05-02 11:09:36 -04:00
savevm.c migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
savevm.h migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
socket.c migration: Remove unused socket_send_channel_create_sync 2024-10-08 15:28:55 -04:00
socket.h migration: Remove unused socket_send_channel_create_sync 2024-10-08 15:28:55 -04:00
threadinfo.c migration/multifd: Protect accesses to migration_threads 2023-07-26 10:55:56 +02:00
threadinfo.h migration/multifd: Protect accesses to migration_threads 2023-07-26 10:55:56 +02:00
tls.c migration: activate TLS thread safety workaround 2025-07-22 19:39:30 -03:00
tls.h migration/multifd: Terminate the TLS connection 2025-02-14 15:19:04 -03:00
trace-events migration: Introduce POSTCOPY_DEVICE state 2025-11-03 16:04:10 -05:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vfio-stub.c migration/vfio: compile only once 2025-09-02 17:57:05 +02:00
vfio.c migration/vfio: compile only once 2025-09-02 17:57:05 +02:00
vmstate-types.c migration: cpr-exec mode 2025-10-03 09:48:02 -04:00
vmstate.c migration: vmsd errp handlers: return bool 2025-11-03 16:04:10 -05:00
xbzrle.c migration/xbzrle: Use i386 host/cpuinfo.h 2023-05-23 16:51:18 -07:00
xbzrle.h migration/xbzrle: Use i386 host/cpuinfo.h 2023-05-23 16:51:18 -07:00
yank_functions.c migration/yank: Use channel features 2024-01-29 11:02:12 +08:00
yank_functions.h migration: Move the yank unregister of channel_close out 2021-07-26 12:45:03 +01:00