@@ -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;
}
/*
@@ -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);
@@ -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
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 <lizhijian@fujitsu.com> --- migration/ram.c | 19 ++++++++++--------- migration/rdma.c | 4 +--- migration/rdma.h | 3 +-- 3 files changed, 12 insertions(+), 14 deletions(-)