changes from v2: Added more if != CANCELLING where it was missing. We have other work [1] pending around migration states, so I've kept this simple for correctness only.
CI run: https://gitlab.com/farosas/qemu/-/pipelines/1670135398 1- https://lore.kernel.org/r/20250110100707.4805-1-shivam.kum...@nutanix.com v2: https://lore.kernel.org/r/20250211150136.6781-1-faro...@suse.de v1: https://lore.kernel.org/r/20241202220137.32584-1-faro...@suse.de While working on downstream issues with postcopy, I ended up writing a set of tests for issuing qmp_migrate_cancel() at various points during the migration. That exposed some bugs, which this series attempts to fix. There is also a fix for the issue Daniel found: https://gitlab.com/qemu-project/qemu/-/issues/2633 I'm also sending the test code. It creates one test per MIGRATION_STATUS_ state. Each test starts a migration, waits for that specific state to be reached, issues qmp_migrate_cancel() and checks that the migration state changes to cancelled (for now only cancelling migration from the source side). I was initially worried that this would be too racy, but so far each test has survived 1000 iterations. I'm thinking it's worth merging, specially because even after working on this I haven't been able to clear the questions we have in our todo list [1], so we'll probably need more work around this area in the future. 1- https://wiki.qemu.org/ToDo/LiveMigration#Migration_cancel_concurrency Fabiano Rosas (9): migration: Set migration error outside of migrate_cancel migration: Unify migration_cancel and migrate_fd_cancel migration: Change migrate_fd_ to migration_ migration: Fix hang after error in destination setup phase migration: Reject qmp_migrate_cancel after postcopy migration: Don't set FAILED state when cancelling tests/qtest/migration: Introduce migration_test_add_suffix tests/qtest/migration: Add a cancel test migration: Update migrate_cancel documentation migration/channel.c | 9 +- migration/migration.c | 81 +++++++----- migration/migration.h | 4 +- migration/multifd.c | 2 +- migration/ram.c | 4 +- migration/rdma.c | 2 +- migration/trace-events | 4 +- qapi/migration.json | 4 +- tests/qtest/migration/migration-util.c | 24 ++++ tests/qtest/migration/migration-util.h | 2 + tests/qtest/migration/precopy-tests.c | 176 +++++++++++++++++++++++++ 11 files changed, 267 insertions(+), 45 deletions(-) -- 2.35.3