Refactor the migration control logic by eliminating the `RAM_SAVE_CONTROL_NOT_SUPP` return value within the migration codebase.
This involves moving the checks for RDMA migration status and postcopy state from rdma_control_save_page() to control_save_page() With this change, control_save_page() now takes responsibility for determining whether RDMA operations can proceed, based on the state of migration. Signed-off-by: Li Zhijian <lizhij...@fujitsu.com> --- migration/ram.c | 19 ++++++++++--------- migration/rdma.c | 4 +--- migration/rdma.h | 3 +-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 424df6d9f13..b7157b9b175 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1155,18 +1155,19 @@ static bool control_save_page(PageSearchStatus *pss, { int ret; - ret = rdma_control_save_page(pss->pss_channel, pss->block->offset, offset, - TARGET_PAGE_SIZE); - if (ret == RAM_SAVE_CONTROL_NOT_SUPP) { - return false; - } + if (migrate_rdma() && !migration_in_postcopy()) { + ret = rdma_control_save_page(pss->pss_channel, pss->block->offset, + offset, TARGET_PAGE_SIZE); - if (ret == RAM_SAVE_CONTROL_DELAYED) { - *pages = 1; + if (ret == RAM_SAVE_CONTROL_DELAYED) { + *pages = 1; + } else { + *pages = ret; + } return true; } - *pages = ret; - return true; + + return false; } /* diff --git a/migration/rdma.c b/migration/rdma.c index af8e6234a9f..c6876347e1e 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -3284,9 +3284,7 @@ err: int rdma_control_save_page(QEMUFile *f, ram_addr_t block_offset, ram_addr_t offset, size_t size) { - if (!migrate_rdma() || migration_in_postcopy()) { - return RAM_SAVE_CONTROL_NOT_SUPP; - } + assert(migrate_rdma()); int ret = qemu_rdma_save_page(f, block_offset, offset, size); diff --git a/migration/rdma.h b/migration/rdma.h index f55f28bbed1..8eeb0117b91 100644 --- a/migration/rdma.h +++ b/migration/rdma.h @@ -33,7 +33,6 @@ void rdma_start_incoming_migration(InetSocketAddress *host_port, Error **errp); #define RAM_CONTROL_ROUND 1 #define RAM_CONTROL_FINISH 3 -#define RAM_SAVE_CONTROL_NOT_SUPP -1000 #define RAM_SAVE_CONTROL_DELAYED -2000 #ifdef CONFIG_RDMA @@ -56,7 +55,7 @@ static inline int rdma_control_save_page(QEMUFile *f, ram_addr_t block_offset, ram_addr_t offset, size_t size) { - return RAM_SAVE_CONTROL_NOT_SUPP; + g_assert_not_reached(); } #endif #endif -- 2.44.0